认识请求"报头"(header)
header的整体的格式也是"键值对"结构.
每个键值对占⼀⾏.键和值之间使⽤分号分割.
报头的种类有很多,此处仅介绍⼏个常⻅的.
Host
表⽰服务器主机的地址和端⼝.
Content-Length
表⽰body中的数据⻓度.
Content-Type
表⽰请求的body中的数据格式.
常⻅选项:
• application/x-www-form-urlencoded:form表单提交的数据格式.此时body的格式形如:
title=test&content=hello
• multipart/form-data:form表单提交的数据格式(在form标签中加上 enctyped="multipart/form-data" .通常⽤于提交图⽚/⽂件.body格式形如:
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3Trw
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title -
-----WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
• application/json:数据为json格式.body格式形如:
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16
关于Content-Type的详细情况:https://developer.mozilla.org/enUS/docs/Web/HTTP/Basics_of_HTTP/MIME_types
User-Agent(简称UA)
表⽰浏览器/操作系统的属性.形如
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
其中Windows NT 10.0; Win64; x64 表⽰操作系统信息 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77
Safari/537.36 表⽰浏览器信息.
User-Agent之所以是这个样⼦是因为历史遗留问题.可以参考
User-Agent的故事:https://zhuanlan.zhihu.com/p/398807396
Referer
表⽰这个⻚⾯是从哪个⻚⾯跳转过来的.形如
如果直接在浏览器中输⼊URL,或者直接通过收藏夹访问⻚⾯时是没有Referer的.
Cookie
Cookie中存储了⼀个字符串,这个数据可能是客⼾端(⽹⻚)⾃⾏通过JS写⼊的,也可能来⾃于服务器 (服务器在HTTP响应的header中通过Set-Cookie字段给浏览器返回数据). 往往可以通过这个字段实现"⾝份标识"的功能.
每个不同的域名下都可以有不同的Cookie,不同⽹站之间的Cookie并不冲突.
可以通过抓包观察⻚⾯登陆的过程(以码云为例):
1)清除之前的cookie
为了⽅便观察,先清除掉之前登陆的cookie
在码云⻚⾯上,点击url左侧的图标,选择Cookie

然后移除已经存在的Cookie

2)登陆操作
登陆请求
登陆响应
3)访问其他⻚⾯
登陆成功之后,此时可以看到后续访问码云的其他⻚⾯(⽐如个⼈主⻚),请求中就都会带着刚才获取到 的Cookie信息
理解登陆过程

这个过程和去医院看病很相似.
-
到了医院先挂号.挂号时候需要提供⾝份证,同时得到了⼀张"就诊卡",这个就诊卡就相当于患者的 "令牌".
-
后续去各个科室进⾏检查,诊断,开药等操作,都不必再出⽰⾝份证了,只要凭就诊卡即可识别出当前 患者的⾝份.
-
看完病了之后,不想要就诊卡了,就可以注销这个卡.此时患者的⾝份和就诊卡的关联就销毁了.(类似 于⽹站的注销操作)
-
⼜来看病,可以办⼀张新的就诊卡,此时就得到了⼀个新的"令牌"