http协议

什么是http?

http全称为超文件传输协议(Hyper text transfer protocol),其是一个应用层协议,基于tcp的80端口,一般使用ASCII编码传输。http协议是无状态的(stateless),即服务器无法追踪访问者来源. 其可以使用cokie机制来追踪同一个用户.

Cookie的追踪用户的原理

第一次方访问服务时,服务器发送一个cookie的小数据(随机数,用来标识客户端身份), 客户端会将其保存下来,随后 , 访问同一个站点时,会把应用于此站点的cookie提交给服务器,从而服务器就能识别客户端身份.

  • 胖Cookie的实现原理
    将用户会话及状态信息都保存至客户端本地,在请求数据时,将状态信息回传至服务器
  • 瘦cookie + session的实现原理
    将用户的状态信息都保存至服务器端,并与相应客户端的cookie令牌相对应,请求数据的时候,只是需向告诉服务器自己的cookie信息.

什么是超文本?

使用html(Hyper text mark language)编程语言编写,被称为文本标记语言。大致格式如下:

<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h1></h1>
        <h2></h2>
            <p>正文<a href="www.magedu.com/download.html">正文</a></p>
        <h2></h2>
    </body>
</html>

http协议版本

  • http 0.9 : 原型版本,功能简单,只添加了GET的方法
  • http 1.0 :增加cache,MIME,Method,长连接等功能
    • lock : 允许用户锁定资源,可以在编辑某个资源的时候将其锁定,以防止别人同时对其进行修改
    • mkcol : 允许用户创建资源
    • copy : 便于在服务器上复制资源
    • move : 在服务器上移动资源
    • GET : 从服务器获取一个资源,通常不包含主体(entiy-body), 其为安全的方法
    • POST : 向服务器发送服务器要处理的数据,通常包含主体(entiy-body),通常向服务器发送HTML的表单数据.
    • HEAD: 只从服务器获取文档的响应首部,不包含entiy-body,其为安全的方法.
    • PUT : 将请求的主体部分直接存储在服务器上, 包含entiy-body,如果上传的文档已经存在,就用这个主体替代它.
    • DELETE : 请求删除服务器上指定URL的文档,通常服务器不会返回删除成功或是失败的消息通知.,不包含主体.
    • TRACE : 追踪请求到达服务器中间经过的代理服务器,由服务器发回一个trace响应,通常不包含主体
    • OPTIONS : 请求获得可以在服务器上执行那些方法,或者对某些特殊资源支持那些方法,通常不包含主体
    • MIME : multipurpose internet mail extesion(多用途邮件传输扩展协议,实现文本传输能添加非文本数据等附加),其原理为,将非文件数据在传输前重新编码为文件格式再传输,接收方能够用相反的方式将其重新还原的格式,同时能够调用相应的程序打开此文件
    • 常见的method : 客户端请求数据的方法:
    • 扩展方法:
  • http 1.1 : 其增加了缓存功能,是目前被广泛使用的标准
  • http 2.0 : 借用Google开放的html协议标准spdy,改进的版本

http的工作模式

  • http请求报文(http request):格式如下:

      <method><request-URL><version> #获取方法 请求的资源 http协议版本
      <headers> #http协议首部
                #空白行
      <entity-body> #报文主体
                #空白行
  • http响应报文(http response)

      <version><status><reason-phrase> #http版本 状态码 
      <headers>  #响应报文首部
                  #空白行
      <entity-body>
                  #空白行
报文示例:
  • 请求报文
      GET / HTTP/1.1 
      Host:www.zhenping.me
      Connection:keep-aliv #连接方式为长连接
                            #空白行
  • 响应报文
      HTTP/1.1 200 OK
      X-powered-By:PHP/5.2.17 # 说明是一个PHP动态网页
      Vary : Accept-Encodeing,cookie,User-Agent
      Cache-Control:max-age=3,must-revalidate
      Content-Encoding:gzip :网页压缩技术
      Content-Length:6931 :网页长度
                          #空白行
手动模拟一个http请求会话:
telnet 172.16.36.60 80
Trying 172.16.36.60...
Connected to www.a.com.
Escape character is '^]'.
GET /index.html HTTP/1.1   #输入获取方法 请求的url 使用的协议
host:www.a.com                #指定主机
                            #两次回车
