1. HTTP
HTTP即超文本传输协议(Hyper Text Transfer Protocol),是因特网上应用最广的一种协议。
- 设计目的:保证客户端与服务器之间的通信(发布和接受HTML页面);
- 工作方式:客户端-服务器端的请求-应答协议
例如:
响应中包括:关于请求的状态信息和可能被请求的内容
2.GET与POST
HTTP定义了与服务器交互的不同方法:
- GET:从指定的资源请求数据
- POST:从指定的资源请求数据
- PUT
- DELETE
方法 | 概述 |
---|---|
HEAD | 与 GET 相同,但只返回 HTTP 报头,不返回文档主体。 |
PUT | 上传指定的 URI 表示。 |
DELETE | 删除指定资源。 |
OPTIONS | 返回服务器支持的 HTTP 方法。 |
CONNECT | 把请求连接转换到透明的 TCP/IP 通道 |
一般我们在浏览器输入一个网址访问网站都是GET请求
2.1.GET与POST方法的主要区别
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
例如:
GET方法:
/test/demo_form.php?name1=value1&name2=value2
POST方法
POST /test/demo_form.php HTTP/1.1
Host: runoob.com
name1=value1&name2=value2
方法 | GET | POST |
---|---|---|
缓存 | 可被缓存 | 不会缓存 |
历史记录 | 会被保存在浏览器历史记录中 | 不会保存在浏览器历史记录中 |
书签 | 可被收藏为书签 | 不可被收藏为书签 |
数据长度 | 有长度限制:当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 对长度无限制 |
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
对数据类型的限制 | 只允许 ASCII 字符 | 没有限制。也允许二进制数据,支持整个 ISO10646 字符集。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
2.2 为什么GET比POST快
- 【影响较小】POST需要在请求的body部分包含数据,所以会多了几个数据描述部分的首部字段
- 【影响较大】POST在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据,见下图
POST请求的过程:
GET请求的过程
参考:
【1】https://zhuanlan.zhihu.com/p/275695831?utm_id=0
【2】https://www.runoob.com/tags/html-httpmethods.html
【3】https://blog.csdn.net/NoodleDD/article/details/108362246