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

简介: 【面试】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书籍--【日】上野宣 著,于均良 译。


相关文章
|
28天前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
57 1
|
2月前
HTTP协议的状态码有哪些常见的类型,分别代表什么意思?
HTTP状态码三数字分五类:1xx(信息),2xx(成功),3xx(重定向),4xx(客户端错误),5xx(服务器错误)。例如,200表示请求成功,301表示永久重定向,404表示未找到,500表示服务器内部错误。这些代码帮助诊断网络问题。
19 2
|
2月前
|
网络协议 Linux
HTTP协议基本原理简介(二)
HTTP协议基本原理简介(二)
25 1
|
2月前
|
缓存 前端开发
HTTP协议基本原理简介(三)
HTTP协议基本原理简介(三)
15 1
|
1天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
1天前
|
网络协议 安全 算法
HTTP协议与HTTPS协议
HTTP协议与HTTPS协议
|
12天前
|
安全 网络安全 数据安全/隐私保护
HTTP代理SSL连接:保障网络安全的重要协议
HTTP代理SSL连接:保障网络安全的重要协议
|
12天前
|
缓存 网络协议
【计算机协议】第一章——HTTP协议详解
【计算机协议】第一章——HTTP协议详解
|
13天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
16天前
|
缓存 安全 网络协议
Http协议是什么
【4月更文挑战第12天】HTTP是用于从WWW服务器传输超文本到浏览器的协议,基于TCP/IP,特点包括无连接、无状态、面向对象、无阻塞和可缓存。它的工作原理是客户端发送请求,服务器处理后返回响应。自1989年创建以来,HTTP已发展支持多媒体内容传输,并通过HTTPS提供安全保护。学习更多可参考计算机网络技术文献。
20 6