zoukankan      html  css  js  c++  java
  • 【面试】HTTP 协议报文详细说明

    Table of Contents

    1、说明  

    2、HTTP基础报文格式    

    2.1 请求报文

    2.1.1 请求行

    2.1.2 请求头部

    2.1.3 请求空行

    2.1.4 请求正文

    2.2 响应报文

    2.2.1 响应行

    2.2.2 响应头部

    2.2.3 响应空行

    2.2.4 响应正文(响应实体)

    3、图解HTTP部分原文


    1、说明  

    我写这个文章主要是为了记录HTTP中报文的格式,以便针对报文进行解析。最主要是介绍基础的HTTP报文。先来个图总结一下:


     

    2、HTTP基础报文格式    

    按照HTTP报文类型进行介绍,HTTP报文类型分为请求报文(客户端主动请求报文)和响应报文(服务端响应客户端的回传报文)。其基本的格式为:

    请求报文是由请求方法 请求 URI协议版本可选的请求首部字段内容实体构成的。详情如图所示:

    请求示例:

    原始请求头
    GET /system/cms/content?time=1584092466766 HTTP/2
    Host: login.baidu.com
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Accept: text/html, */*; q=0.01
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: cors
    Referer: https://login.baidu.com/system
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    Cookie: UM_distinctid=16f36034a523a1-0241e6bdab4e0e-7711b3e-1fa400-16f36034a5348a; Hm_lvt_997d76898813924d5ca3f13c90b6a7c9=1577159183; Hm_lvt_c7d79861fc114d97bd915a8f73ec2168=1577159183; Qs_lvt_285746=1577159183; Qs_pv_285746=1802346816205328000; LiveWSAWT33913715=5895797b8c124061a4f799bf85e37843; NAWT33913715fistvisitetime=1577159183249; NAWT33913715lastvisitetime=1577159183249; NAWT33913715visitecounts=1; NAWT33913715visitepages=1; NAWT33913715IP=%7C123.52.43.135%7C; bjui_theme=blue; SESSION=ZWIzNGFkNGMtNjk4Mi00ZDI5LTlkMWQtZTkwN2ZkNjM5MGM5

    解析后的请求头
    Accept: text/html, */*; q=0.01
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    Cache-Control: no-cache
    Connection: keep-alive
    Cookie: UM_distinctid=16f36034a523a1-0241e6bdab4e0e-7711b3e-1fa400-16f36034a5348a; Hm_lvt_997d76898813924d5ca3f13c90b6a7c9=1577159183; Hm_lvt_c7d79861fc114d97bd915a8f73ec2168=1577159183; Qs_lvt_285746=1577159183; Qs_pv_285746=1802346816205328000; LiveWSAWT33913715=5895797b8c124061a4f799bf85e37843; NAWT33913715fistvisitetime=1577159183249; NAWT33913715lastvisitetime=1577159183249; NAWT33913715visitecounts=1; NAWT33913715visitepages=1; NAWT33913715IP=%7C123.52.43.135%7C; bjui_theme=blue; SESSION=ZWIzNGFkNGMtNjk4Mi00ZDI5LTlkMWQtZTkwN2ZkNjM5MGM5
    Host: devlogin.baidu.com
    Pragma: no-cache
    Referer: https://login.baidu.com/system
    Sec-Fetch-Mode: cors
    Sec-Fetch-Site: same-origin
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36
    X-Requested-With: XMLHttpRequest

    2.1 请求报文

    请求报文数据格式由三个部分组成:请求方法、URI、HTTP协议版本

    2.1.1 请求行

    该部分位于数据首行,基本格式为:

    GET /system/cms/content?time=1584092466766 HTTP/1.1(请求方法、URI、HTTP协议版本)

    该部分给出了请求类型和请求的资源位置(/index.html),其中HTTP中的请求类型包括:GET、POST、PUT、HEAD、PATCH、DELETE等等,一般常用的为POST和GET方式。

    2.1.2 请求头部

    该部分紧跟着上一部分(方法、协议版本行),该部分主要是用于描述请求正文,其基本格式如下:

    Host: devlogin.baidu.com
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Accept: text/html, */*; q=0.01
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: cors
    Referer: https://devlogin.baidu.com/system
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    Cookie: UM_distinctid=16f36034a523a1-0241e6bdab4e0e-7711b3e-1fa400-16f36034a5348a;

    主要是用于说明请求源、连接类型、以及一些Cookie信息等。

    2.1.3 请求空行

    接着以一空行分隔,下面紧挨着的是请求正文

    2.1.4 请求正文

    请求正文和请求头部通过一个空行进行隔开,一般用于存放POST请求类型的请求正文,如上的请求体为:

    time=1584092467212

    2.2 响应报文

    先上图看一下大致有什么内容,再详情介绍

    响应报文和请求报文格式类型相似,同样也是分为三个部分,响应头部和响应体同样也是通过一个空行进行隔开,如下为一个简单的示例:

    原始响应头
    HTTP/2 200 OK
    date: Fri, 13 Mar 2020 09:53:06 GMT
    content-type: text/plain
    server: nginx
    vary: Accept-Encoding
    access-control-allow-origin: *
    access-control-allow-headers: accept, content-type, classname
    access-control-allow-methods: POST, GET, OPTIONS
    content-encoding: gzip
    X-Firefox-Spdy: h2

    解析后的响应头
    access-control-allow-headers:accept, content-type, classname
    access-control-allow-methods:POST, GET, OPTIONS
    access-control-allow-origin    :*
    content-encoding:gzip
    content-type:text/plain
    date:Fri, 13 Mar 2020 09:53:06 GMT
    server:nginx
    vary:Accept-Encoding
    X-Firefox-Spdy:h2

    2.2.1 响应行

    该部分主要给出响应HTTP协议版本号、响应返回状态码、响应描述,同样是单行显示。格式为:

    HTTP/2 200 OK

    状态码部分:响应返回一般由一个三位数组成,分别以整数1~5开头组成。各个类型响应对应含义:

    常见的响应有:200(响应成功),400(请求异常,一般为参数异常),404(请求资源不存在),405(请求方式不支持),500(服务器内部异常)。

    2.2.2 响应头部

    响应头部主要是返回一些服务器的基本信息,以及一些Cookie值等。如上的响应头为:

    date: Fri, 13 Mar 2020 09:53:06 GMT
    content-type: text/plain
    server: nginx
    vary: Accept-Encoding
    access-control-allow-origin: *
    access-control-allow-headers: accept, content-type, classname
    access-control-allow-methods: POST, GET, OPTIONS
    content-encoding: gzip
    X-Firefox-Spdy: h2

    2.2.3 响应空行

    接着以一空行分隔, 之后的内容称为资源实体的主体( entity body)。

    2.2.4 响应正文(响应实体)

    该部分为请求需要得到的具体数据,可以为任何类型数据,一般网页浏览返回的为html文件内容。内容不再列出,同样和响应头部通过一个空行进行隔开。

    3、图解HTTP部分原文

    以下图片截于名叫《图解HTTP》的一本书籍第三章节中:

    【参考资料】

    1、HTTP 协议报文解析:https://blog.csdn.net/chf1142152101/article/details/74162755

    2、一文带你看清 HTTP 所有概念:https://blog.csdn.net/qq_36894974/article/details/104044932

    3、图解HTTP书籍--【日】上野宣 著,于均良 译。

  • 相关阅读:
    json dump dumps load loads
    python tip: 格式化 深浅copy sorted
    转载整理
    python 计算器练习
    实验5 OSPF虚连接和验证配置
    实验4 OSPF的特殊区域STUB和NSSA
    实验3ospf路由聚合
    实验2 OSPF基本配置
    实验1静态ECMP的浮动静态路由配置
    补充实验6:tftp
  • 原文地址:https://www.cnblogs.com/no8g/p/13415526.html
Copyright © 2011-2022 走看看