• Http协议的基本原理(转载)


    1、Http协议的基本原理:有客户端向服务器发送请求,服务端对请求处理,对客户端进行相应。如下图所示。

    图1 Http协议原理图

    下面给出一个简单的请求和响应的示例代码:

    客户端请求:

    复制代码
    GET / HTTP/1.1 
    Host: localhost
    Accept: text/html
    Accept-Language: en-us
    Accept-Encoding: gzip,deflate
    Connection: keep-alive
    空行(CR+LF) 
    复制代码

    服务端响应:

    复制代码
    HTTP/1.1 200  OK 
    Date: Fri, 13 Jul 2012 02:45:30 GMT
    Server: Apache
    Last-Modified: Fri ,31 Agu 2007 02:02:20 GMT
    ETag: "45bae1-16a-46d776ac"
    Connection: close
    Content-Type: text/html
    Content-Length:362
    空行(CR+LF)
    <html>          
    <head>
    </head>
    <body>
    ....                   --Content  362Bytes
    ....                       
    </body>
    </html>
    复制代码

    2、Http请求

    a.请求报文格式:

    ----------------------------------------------------------

    请求行             ↔           GET / HTTP/1.1

    请求头信息       ↔    Host: localhost

    ...

    ...

    ...

    空行(CR+LF)

    [请求主体信息](可以没有)   

     -----------------------------------------------------------

    b.说明:

    →请求行:请求方法+请求路径+Http协议版本

    请求方法:GET,POST,HEAD,OPTION,DELETE,PUT等

    请求路径:   /  

    Http协议版本:HTTP/0.9     HTTP/1.0     HTTP/1.1

    →请求头信息

    Host:              请求的主机名称   (localhost)  

                           注意:Host字段信息必须被包含在请求头信息中,因为同一个IP地址下可能会有多个虚拟主机,

                      需要Host来指定请求的是该IP下的哪一个主机。

    Accept:       客户端可以处理的文件类型。           (text/html,text/plain,image/jpeg)

    Accept-Encoding:  用户代理支持的内容编码及优先级顺序   (gzip,deflate,compress)

    Accept-Charset:    用户代理支持的字符集及优先级顺序       (iso-8859-5)

    Referer:            告知服务器请求的原始资源的URI  (用此字段可以进行反防盗链)

                            例如:Referer:http://www.baidu.com

    User-Agent:      传达创建请求的浏览器和用户代理名称等信息


    3、Http响应

    a.响应报文格式

    -------------------------------------------------

    响应行          ↔    HTTP/1.1 200 OK

    响应头信息    ↔    Server:Apache

    ...

    ...

    ...

    空行(CR+LF)

    [响应主体信息](可以没有)

    --------------------------------------------------

    b.说明:

    →响应行:Http协议版本+状态码+状态字

    Http协议:HTTP/0.9,HTTP/1.0,HTTP/1.1

    状态码:

        状态码                说明

         1XX                  信息性状态码。接收的请求正在处理

         2XX       成功状态码。请求正常处理完毕

         3XX       重定向状态码。需要进行附加操作以完成请求

         4XX       客户端错误状态码。服务器无法处理请求

         5XX       服务器错误状态码。服务器处理请求出错

    一些重要的状态码:

    2XX:200  204  206

    200(OK)                  → 客户端的请求在服务端被正常处理

    204(No Content)      → 服务器接收请求成功处理,但在返回响应报文中不含实体的主体部分

    206(Partial Content) → 客户端执行了范围请求,而服务器成功执行了这部分的GET请求

    3XX:301  302  303  304  307

    301(Moved Permanently) → 永久重定向。表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI

    302( Found)            → 临时重定向。表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的 URI访问

    303(See Other)               → 表示由于请求对应的资源存在着另一个URI,应使用 GET方法定向获取请求的资源

    304(Not Modified)           → 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。

                       304状态码返回时,不包含任何响应的主体部分

    307(Temporary Redirect) → 临时重定向。与302有着相同的含义,但是302会将POST变换成GET,而307不会将POST变换成GET

    4XX:400  401  403  404

    400(Bad Request)   → 表示请求的报文中存在语法错误

    401(Unauthorized)  → 表示发送的请求需要通HTTP认证的认证信息,若之前已经进行过一次请求,这表示用户认证失败

    403(Forbidden)       → 表明对请求资源的访问被服务器拒绝

    404(Not Found)       → 表名在服务器上无法找到请求的资源

    5XX:500  503 

    500(Internal Server Error)  → 表明服务器端执行请求时发生了错误。也有可能是Web应用存在bug或某些临时的故障

    503(Service Unavailable)    → 表明服务器暂时处于超负载或正在进行停机维护,现在无法执行请求

    →响应头信息

    Age:      告知客户端源服务端在多久前创建了响应(字段单位为:秒)

                  若创建该响应的服务器是缓存服务器,Age值是指缓存后的响应再次发起认证到认证完成的时间值。

                  代理创建响应时必须加上首部字段Age

    ETag:      告知客户端响应实体信息的标记,将资源唯一标识,

                   ETag由服务器分配,没有统一的算法规则

    Location:将接收方引导至另一个资源所在处

    Server:   告知客户端当前服务器上安装的HTTP服务器应用程序的信息。不单单会标出服务器上的软件应用名称,

                   还有可能包括版本号和安装时启用的可选项


     4、实体首部字段(请求头信息或者响应头信息的字段)

    Content-Encoding:   对实体的主体部分选用的内容编码方式

    Content-Language:告知客户端主体信息使用的语言

    Content-Length:    说明主体信息的大小(字节)

    Content-Type:        说明主体信息的文件(媒体)类型

    Set-Cookie:            服务端向客户端写Cookie内容信息

    Cookie:                  客户端向服务器发送Cookie内容信息

  • 相关阅读:
    网站测试自动化系统—在测试代码中硬编码测试数据
    在WPF里面显示DIB图片格式的图片
    网站测试自动化系统—系统应该有的功能
    Windbg 教程调试非托管程序的基本命令下
    Windbg教程调试非托管程序的基本命令上
    网站测试自动化系统—基于Selenium和VSTT
    WPF中一个通用的BoolToXXX转换类
    使用MPLex实现语法高亮显示的功能代码解释
    网站测试自动化系统—数据驱动测试
    如何控制float类型小数点后的位数
  • 原文地址:https://www.cnblogs.com/Moomoo/p/4257363.html
Copyright © 2020-2023  润新知