HTTP/1.1 200 OK
Date: Tue, 12 Jan 2016 04:29:18 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Mon, 11 Jan 2016 11:41:51 GMT
ETag: "e000f-13-5290d6c437a91"
Accept-Ranges: bytes
Content-Length: 19
Connection: close
Content-Type: text/html; charset=UTF-8

<h1>www.a.com</h1>
Connection closed by foreign host.
http的状态码:
  • 1XX : 纯信息(100-101)
    • 100 : continue,说明收到了请求的初始部分,请客户端继续
    • 101 : switching protocols,说明服务器正在根据客户端的指定,将协议切换成update首部所列的协议
  • 2XX : 成功类的状态信息(200-206)
    • 200 : OK,请求没有问题,实体的主体部分包含了所请求的资源
  • 3XX : 重定向类的信息(300-305)
    • 301 : 永久重定向
    • 302 : 临时重定向
    • 304 : 内容没有发生改变,使用缓存(客户端发出了条件式请求,但服务器上的资源未发生改变,则通过)
  • 4XX : 客户端错误类的信息(400-415)
    • 400 : 用于告知客户端发送了一个错误的请求
    • 401 : unauthorized,未授权,访问前需要对用户认证
    • 403 : forbidden,请求服务器拒绝,服务器不想说明拒绝原因的时候使用
    • 404 : not found, 不存在的文件
    • 405 : Method not allowed , 发起的请求不支持的方法
  • 5XX : 服务器端错误类的信息
    • 500 : internal server error,服务器内部错误
    • 502 : bad gateway ,无法连接至其父网关
    • 504 : gateway timeout, 服务器连接超时

http报文首部

  • 通用首部
    • Date : 报文的创建时间
    • connection : 连接方式,如keepalive, close.
    • Via : 显示报文经过的中间节点(via本意为:经由)
    • Cache-control : 控制缓存
    • pragma : 跟缓存相关,为了兼容1.0版本
    • MIME-version : 给出发送端使用的MIME版本
    • trailer : 如果报文采用分块传输编码方式,就可以用这个首部列出位于报文拖挂部分
    • Transfer-Encoding : 告知接收端为了保证报文可选传输,对报文采用的编码方式
    • Update : 给出发送端可能想要”升级”使用新的版本或协议
  • 请求首部
    • 条件式请求首部
    • 安全请求首部
    • 代理请求首部
    • Expect : 允许客户端列出某请求所要求的服务器行为
    • If-modified-since : 请求的数据如果晚于此修改时间,服务器将发回新文件
    • If-unmodified-sinec : 除非在某个指定日期之后资源没有被修改过, 否则就限制这个请求
    • If-none-match:本地缓存中存储的文档中的ETag标签是否与服务端文档的ETag不匹配(如果提供的实体标记与当前文档的实体标记不相符,就获取文档)
    • If-Match : 如果实体标记与文档当前实体标记相匹配,就获取这份文档
    • If-range : 允许对文档的某范围进行条件请求
    • Range : 如果服务器支持范围请求,就请求资源的指定范围
    • authorization : 向服务器发送认证信息,如帐号密码
    • Cookie : 客户端向服务器发送cookie
    • cooki2 : cookie的版本2
    • proxy-authorization : 向代理服务器认证
    • proxy-connection : 与connection首部相同,但这个首部是在与代理建立连接时使用
    • max-forward : 在通往源服务器的路径上,将请求转发给其它代理网关的最大次数—-与trace方法一周使用
    • accept : 通知服务器自己可接受的媒体类型
    • Accept-charset : 接收的字符集
    • Accept-Encoding : 接收内容编码格式(如压缩格式)
    • Accept-Language : 接收的语言
    • Accept-Length :实体主体数据包含了多少字节数据
    • Accept-type : 实体主体数据是什么类型
    • From : 提供了客户端用户的Email地址
    • Client-ip : 客户端IP地址
    • Host : 请求服务器名称和端口号
    • Referer : 包含了当前正在请求的资源上一级资源(由那跳转过来的)
    • User-agent:浏览器类型
  • 响应首部
    • set-cookie : 不是真正的安全首部,但隐含有安全功能,可以在客户端设置一个令牌,以便服务器对客户端进行标识
    • set-cookie2 : 与set-cookie类似
    • www-authenticate : 来自服务器对客户端的质询认证表单
    • Porxy-Authenticate : 来自代理的对客户端的质询列表
    • Accept-Ranges : 服务器可接受的请求范围类型
    • Vary : 服务器查看的其它首部列表
    • Age: 响应持续时长
    • Server : 服务器程序软件名称和版本
    • date : 服务器产生报文的时间
    • Content-length : 实体主体数据包含了多少字节数据
    • Content-type : 实体数据是什么类型
    • Location : 重定向的连接
    • Public : 服务器为其资源支持的请求方法列表
    • Retry-after : 如果资源不可用的话,就在此时间或日期重试
    • Title : 对HTML文档来说,就是HTML文档的源端给出标题
    • Warning : 对原因短语中更详细的一些警告报文
    • 信息性
    • 协商首部(某资源有多种表示方法时使用)
    • 安全响应
  • 实体首部
    • Allow : 列出对些实体可使用的请求方法
    • Location : 告诉客户端真正的实体位于何处,重定向时使用
  • 内容首部
    • 缓存相关
    • ETag : 实体的扩展标签
    • Expires : 实体的过期时间,实体不再有效,要从原始的源端再次获取此实体的日期和时间
    • Last-Modified : 最后一次修改时间和日期
    • Content-base : 解析主体中相对URL时使用的基础URL
    • Content-Encoding : 内容的编码格式
    • Content-Language : 理解主体时最适宜使用的自然语言
    • Content-length : 主体的长度或尺寸
    • Content-Location : 实体真正所处位置
    • Content-md5 : 主体的MD5校验和
    • Content-range : 在整个资源中些实体表示的字节范围
    • Content-Type : 主体的对象类型
  • 扩展首部

