请求报文的组成
请求报文包括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服务器程序发送给浏览器的.
包括:
- 响应行
- 响应头
- 空行
- 响应体
响应头
以访问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可以预览他发过来的东西.