0
点赞
收藏
分享

微信扫一扫

【面试】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报文。先来个图总结一下:

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


 

2、HTTP基础报文格式    

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

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

【面试】HTTP 协议报文详细说明_HTTP_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-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 协议报文详细说明_java_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 协议报文详细说明_http_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 协议报文详细说明_响应头_05

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

 

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

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

 

【参考资料】

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

举报

相关推荐

0 条评论