http协议和http的配置

    URL方案:scheme(http://;https://)

    

    服务器地址:ip:port

    资源路径:

    http://www.mageedu.xom/bbs/index.php

    

基本语法:

      <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

        params:参数,类似表单的数据

            http://www.a.com/bba/hello;gender=f(参数)

        query:查询标准

            http://www.a.com/bba/item.php?username=tom&title=abc

        frag:锚定

   

    相对URL:同站内文档;

    绝对URL:跨站文档


    http协议:

        http/0.9, http/1.0, http/1.1,http/2.0

        

    http协议:stateless(无状态) 服务器无法持续追踪访问者来源。

        解决方法:cookie:访问服务器时通过cookie从服务器发送至客户端,然后客户端保存至磁盘,到时在发请求网站时,就知道曾经访问过。

        追踪手段:cookie,session

    

    http事务:request  response

        一次请求以及与其对应的响应

    http方法:get,put,head,post,delete

    报文:

        http请求报文

            报文格式:

                <method><request-URL><version>

                <headers>

    

                <entity-boby>         

                    

        http响应报文

           报文格式:

                <version><status><reason-phrase>

                <headers>

                

                <entity-boby>

        注释:

        <method>:请求方法,希望服务器端执行的动作,如get,put,head,options,trace

        <request-URL>:可以是相对资源或者是绝对资源

        <version>:协议版本格式http/<major>.<minor>,如:http/1.0

        <headers>:http首部;每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值。

        <status>:状态码 如:200,301,404,502

        <reason-phrase>:原因短语,数字状态码简要信息

        <entity-boby>:主体部分,请求时附加数据或响应时附加的数据,请求实体可能为空。

    

        method(方法):

            安全方法:get,head,options,trace,

                post

            危险方法:put,deletet,

        

            GET:从服务器获取一个资源,请求资源没有报文。

            HEAD:跟GET相似,但其不需要服务器发送资源,而只要响应报文首部

            POST:向服务器发送服务器要处理的数据,支持HTML表单提交,服务器发送表单,客户端表单中有用户填入的数据,这些数据会发送到服务器段,由服务器存储至某位置。

            PUT:与GET相反,向服务器写入文档;例如:发布系统

            DELETE:删除服务器上url指向的资源

            OPTIONS:探测服务器端对某资源所支持的请求的方法

            TRACE:跟踪请求要经过的防火墙、代理和网关等

wKioL1YeA0KBDrg3AAMNGN4bzVs595.jpg


    响应报文状态码

        1**:100-101信息性状态码

        2**:成功状态码

               200-206:ok

        3**:重定向的状态码(300-305)

               301: moved permanently永久重定向,响应报文中是使用首部“Location:URL”指定资源现在所处的位置 

               302:founnd临时重定向,响应报文中是使用首部“Location:URL”指定临时资源位置

               304:not modified服务器资源没有修改,使用本地缓存;修改的话,发过来,条件式请求中使用

        4**:  客户端错误 (400-415)

                401:输入账号和密码,认证服务器资源 unauthorized

                403:forbidden 拒绝访问,请求被服务器权限拒绝

                404:not found 服务器无法找到请求的url

                405:  Method not allowed 不允许使用此方法请求相应的url 

        5**: 服务器类的错误(500-505)

               500:internal server error 服务器内部错误;服务器权限错,脚本无法执行

               502: bad gateway 代理服务器从上游收到一条伪响应

               503: serice unavaiabe: 服务器此时无法提供服务,但将来可能可用

    

    首部格式:Name:Value

    例如:

    wKioL1YeC_7hKb-ZAAI1HyJ5nmE465.jpg



    首部分三类:

        通用首部:请求和响应都可以使用的;

        请求首部:定义请求首部

        响应首部:定义响应首部

        实体首部:定义主题部分

        扩展首部:非标准首部,可能有程序开发者创建的,例如x-forword-for

    

        通用首部:

            connection:定义C/S之间关于请求/响应的有关选项;连接状态close,keeplive

              connection:keep-alive持久连接

            via:显示了报文经过的中间节点

            cache-control:缓存指示

    

        请求首部:

            client-IP:

            host:请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机

            referer:指明请求当前资源的上级资源url

            user-Agent:用户代理,使用什么工具发出的请求

        

            accep首部:标明客户端自己更倾向于支持的方式

                accept:指明服务器能发送的媒体类型

                accept-charset:支持使用的字符集    

                accept-Encoding:支持使用的内容编码方式

                accept-Language:支持使用语言

        

            条件请求首部:

                expect:客户端告诉服务端,自己期望的行为

                IF-Modfied-Since:是否在指定的时间以来,是否修改此资源;

                If-None-Match:是否不匹配本地缓存的文档的Etag是否与服务器文档Etag

    

            安全相关的请求首部:

                Authorization:客户端提交给服务端的认证数据,如:账号和密码

                cookie:客户端发送给服务端身份标识

                cookie2

            代理请求首部:

                Proxy-Authorization:向代理服务器认证

                

        响应首部:

          信息性首部:

            Age:资源的有效期限

            server:向客户端标明服务器程序名称和版本

            

            协商首部:某资源有多种表示方法时使用

                Accept-Ranges:对当前资源来讲,服务器所能接受请求范围类型    

                vary:服务器会根据列表中的内容挑选出 最适合的版本发送给客户端

    

            跟安全相关的响应首部:

                set-cookie:服务端在某客户端第一次请求时发给的令牌

                set-cookie2:服务端在某客户端第一次请求时发给的令牌

                www-Authentication:质询,即要求客户提供账号和密码

    

        实体首部:

            Location:资源的新位置

            Allow:允许对资源使用的请求方法

            内容首部:

                content-encoding

                content-language

                content-length 主体大小

                content-Location 实体真正所处位置

                content-range

                content-type 主题的对象类型

            缓存首部:

                Etag:实体扩展标签

                expires:过期期限

                last-modified:上一次的修改时间




15 curl命令

    curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTPS,HTTP,GOPHER,TELNET,DICT,FILE及LDAP等协议,curl支持HTTPS的POST、PUT等方法,FTP上传,kerberous认证,HTTP上传,代理服务器,cookies,socks5代理服务器,通过http代理服务器上文件到FTP服务器等等,功能十分强大。


用法:curl [options] [URL...]

curl的常用选项:

    -A 设置用户代理发送给服务器

    -basic 使用http基本认证,当服务器使用basic认证就使用,一般会紧跟-u指明用户名和密码发送服务器端

   -e 来源网址(模拟从那个网站跳转而来)

   --cacert <file> CA证书 验证服务器端与客户端的公钥与私钥验证,数据完整性    

   --compressed 要求服务器发送数据是压缩格式

   -H <line> 自定义首部信息给服务器

   -I 返回响应首部

   --limit-rate <rate> 设置下载限速

   -u <user[:password]> 设置发送服务器的用户和密码

   -0 使用http 1.0的协议

示例:

wKioL1YeFuPwbrd2AAJcOpmZ0Eg259.jpg

wKiom1YeGKjxM-5mAAFQwKU5PmY773.jpg

wKiom1YeW-fSy0DqAAFCC1D3254534.jpg


另外的一个工具:elink

    elinks [OPTION]... [URL]...

        -dump  不进入交互模式而直接将URL的内容输出至标准输出。


wKiom1YeXq6iphFIAAClLozp-NE906.jpg

wKioL1YeXt-AiGgfAACN9REVCWU860.jpg

wKiom1YeX72gIhUgAAGuGSBDM_c196.jpg


16 使用mod_deflate模块压缩页面优化传输速度

    优点:对于带宽不怎么够用的情况下,通过压缩文件传输,减轻带宽压力

    缺点:使用压缩,一般是要压缩后至服务器,服务器压缩后到客户端解压缩,这样会增加服务器的工作压力

    使用场景:

        (1)节约带宽,额外消耗CPU;有些较老的浏览器不支持压缩

        (2)压缩适用于压缩资源,例如文本文件,不适用流文件

    配置如下:

        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 (Hghest 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-only-text/html

wKioL1Yecd-RelZwAASeTKNcn4E325.jpg


测试:

wKioL1Yec7GwdmMwAACr7xXcO6Y427.jpg

wKiom1Yec3eSYzoHAAMTy-rbn34314.jpg


17 https

    http over ssl = https 443/tcp

        ssl:v3

        tls:v1


    ssl会话简化过程

     tcp的三级握手

     在第3次的发送给给服务端的时候,如下:

    (1)客户端发送可以供选择的加密方式,并向服务器请求证书;

    (2)服务器端发送证书,选定的加密的方式给客户端

    (3)证书验证:

            如果信任给其发证书的CA             

                (a)验证证书来源的合法性,用颁发证书的CA公钥解密证书上数字签名

                (b)验证证书的内容的合法性,用单向加密计算证书指纹与解密指纹一致,完整性验证

                (c)检查证实的有效性

                (d)检查证书是否被吊销

                (e)证书中拥有者额名字,与访问的目标主机(申请CA主机)要一致


    (4)客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换。

    (5)服务端就用此密钥加密用户请求的资源,响应给客户端


注意:ssl回话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机。


    配置httpd支持https

    (1)为服务器申请数字证书;

        测试:通过创建CA发证书

            (a)创建私有CA

            (b)在服务器创建证书签署请求

            (c)ca签证

    (2)配置httpd支持使用ssl,及使用的证书

        yum -y install mod_ssl

        配置文件:/etc/httpd/cong.d/ssl.conf

        DocumentRoot

        ServerName

        SSLCertificateFile 已请求的证书

        SSLCertificateKeyFile 私钥证书   

    (3)测试基于https访问相应的主机

        

       openssl s_client [-connect host:port]  [-cert filename]  [-CAfile filename] 

示例:

 (a)创建私有CA

wKiom1YfWVrAXFwXAAU3_V77Xas335.jpg

wKiom1YfWZGQ0xRQAASqh6suWmA603.jpg

(b)

wKiom1YfXAajXHMiAAQcA75lsuI788.jpg

wKioL1YfXaLR4ke5AAWBHglfjCA943.jpg

(c)

wKioL1YfX3_AJPGLAASGXfsiUz0939.jpg

wKiom1YfX4Wwt8hoAAU6HjpDQBs485.jpg


验证:

wKiom1YfYL-zhyBCAADcyEqrx4o356.jpg


https配置:

wKiom1YfZ4zQ-onMAAK67XtZ9Ow736.jpg

wKioL1YfZ1TDhPBfAAHcbIwl8J8769.jpg

wKioL1YfZx_AL-7sAAM7HzfH56c107.jpg

wKiom1YfZrSxaEWWAAUr-XLlfO0277.jpg

wKiom1YfaCaClXyhAALJ6C8PvqU892.jpg

wKioL1YfaF_ASPaIAAClmvGNWZ4681.jpg


测试ca

wKiom1YfakOBqIR-AAGvR6N2JfY608.jpg

wKiom1YfbG2AtsbJAAbMFQ_G5Tk577.jpg

wKioL1YfbLrRD2fcAARJVGg2W14347.jpg

wKioL1YfbZngXNngAAM9vfVgA1A416.jpg

wKiom1YfczejrQ51AAHhMGTCGm4246.jpg

解决方法:

(1)将CA证书下载放入桌面,将web服务器/tmp/cacert.pem改名cacert.crt

wKioL1YfdBODzWsMAAErXmA8hog233.jpg

(2)双击安装

wKiom1YfdZeD7oJ0AAFOvbwNQcE311.jpg

wKiom1Yfdc7DDMALAADYHJJCAJU320.jpg

wKioL1YfdvjQNPhLAAMUCrgwc5A167.jpg

wKiom1Yfd5niw66_AAC-***B88I681.jpg


18 http自带的工具程序

    htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具

    apachectl:服务自带脚本,支持start.stop

    apxs:   扩展工具,为了编译安装第三方模块工具的 ,有httpd-devel包安装

    rotatelogs:日志滚动工具

        access.log,access.1.log,access.2.log

    suexec:访问某些有特殊权限资源时,临时切换至指定用户运行。

    ab:apache benchmark;压力测试工具


19 http压力测试工具

    模拟:ab

          webbench

          http_load

    

    专业:jmeter,loadrunner

          tcpcopy


    ab [OPTIONS] URL

        -n:总的请求数

        -c:模拟并发数

        -k:持久连接模式

wKiom1YfkBSCKwVvAAPl6L_CdCY984.jpg

wKioL1YfkFTTPD9dAAPgaqrp-zA999.jpg


    ulimit -n #:调整当前用户所同事打开的文件数

wKioL1YfkBSzpCVSAAKqJYFhQ0M307.jpg