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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 【面试】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书籍--【日】上野宣 著,于均良 译。


相关文章
|
3天前
|
算法 网络协议 安全
HTTP/2 协议的缺点是什么?
HTTP/2 协议的缺点是什么?
|
3天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
22 3
|
14天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
43 13
|
7天前
|
传感器 缓存 网络协议
CoAP 协议与 HTTP 协议的区别
CoAP(Constrained Application Protocol)协议是为资源受限的设备设计的轻量级协议,适用于物联网场景。相比HTTP,CoAP具有低功耗、低带宽占用和简单易实现的特点,支持多播通信和无连接的交互模式。
|
12天前
|
缓存
HTTP 报文解构:深入剖析 HTTP 通信的核心要素
【10月更文挑战第21天】随着网络技术的不断发展和演进,HTTP 报文的形式和功能也可能会发生变化,但对其基本解构的理解始终是掌握 HTTP 通信的关键所在。无论是在传统的 Web 应用中,还是在新兴的网络技术领域,对 HTTP 报文的深入认识都将为我们带来更多的机遇和挑战。
|
12天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
12天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
12天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
15天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议

热门文章

最新文章