什么是keep-alive?

其被称之为长连接,由于http基于tcp协议通信,每个资源的请求都需要建立一个会话的虚拟通道,如果对于并发大的服务器来讲,高频的TCP会议建立和拆除将消耗更多的系统开销,故长连接可以实现tcp协议通信建立后,在允许的机制下,进行多个资源请求获取,当服务端设定的条件达到时,将断开与客户端的TCP连接。

keep-alive的控制机制
  • 空闲超时机制(httpd2.2版本以秒为单位,httpd2.4可以以毫秒为单位)
  • 请求次数限制

      注意:在高并发的应用场景中,空闲超时机制将会导致后面用户的请求进行挂起操作,以导致访问慢的情况。故时间需要测试而设定,并且对请求次数进行设定,这样可以避免高并发的情况中,用户的请求长时间连接,而新的用户请求一直得不到处理。 空闲超时机制在低并发的应用场景中, 可以加速用户的访问请求。
实现步骤

client发起请求并与server建立Tcp的连接,进行数据传输,当client的资源请求完成后,通知服务端断开连接,服务端并予ack报文,并不发送fin报文,此时连接将处理半连接状态,服务器会检查httpd的keep-alive参数设置的两个条件:1、如果半连接空闲时间超出keep-alive设定的值,将主动断开连接 ;2、当客户端请求的资源次数达到httpd的参数设置,也将会主动断开连接。

客户端浏览器加速访问的机制

  • 1、多线程请求,同时打开不同的资源
  • 2、静态内容进行缓存

web资源的类型:

  • 1、静态资源
    • jpg,png,gif,html,txt,js,css,mp3,avi等
    • 无需服务器做出额外处理,一般内容格式为:
  • 2、动态资源
    • php,jsp
    • 服务端需要通过执行程序做出处理,并发送给客户端程序的运行结果,一般格式为:

服务端完整的HTTP请求处理过程

  • 1、建立和处理连接(接收请求或拒绝请求)
  • 2、接收请求:通过网络读取HTTP请求报文
  • 3、处理请求:解析请求报文并做出相应的动作
  • 4、访问资源:访问请求报文中相应的资源
  • 5、构建响应报文:使用正确的首部生成http响应报文
  • 6、发送响应:向客户端发送生成的响应报文
  • 7、记录日志:当已经完成的http事务记录进日志文件
