美文网首页
HTTP 的 header 协议

HTTP 的 header 协议

作者: 后厂村村长 | 来源:发表于2022-12-04 19:09 被阅读0次

    header 协议格式

    1、请求头:报文主要包含四个部分:

    • 请求行(例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif)
    • 请求头(例如Host: abc.xxx.com;Connection: keep-alive
    • 空行
    • 消息数据实体(正文)

    注:在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。
    HTTP消息头支持自定义, 自定义的专用消息头一般会添加X-前缀。
    请求行和标题必须以 CRLF(回车换行符) 作为结尾。空行内必须只有 CRLF 而无其他空格。

    根据HTTP标准,HTTP请求可以使用多种请求方法。
    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT方法。

    2、响应头:报文也是四个部分:

    • 状态行(例如HTTP/1.1 200 OK,请求成功)
    • 响应头(例如Date: Thu, 09 Sep…;Content-Type: application/json; charset=utf-8
    • 空行
    • 响应正文

    状态行格式如下:
    HTTP-Version Status-Code Reason-Phrase CRLF

    HTTP-Version表示服务器HTTP协议的版本;
    Status-Code表示服务器发回的响应状态代码;
    Reason-Phrase表示状态代码的文本描述。

    示例

    请求(Request)示例:

    POST /get/your/answer HTTP/1.1
    Host: abc.xxx.com
    Connection: keep-alive
    Content-Length: 123
    Accept: application/json, text/plain, */*
    Origin: xxxxx(一个有效域名)
    User-Agent: Mozilla/5.0 (Linux; Android 5.1.1;……) Chrome/39.0.0.0 Mobile
    Content-Type: application/x-www-form-urlencoded
    Referer: xxxxx(一个有效的URL)
    Accept-Language: zh-CN,en-US;q=0.8
    Cookie: cookid=whoami_hahaha
    X-Requested-With: (自定义消息头,一般会添加 X- 前缀)
    
    msg=haha&version=1.1.10&type=1234(注意,POST请求的数据在这里)
    

    另,GET请求header头,数据参数不会出现在消息实体中,而是在请求行中,示例:

    GET /your/intf?type=1&show=2 HTTP/1.1(注意,GET请求的数据在这里)
    Host: xxx
    Connection: keep-alive
    ……
    

    应答(Response)示例:

    HTTP/1.1 200 OK
    Date: Thu, 09 Sep 2021 01:11:16 GMT
    Content-Type: application/json; charset=utf-8
    Transfer-Encoding: chunked
    Server: Apache
    tracecode: 12345678
    Connection: close
    
    {"result":{"errcode":0,"message":"你瞅啥","data":["abc"]}}
    或者
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
    ……
    

    HTTP版本升级带来的变化

    1、在HTTP 0.9和1.0中,TCP连接在每一次请求/回应对之后关闭。
    在HTTP 1.1中,引入了保持连线(keep-alive)的机制,一个连接可以重复在多个请求/回应使用。持续连线的方式可以大大减少等待时间,因为在发出第一个请求后,双方不需要重新运行TCP握手程序。

    2、HTTP 1.1还改进了HTTP 1.0的带宽。
    例如,HTTP 1.1引入了分块传输编码,以允许传递内容可以持续在线,被流传输,而不必使用缓冲器。
    HTTP管道允许客户端在收到每个回应之前发送多个请求,进一步减少用户感受到的滞后时间。协议的另一个补充是字节服务,允许客户端请求资源的某一部分,服务器仅回应某资源的指明部分。

    3、在HTTP1.0,单一TCP连接内仅执行一个“客户端发送请求—服务器发送应答”周期,之后释放TCP连接。
    在HTTP1.1优化支持持续活跃连接:客户端连续多次发送请求、接收应答;批量多请求时,同一TCP连接在活跃(Keep-Live)间期内复用,避免重复TCP初始握手活动,减少网络负荷和响应周期。
    此外,支持应答到达前继续发送请求(通常是两个),称为“流线化”(stream)。

    HTTP状态码

    HTTP 状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

    1xx:指示信息--表示请求已接收,继续处理。
    2xx:成功--表示请求已被成功接收、理解、接受。
    3xx:重定向--要完成请求必须进行更进一步的操作。
    4xx:客户端错误--请求有语法错误或请求无法实现。
    5xx:服务器端错误--服务器未能实现合法的请求。

    30x-跳转示例:

    header("HTTP/1.1 301 Moved Permanently");
    header('Location:新的url地址');
    

    相关文章

      网友评论

          本文标题:HTTP 的 header 协议

          本文链接:https://www.haomeiwen.com/subject/qsqmfdtx.html