http协议:
全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个 HTTP 请求,对应的服务器收到这个请求之后,经过计算处理,就会返回一个 HTTP 响应。并且当我们访问一个网站时,可能涉及不止一次的 HTTP 请求和响应的交互过程。
客户端: 主动发起网络请求的一端
服务器: 被动接收网络请求的一端
请求: 客户端给服务器发送的数据
响应: 服务器给客户端返回的数据
Fiddler ****抓包工具介绍:
为此为了更加清楚的了解我们访问一个网站时 HTTP 请求/协议是怎么交互的,由于 HTTP 是一个文本格式的协议,就可以通过以下两种方式:
通过 F12 打开浏览器的开发者工具,点击 Network 标签页,然后刷新页面就行。显示的每一条记录都是一次 HTTP 请求/响应
抓包工具,这里以 Fiddler 为例,它能够直接读取你电脑上网卡的信息,网卡上有什么数据流动,它都能感知到并且显示出来
打开 Fiddler,然后打开你要访问的网站,访问该网站的 HTTP 请求和响应就会显示在 Fiddler 上
URL 的标准格式如下:
协议类型:[//服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]
GET 是最常用的 HTTP 方法,常用于获取服务器上的某个资源。
POST 方法也是一种常见的方法,多用于提交用户输入的数据给服务器
GET 和 POST 其实没有本质区别,使用 GET 的场景完全可以使用 POST 代替,使用 POST 的场景一样可以使用 GET 代替。但是在具体的使用上,还是存在一些细节的区别
一个 HTTP 方法是幂等的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。
即没有对 URL 的长度有任何限制
PUT: 与 POST 相似,但是具有幂等特性,一般用于更新
DELETE: 删除服务器指定资源
OPTIONS: 返回服务器所支持的请求方法
HEAD: 与 GET 类似,只不过响应体不返回,只返回响应头
TRACE: 能显示服务器端收到的请求,测试的时候会用到
CONNECT: 预留,暂无使用
HTTP Header是附加在请求和响应消息中的键值对,用于传递额外的信息
header 的整体格式是键值对结构,每个键值对占一行,键和值之间使用 冒号``+``空格 进行分割。
User-Agent 表示浏览器或者操作系统的属性
HOST 的值表示服务器主机的地址和端口
Content-Length
Content-Length 表示 body 的数据长度,长度单位是字节
Content-Type
Content-Type 表示 body 的数据格式
Referer
Referer 表示这个页面是从哪个页面跳转过来的
Cookie 是浏览器提供的一种让程序员在本地存储数据的能力
如果没有 Cookie,直接将要存储的数据保存在客户端浏览器所在的主机的硬盘上,那么就会出现很大的安全风险,比如当你不小心打开某个不安全的网站,该网站就可以在你的硬盘上写一个病毒程序,那么你的电脑就挂了!因此浏览器为了保证安全性,就禁止网页中的代码访问主机的硬盘(无法在 JS 中读写文件),因此也就失去了持久化存储的能力,故 Cookie 就很重要!
Cookie 中存储了一个字符串,是键值对结构的,键值对之间使用 ;分割,键和值之间使用 = 分割
Cookie 这个数据可能是客户端(网页)自行通过 JS 写入的,也可能来自于服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据。
Cookie 字段会在后续的请求中,把浏览器本地存储的这些键值对再发送回服务器