[网络]http请求报文和响应报文

请求报文的组成

请求报文包括4个部分:

  1. 请求行
  2. 请求头
  3. 末尾空行
  4. 请求体

GET请求报文

GET方式的请求没有请求体.
以访问bilibili为例.

GET / HTTP/2
Host: www.bilibili.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: _uuid=D5F5D591-4A09-BB1C-221E-AAFC85823BF919559infoc; buvid3=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; sid=koxbdeph; fingerprint=75f33d6729aac5bd602ea55a0ab1a0fc; buvid_fp=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; buvid_fp_plain=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; PVID=3; CURRENT_FNVAL=80; blackside_state=1; bp_video_offset_108161778=482576039988369978; rpdid=|(kRmkm|k)~0J'uYu|RRu~Ym; fingerprint3=9dd8f8ae0c0a63d95bdb109dbe201013; fingerprint_s=698b12624a71729aceed658fd6ac1e20; DedeUserID=108161778; DedeUserID__ckMd5=24a10229926dbfa7; SESSDATA=3e68db81%2C1626266519%2C28746*11; bili_jct=9614048d0667d6ad84c7b5702408fb19; LIVE_BUVID=AUTO7616105216607875; bp_article_offset_108161778=481949507335045813; finger=1195171377
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
TE: Trailers

下面是分析.

# 第一行为请求行,分为3部分
# GET是请求的方式
# 然后是请求资源的路径,如果写/的情况下默认请求首页
# 然后是http协议的版本
GET / HTTP/2

# 以下为请求头
# 第二行是服务器的主机ip地址和端口号
# 因为是http,默认是80.80是不显示的.
Host: www.bilibili.com

# 用户代理,也就是客户端程序的名称
# 比如下面是linux的firefox浏览器
# user-agent可以进行反爬虫
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0

# 告诉服务端程序,当前可以接受什么数据类型.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

# 告诉服务端程序,当前支持的语言
Accept-Language: en-US,en;q=0.5

# 告诉服务端程序,当前支持的压缩算法
Accept-Encoding: gzip, deflate, br

# 和服务端程序保持长连接
# 短连接就是服务短发送完数据之后就断开连接
# 长连接就是服务端发完之后不关闭连接
# 为了节省资源,有一种策略,当一段时间没有通信之后服务端就会主动断开连接
Connection: keep-alive

# cookie是客户端用户身份的一个标识
Cookie: _uuid=D5F5D591-4A09-BB1C-221E-AAFC85823BF919559infoc; buvid3=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; sid=koxbdeph; fingerprint=75f33d6729aac5bd602ea55a0ab1a0fc; buvid_fp=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; buvid_fp_plain=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; PVID=3; CURRENT_FNVAL=80; blackside_state=1; bp_video_offset_108161778=482576039988369978; rpdid=|(kRmkm|k)~0J'uYu|RRu~Ym; fingerprint3=9dd8f8ae0c0a63d95bdb109dbe201013; fingerprint_s=698b12624a71729aceed658fd6ac1e20; DedeUserID=108161778; DedeUserID__ckMd5=24a10229926dbfa7; SESSDATA=3e68db81%2C1626266519%2C28746*11; bili_jct=9614048d0667d6ad84c7b5702408fb19; LIVE_BUVID=AUTO7616105216607875; bp_article_offset_108161778=481949507335045813; finger=1195171377

# 让客户端升级不安全请求,之后要使用https
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
TE: Trailers
#此处应该有空行

GET请求报文每项信息后面都要有一个 .并且最后还有一行只含 ,也就是最后面有一个单独的空行.

POST请求报文

以gdut教务系统的登录为例

POST /new/login HTTP/1.1
Host: jxfw.gdut.edu.cn
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 71
Origin: https://jxfw.gdut.edu.cn
Connection: keep-alive
Referer: https://jxfw.gdut.edu.cn/login!welcome.action
Cookie: JSESSIONID=CD77DE5E911AA5B66241BF04CAA08A33

同时POST所发送的具体数据会保存在form data中.如下

account=XXX&pwd=XXX&verifycode=nxxx

其中每一项都用&来分隔.此之谓请求体.

以下是分析

# 第一行为请求行,分为3部分
# POST是请求的方式
# 然后是请求资源的路径,如果写/的情况下默认请求首页
# 然后是http协议的版本
POST /new/login HTTP/1.1

# 以下是请求头
# 第二行是服务器的主机ip地址和端口号
# 因为是http,默认是80.80是不显示的.
Host: jxfw.gdut.edu.cn

# 以下同上
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 71
Origin: https://jxfw.gdut.edu.cn
Connection: keep-alive
Referer: https://jxfw.gdut.edu.cn/login!welcome.action
Cookie: JSESSIONID=CD77DE5E911AA5B66241BF04CAA08A33
#此处应该有空行

响应报文

这是web服务器程序发送给浏览器的.
包括:

  1. 响应行
  2. 响应头
  3. 空行
  4. 响应体

响应头

以访问bilibili时返回的响应报文为例

# 响应行也叫状态行
# 第一个是http协议版本
# 第二个是状态码
# 第三个是状态描述
HTTP/1.1 200 Connection established

# 以下是响应头
date: Thu, 21 Jan 2021 08:32:50 GMT
content-type: text/html; charset=utf-8
support: nantianmen
cache-control: no-cache
gear: 1
vary: Origin,Accept-Encoding
idc: shjd
content-encoding: gzip
expires: Thu, 21 Jan 2021 08:32:49 GMT
x-cache-webcdn: MISS from hw-gz3-webcdn-12
X-Firefox-Spdy: h2
#此处应该有空行

响应体

响应体才是真正需要的数据.

里面通常是网页代码,图片等等,点击preview可以预览他发过来的东西.

原文地址:https://www.cnblogs.com/zzidun-pavo/p/14308918.html