HTTP 知识点总结
- GET 和 POST 的区别有哪些?
区别一:幂等性
由于 GET 是读,POST 是写,所以 GET 是幂等的,POST 不是幂等的
由于 GET 是读,POST 是写,所以用浏览器打开网页会发送 GET 请求,想要 POST 打开网页要用 form 标签
由于 GET 是读,POST 是写,所以 GET 打开的网页刷新是无害的,POST 打开的页面刷新需要确认
由于 GET 是读,POST 是写,所以 GET 结果会被缓存,POST 结果不会被缓存
由于 GET 是读,POST 是写,所以 GET 打开的页面可被书签收藏,POST 打开的不行
区别二:请求参数
通常GET 请求参数放在 url 里,POST 请求数据放在 body(消息体)里 注:GET也有消息体但是服务器不接收
GET 比 POST 更不安全,因为参数直接暴露在 URL上,所以不能用来传递敏感信息
GET 请求参数放在 url 里是有长度限制的,而 POST 放在 body 里没有长度限制 注:其实也是限制的 414状态码
区别三:TCP packet
GET 产生一个 TCP 数据包,POST 产生两个或以上 TCP 数据包
注:根据技术规格文档,GET 和 POST 最大的区别是语义;以上的区别是实践过程中二者的区别,有些限制是服务器和浏览器 对 GET 和 POST 的,比如长度限制
- HTTP 缓存有哪些方案?
HTTP 1.1: Cache-Control:max-age 控制缓存时间,Etag 是特征值,当缓存过期后,再次访问时会将 Etag 传给服务器进行内容协商过期的缓存是否要删除,如果内容没变返回304 不需要删除,如果内容变了返回 200 删除现有缓存并将新的JS放在body里传过来
HTTP 1.0:Expires确定一个时间点过期(这种方案若用户电脑时间时错乱的就会失效),将文件最后一次更新的时间Last-Modified作为特征值(时间精度太低,一个文件 1s 中改了多次无法区分是不是最新版),当缓存过期后,再次访问时会将 Last-Modified 时间传给服务器进行内容协商过期的缓存是否要删除,不删返回 304,删除返回 200
缓存(强缓存) 内容协商(弱缓存)
HTTP 1.1 Cache-Control:max-age=3600
Etag:ABC if-None-Match:ABC
响应状态码:304 或 200
HTTP 1.0 Expires:Wed,21 oct 2022 02:30:00
Last-Modified:Wed,21 Oct 2022 01:00:00 GMT if-Modified-Since:Wed,21 Oct 2022 01:00:00 GMT
响应状态码:304 或 200
由于 Pragma 在 HTTP 响应中的行为没有确切规范,语义混乱,MDN已经明确不推荐使用它
- HTTP 和 HTTPS 的区别有哪些?
HTTPS = HTTP + SSL / TLS(安全层)
区别:
HTTP 是明文传输的,不安全;HTTPS 是加密传输的,非常安全
HTTP 使用 80 端口,HTTPS 使用 443 端口
HTTP较快,HTTPS 较慢
HTTPS 的证书一般需要购买(但也有免费的),HTTP 不需要证书
4. HTTP/1.1 和 HTTP/2 的区别有哪些?
区别:
HTTP/2 使用了 二进制传输,而且将 head 和 body 分成帧来传输;HTTP/1.1 是字符串传输
HTTP/2 支持多路复用,HTTP/1.1 不支持。多路复用简单来说就是一个 TCP 连接从单车道(不是单行道)变成了几百个双向通行的车道
HTTP/2 可以压缩 head,但是 HTTP/1.1 不行
HTTP/2 支持服务器推送,但 HTTP/1.1 不支持(实际上没多少人用)
5. TCP 三次握手和四次挥手是什么?
TCP(传输控制协议,Transmission Control Protocol)
建立 TCP 连接时 server(服务器)与 client(客户端)会经历三次握手
浏览器向服务器发送 TCP 数据:SYN(seq=x)
服务器向浏览器发送 TCP 数据:ACK(seq = x +1) SYN(y)
浏览器向服务器发送 TCP 数据:ACK(seq = y + 1)
注:seq 序列号是为了防止数据丢失以及确定序号
关闭 TCP 连接时 server(服务器)与 client(客户端)会经历四次挥手
浏览器向服务器发送 TCP 数据:FIN(seq = x)
服务器向浏览器发送 TCP 数据:ACK(seq = x + 1)
服务器向浏览器发送 TCP 数据:FIN(seq = y)
浏览器向服务器发送 TCP 数据:ACK(seq = y + 1)
中间两个步骤为什么不合并起来呢?因为 第二步和第三步中间服务器很可能还有数据要发送,不能提前发送 FIN
- 同源策略和跨域
(1)同源策略是什么?
如果两个 URL 的协议、端口和域名都完全一致的话,则这两个 URL 是同源的