HTTP的访问归类:
  • 1、PV(Page view),页面的访问量,其在访问日志中的URL字段中第二个位置
  • 2、UV(User view),用户的访问量,以IP访问数量来统计,其在访问日志中的第一个字段

服务端接收请求的模型

1、单进程I/O模型

启动一个进程处理用户请求,这意味着,一次只能处理一个请求,多个请求被串形响应

2、多进程I/O模型

每个请求都有一个独立的进程来响应,并行启动多个进程,每个进程响应一个请求

3、复用的I/O模型(必须要有多路IO管理机制)
  • 1、多线程模式
    • 一个进程生成N个线程,一个线程处理一个请求,其能生成的线程也是有限定的
  • 2、事件驱动
    • 一个进程直接响应N个请求,不用启动线程
      4、利用的多进程I/O结构
      启动M个进程,每个进程生成N个线程

http服务的实现软件

  • 1、服务程序
    • httpd
    • nginx
    • lighttpd
    • thttpd
  • 2、应用程序服务器
    • IIS :(windwos .net)
    • tomcat :(apache,JSP,open source)
    • websphere : (IBM,JSP,commodity)
    • weblogic : (Oracle,JSP,commodity)
    • JBoos : (readhat,open source,commidity,核心是tomcat)

httpd服务程序

httpd简介

httpd是apache基金会(ASF:apache foundation)维护,其官网为httpd.apache.org,其基金会下有众多的著名软件。

http的版本
  • httpd 1.3
  • httpd 2.0
  • httpd 2.2 (Centos 6平台的默认版本,其event模型仍为测试模型)
  • httpd 2.4(Centos 7平台的默认版本,目前最新稳定版本,对event可用于生产环境中)
httpd的功能特性
  • 1、CGI(Common Gateway Interface)
  • 2、虚拟主机
    • IP
    • PORT
    • FQDN
  • 3、支持反向代理
  • 4、负载均衡
  • 5、路径别名
  • 6、丰富的用户认证机制
    • basic :基本身份认证
    • digest : 摘要身份认证
  • 7、支持第三方模块
  • 8、高度模块化
  • 9、动态模块加载(DSO,Dynamic shared object)
  • 10、多路处理模块(MPM,Multipath processing modules)

    • 工作模型
    • a) 有一个主进程,其负责生成子进程及回收子进程,负责创建套接字,负责接收请求,并将其派发给某子进程处理
    • b) 子进程基于事件驱动机制直接响应多个请求
    • 工作模型
    • a) 有一个主进程,其负责生成子进程及回收子进程,负责创建套接字,负责接收请求,并将其派发给某子进程处理
    • b) 每个子进程负责生成多个线程,每个线程负责响应用户请求
    • 工作模型
    • a) 有一个主进程,其负责生成子进程及回收子进程,负责创建套接字,负责接收请求,并将其派发给某子进程处理
    • b) 多个子进程,每个子进程处理一个请求,主进程不负责接收请求
    • c) 会预先生成几个空置的进程,随时等待用于响应用户请求,其预先定义最大空闲和最小空闲
    • prefork : 多进程模型,每个进程响应一个请求,特性如下:
    • worker : 多进程多线程模型,每个线程处理一个用户请求,特性如下:
    • event : 事件驱动机制,事件驱动模型,多进程模型,每个进程响应多个请求
  • 11、支持https协议,由mod_ssl模块提供

  • 12、支持用户认证
    • 简单认证
    • 摘要认证
    • 基于表单认证
  • 13、访问控制机制
    • 基于IP或主机名的访问控制
    • 基于每目录的访问控制

HTTPD的配置文件

