- Get 请求能缓存,Post 不能
- Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里(当然你想写到 `body` 里也是可以的),且会被浏览器保存历史纪录。Post 不会,但是在抓包的情况下都是一样的。
- URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的
- Post 支持更多的编码类型且不对数据类型限制
**通用首部**
Cache-Control | 控制缓存的行为 |
| ------------- | ------------------------------ |
| Connection | 浏览器想要优先使用的连接类型,比如 `keep-alive`
`Keep-Alive` 是一个通用消息头,可以用来设置超时时长和最大请求数。
**请求首部**
Referer | 包含了当前请求页面的来源页面的地址,
服务端一般使用 `Referer` 请求头识别访问来源,进行统计分析、日志记录以及缓存优化等。
以下两种情况下,`Referer` 不会被发送:
- 来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;
- 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS)。
Accept | 能正确接收的媒体类型 |
| --------------- | ------------ |
| Accept-Charset | 能正确接收的字符集 |
| Accept-Encoding | 能正确接收的编码格式列表 |
| Accept-Language | 能正确接收的语言列表
User-Agent | 客户端信息 |
**响应首部**
| 响应首部 | 作用 |
ETag | 资源标识 |
`ETag`是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽
,因为如果内容没有改变,Web服务器不需要发送完整的响应。
而如果内容发生了变化,使用ETag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。
`ETag`用例:是缓存未更改的资源。 如果用户再次访问给定的URL(设有`ETag`字段),
显示资源过期了且不可用,客户端就发送:
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
服务器将客户端的ETag与其当前版本的资源的ETag进行比较,
如果两个值匹配(即资源未更改),服务器将返回304,告诉客户端缓存版本可用(新鲜)。
TLS
http通过 TLS 协议进行了加密。
对称加密:就是两边拥有相同的秘钥,两边都知道如何将密文加密解密。
非对称加密:首先服务端将公钥公布出去,那么客户端也就知道公钥了。接下来客户端创建一个秘钥,然后通过公钥加密并发送给服务端,服务端接收到密文以后通过私钥解密出正确的秘钥,这时候两端就都知道秘钥是什么了
TLS 握手:两端使用非对称加密的方式来通信,但是因为非对称加密损耗的性能比对称加密大,所以在正式传输数据时,两端使用对称加密的方式通信