当前位置: 首页 > 图灵资讯 > 技术篇> 【面试】HTTP 协议报文详细说明

【面试】HTTP 协议报文详细说明

来源:图灵教育
时间:2023-05-25 09:09:28

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报纸。让我们总结一下:

【面试】HTTP 协议报文详细说明_http

2、HTTP基础报文格式格式

根据HTTP报告类型,HTTP报告类型分为请求报告(客户端主动请求报告)和响应报告(服务端响应客户端回复报告)。其基本格式为:

请求报文由请求方法组成, 请求 URI、由协议版本、可选请求的第一个字段和内容实体组成。详情如图所示:

【面试】HTTP 协议报文详细说明_java_02

请求示例:

原始请求头 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-771b3e-1fa400-16fa36034a4a; Hm_lvt_977d7689813924d5ca3f13c90b6a7c9=1577; Hm_lvt_c7d7961fc114d97bd915a8f73ec2168=1577; Qs_lvt_285746=1577159183; Qs_pv_285746=1802346816205328000; LiveWSAWT33913715=589797b8c12406a4f79bf8; NAWT3913715fistvisitetime,15771591824; NAWT3913715lastvisitime,15771591824; NAWT3913715visitecounts; NAWT33913715visitepages; NAWT3913715IP=%7C123.52.43.135%7CC; bjui_theme=blue; SESSION=ZWIzNGFGMGM5MGM5

分析后的请求头 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-771b3e-1fa400-16fa36034a4a; Hm_lvt_977d7689813924d5ca3f13c90b6a7c9=1577; Hm_lvt_c7d7961fc114d97bd915a8f73ec2168=1577; Qs_lvt_285746=1577159183; Qs_pv_285746=1802346816205328000; LiveWSAWT33913715=589797b8c12406a4f79bf8; NAWT3913715fistvisitetime,15771591824; NAWT3913715lastvisitime,15771591824; NAWT3913715visitecounts; NAWT33913715visitepages; NAWT3913715IP=%7C123.52.43.135%7CC; bjui_theme=blue; SESSION=ZWIzNGFGMGM5MGM5 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、POST和GET通常用于DELETE等。

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-771b3e-1fa400-16fa36034a4a;

它主要用于解释请求源、连接类型和一些Cookie信息。

2.1.3 请求空行

然后用空行分隔,下面是请求正文。

2.1.4 请求正文

请求文本与请求头部通过空行分开,一般用于存储POST请求类型的请求文本,如上述请求为:

time=1584092467212

2.2 响应报文

先看上图大致有哪些内容,再详细介绍

【面试】HTTP 协议报文详细说明_HTTP_03

响应报告类似于请求报告的格式类型,也分为三部分。响应头和响应体也通过空行分开。以下是一个简单的例子:

原始响应头 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开头组成。各种类型的响应对应含义:

【面试】HTTP 协议报文详细说明_https_04

常见响应有: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》的书的第三章:

【面试】HTTP 协议报文详细说明_java_05

【面试】HTTP 协议报文详细说明_https_06

【面试】HTTP 协议报文详细说明_java_07

【面试】HTTP 协议报文详细说明_响应头_08

【参考资料】

3、图解HTTP书-[日]上野宣传 着,于均良 译。