1、httpd-2.2的版本(Centos 6)
  • 配置文件
    • /etc/httpd/conf/httpd.conf
    • /etc/httpd/conf.d/*.conf
  • 服务脚本
    • /etc/rc.d/init.d/httpd
  • 脚本配置文件
    • /etc/sysconfig/httpd
  • 主程序文件
    • /usr/sbin/httpd
    • /usr/sbin/httpd.event
    • /usr/sbin/httpd/worker
  • 日志文件
    • /var/log/httpd/access_log
    • /var/log/httpd/error_log
  • 站点文档
    • /var/www/html
  • 模块文件路径
    • /usr/lib64/httpd/modules
  • 网站文件存放路径
    • /var/www/html : 静态网页存放路径
    • /var/www/cgi-bin : 动态网页存放路径
  • 服务控制和启动
    • service httpd on|off
    • service {start|stop|restart|status|configtest|reload} httpd
2、httpd-2.4的版本(Centos 7)
  • 配置文件
    • /etc/httpd/conf/httpd.conf
    • /etc/httpd/conf.d/*.conf
    • /etc/httpd/conf.modules.d/*.conf : 模块相关的配置文件
    • /usr/lib/systemd/system/httpd.service
  • 主程序文件
    • /usr/sbin/httpd : 2.4版本支持MPM的动态切换
  • 日志文件
    • /var/log/httpd/access_log
    • /var/log/httpd/error_log
  • 站点文档
    • /var/www/html
  • 模块文件路径
    • /usr/lib64/httpd/modules
  • 网站文件存放路径
    • /var/www/html : 静态网页存放路径
    • /var/www/cgi-bin : 动态网页存放路径
  • 服务控制
    • systemctl enable | disable httpd.service
    • systemctl {start|stop|restart|status} httpd.service

HTTPD的进程

1、主进程的属主和属组

root:root

2、子进程或工作进程

apache:apache

HTTPD主配置文件

主配置文件的选项
  • 1、全局配置段:影响apache的全局配置选项
  • 2、中心主机配置段
  • 3、虚拟主机配置段
主配置文件的格式
  • 指令 + 值
    • 指令:不区分大小写
    • 值:在为路径时,是否区分大小写,取决于文件系统
常用配置选项
  • 1、修改监听的IP和PORT

    • a) 省略IP表示0.0.0.0
    • b) Listen指令可复现出现多次

        Listen 80
        Listen 8080
        Listen 172.16.0.1:80
    • c) 修改监听的socket,中有重启服务进程方可有效
    • 格式:Listen [IP:] PORT

  • 2、持久连接功能

    • a) 数量限制
    • b) 时间限制

        KeepAlive on | off
        KeepAlive Timeout 15
        MaxKeepAliveRequests 100
    • TCP连接建立后,每个资源获取完成后,不会断开连接,而是继续等待其它资源请求的进行,如何断开 ?

            注意:副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应。折衷处理:使用较短的持久连接时长,以及较少的请求数量
  • 3、MPM
    修改2.2版本中的MPM机制,需要修改/etc/sysconfig/httpd中,启用HTTPD=/usr/sbin/httpd.worker或者指定其它的MPM模块,需要重启服务方可生效。

    • prefork的配置

        <IfModule prefork.c>   
        StartServers        8  #启动时启动多少个进程
        MinSpareServer      5    #最少空闲进程
        MaxSpareServers   20    #最大空闲进程
        ServerLimit      256    #最大启动多少个进程数,可大于maxclients
        MaxClients       256    #最大进程在线数量,不能大于serverlimit
        MaxRequestsPerChild  4000 #表示每个进程最多处理多少个请求,达到数量时由主进程销毁
        </IfModule>
    • worker的配置

        <IfModule worker.c>
        StartServers         4
        MaxClients         300
        MinSpareThreads     25
        MaxSpareThreads     75
        ThreadsPerChild     25
        MaxRequestsPerChild  0  #0表示不启用
        </IfModule>
  • 4、配置指定实现模块加载

    • 1、定义格式

        LoadModule <mod_name> <mode_path>
    • 2、使用相对路径,是相对于serverroot,默认为/etc/httpd

  • 5、定义中心主机”Main server”的文档页面路径

    • DocumentRoot指向的路径为URL路径的起始位置,相当于站点URL的根路径
    • 1、定义格式

        DocumentRoot "/var/www/html"
    • 2、文档路径映射
  • 6、站点访问控制定义方法

    • 1、基于文件系统路径

        方法一:
        <Directory "/PATH">
        ......
        </Directory>
      
        方法二
        <File "/PATH">
        ......
        </File>
      
        方法二
        <FileMatch "PATTERN">
        .....
        </FileMatch>   #以模式匹配,需要启动正则表达式引擎,其效率低
    • 2、基于URL

        方法一:
        <Location "/">
        ......
        </Location>
      
        方法二:
        <LocationMatch "/">
        ......
        </LocationMatch>
  • 7、站点访问控制设定

    • 1、基于IP方式实现控制

        <Location /server-status>
        SetHandler server-status
        order deny,allow   #定义生效次序
        deny from all
        allow from 172.16.249.148
        </Location>
      
        ##注意:
        来源地址定义格式,可如下方式:
        172.16
        172.16.0.0
        172.16.0.0/16
        172.16.0.0/255.255.255.0
    • 2、基于用户名和密码方式实现控制

        <Directory "/www/b.com/htdocs">
            Options None            #可以定义多个,使用空格分开,None表示不定义
            AllowOverride None   #是否允许覆盖,覆盖面面order或者auth的认证,None表示不定义
            AuthType Basic        #认证类型
            AuthName "Please Enter your username and password."    #认证提示
            AuthUserFile "/etc/httpd/conf/.htpass"            #用户和密码存放路径
            AuthGroupFile "/etc/httpd/conf/.htpass_group"     #用户组的定义存放路径
            Require group mygrp        #允许mygrp组中的用户
                或者只是定义用户,不定义组
            AuthType Basic        #认证类型
            AuthName "Please Enter your username and password."    #认证提示
            AuthUserFile "/etc/httpd/conf/.htpass"            #用户和密码存放路径
            Require user zhenping    #只允许用户zhenping登录,多个用户可以使用空格隔开
        </Directory>
      
        注意1:如果需要定义的所有用户都可以访问,需使用:
            Require valid-user
      
        注意2:认证方式有两种:
                basic :明文
                digest : 消息摘要认证
        注意3:用户及密码的存储方式
                文本文件
                SQL数据库
                Ldap目录服务
        注意4:组文件定义格式
                GROUP_NAME: group1 group2
      
        注意4:用户名的密码需要使用htpasswd工具来创建,如下格式:
      
            htpasswd -c -m /etc/httpd/conf/.htpasswd tom
                Options:
                        -c : 自动创建加密文件,一般用于第一次
                        -D : 删除用户
                        -m : 以MD5格式加密
                        -s : 以sha格式加密
     * Options的各参数说明:

             Index:定义索引,索引是指列出目录下所有的文件
               None:不支持任何选项
            FollowSymLinks:跟随符号连接,意味访问符号连接所指向的文件,会降低服务器的性能
            Includes:允许执行服务器端包含(SSI),此方式不安全
                SymLinksifOwnerMatch:允许执行符号连接,但属主必须与执行httpd进程的属主相匹配,不                               开放
            ExecCGI:允许执行CGI脚本
            MultiViews:判断客户端使用的语言,并显示相应语言的网页,一般比较消耗资源
            ALL:启用所有选项
  • 8、定义站点主页

    • 404 Not Found错误
    • 显示目录下的所有文件
    • 1、定义格式

        DocumentRoot "/www/htdocs"
    • 2、未定义的错误提示
  • 9、定义路径别名

    • alias /URL/ “/PATH”

        alias /download/ "/rpms/pub"  #后者为文件系统路径
    • 1、定义格式

  • 10、定义默认字符集

    • 1、定义格式

        AddDefaultCharset UTF8
      
        可支持的中文字符集:GBK,GB2312,GB18030
  • 11、日志设定

    • 1、错误日志的定义格式

        ErroLog logs/error_log
        LogLevel warn
      
        ##日志等级为:
        Debug
        Info
        notice
        Warn
        Error
        Crit
        Alert
        Emerg
    • 2、访问日志的定义格式

        CustomLog logs/access_log combined #combined为日志格式
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
        LogFormat "%h %l %u %t \"%r\" %>s %b" common 
        LogFormat "%{Referer}i -> %U" referer 
        LogFormat "%{User-agent}i" agent
        #其宏定义的格式:
        %h :客户端的IP地址
        %l :远程登陆的用户名,通常为一个减号“-”
        %u :远程登陆的用户(from auth),非登陆访问时,其为一个减号
        %t :服务器收到请求的时间,standerd english time
        %r :First line of request,表示请求报文的首先,记录了此次请求的:方法,URL,协议版本
        %>s :响应的状态码
        %b :响应报文的大小,单位字节,不包含http请求首部
        %{Referer}i : 请求报文中首部"referer"的值,即从那个页面中的超连接跳转至当前页面
        %{User-Agent}i : 请求报文中首部"User-Agent"的值,即发出请求的应用程序,浏览器类型
  • 12、虚拟主机(如果需要虚拟主机的方式,需先注释中心主机的DocumentRoot)

    • 基于IP

        <VirtualHost 192.168.0.1:80>
        ......
        </VirtualHost>
      
        <VirtualHost 192.168.0.2:80>
        ......
        </VirtualHost>
    • 基于PORT

        <VirtualHost 192.168.0.1:80>
        ......
        </VirtualHost>
      
        <VirtualHost 192.168.0.1:8080
        ......
        </VirtualHost>
    • 基于FQDN

        <VirtualHost 192.168.0.1:80>
        servername www.a.com
        ......
        </VirtualHost>
      
        <VirtualHost 192.168.0.1:80>
        servername www.b.com
        .....
        </VirtualHost>
      
        注意:如果需要在2.2版本及以下,需要使用NameVirtualHost IP:PORT来先定义,2.4以后版本不需要
    • 1、实现方式

  • 13、status页面
     1、启用

      加载对应的模块
      LoadModules status_module modules/mod_status.so
    
      启用server-status容器选项
      <Location /server-status>
      SetHandler server-status
      Order deny,allow
      Deny from all
      Allow from .example.com  
      </Location>    
    
      访问
      www.a.com/server-status
  • 14、域名别名

    • 1、定义格式

        serveralias www.b.com www.a.com  #将www.b.com定义为www.a.com
httpd的子命令
  • httpd -l : 查看httpd所支持的MPM类型
  • httpd -t : 测试主配置文件是否有语法错误
  • httpd -M : 查看http的加载模块

15 Curl命令

Curl是基于URL语法在命令行下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议,curl支持https认证,并且支持HTTP的POST,PUT等方法,FTP上传,kerberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上载文件断点续传,http代理服务器管道(proxy tunneling),甚至它还支持IPv6,socket5代理服务器,通过http代理服务器上传文件到FTP服务器等,功能十分强大.

  • 用法:
    • curl [options] [URL….]
  • 常用选项
    • -A / --user-agent <string> : 设置用户代理发送给服务器
    • --base : 使用http基本认证
    • --tcp-nodelay : 使用tcp_nodelay选项
    • -e / --referer <URL>: 来源网址
    • --cacert <file> : CA证书(SSL)
    • --compressed : 要求返回是压缩的格式
    • -H / --header <line> : 自定义首部信息传递给服务器
    • -I / --head : 只显示响应报文首部信息
    • --limit-rate <rate> : 设置传输速度
    • -u / --user <user[:password]> : 设置服务器的用户和密码
    • -0 / --http1.0 : 使用HTTP1.0
16 apache的用户及组

指定以哪个用户的身份运行httpd服务进程

  • user apache
  • group apache
如果需要使用root权限执行操作时,需要使用SUexec命令调用相关操作
17 使用mod_deflate模块压缩页面优化传输速度
  • 适用场景
    • 1) 节约带宽,额外消耗CPU,同时可能有些老浏览器不支持
    • 2) 压缩适于压缩的资源,例如文本文件
####设置一个过滤器,名称为DEFLATE ,名称用于后面设置参数引用 
SetOutputFilter DEFLATE    
# mod_deflate configuration
####设置指定那些类型需要压缩
# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain 
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
####设置压缩级别
# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9
####排除老的浏览器
# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4  gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch  ^Mozilla/4\.0[678]  no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E]  !no-gzip !gzip