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

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


相关文章
|
网络协议 算法 安全
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
|
2天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
6月前
|
算法 网络协议 安全
HTTP 原理和面试题
HTTP 原理和面试题
|
4月前
|
Web App开发 JavaScript 网络协议
|
5月前
|
缓存 网络协议 安全
Android网络面试题之Http基础和Http1.0的特点
**HTTP基础:GET和POST关键差异在于参数传递方式(GET在URL,POST在请求体),安全性(POST更安全),数据大小限制(POST无限制,GET有限制),速度(GET较快)及用途(GET用于获取,POST用于提交)。面试中常强调POST的安全性、数据量、数据类型支持及速度。HTTP 1.0引入了POST和HEAD方法,支持多种数据格式和缓存,但每个请求需新建TCP连接。**
50 5
|
5月前
|
缓存 网络协议 Android开发
Android网络面试题之Http1.1和Http2.0
HTTP/1.1 引入持久连接和管道机制提升效率,支持分块传输编码和更多请求方式如PUT、PATCH。Host字段指定服务器域名,RANGE用于断点续传。HTTP/2变为二进制协议,实现多工处理,头信息压缩和服务器推送,减少延迟并优化资源加载。HTTP不断发展,从早期的简单传输到后来的高效交互。
67 0
Android网络面试题之Http1.1和Http2.0
|
6月前
|
JSON Java API
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
|
Web App开发 应用服务中间件 nginx
【面试】HTTP 协议报文详细说明
【面试】HTTP 协议报文详细说明
44 1
|
6月前
|
缓存 安全 网络协议
【面试必备】HTTP和HTTPS是什么?有什么差异?
HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。
163 2
|
6月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
297 2