HTTP
GET和POST的区别
区别一:幂等性
GET 请求用于获取资源,请求结果不应该对服务器产生任何影响,也不应该对资源进行修改。因此,GET 请求是幂等的,即重复执行请求不会对服务器和资源产生影响。
POST 请求用于提交数据,可以用于创建、更新或删除资源。POST 请求不是幂等的,因为多次执行相同的 POST 请求会导致多个资源的创建或更新。
区别二:请求参数
GET 请求通过 URL 参数传递数据,即将数据附加在 URL 后面,以问号(?)分隔 URL 和参数,多个参数之间用&符号分隔。例如:http://example.com/path/to/resource?param1=value1¶m2=value2
POST 请求通过请求体传递数据,即将数据放在 HTTP 请求的消息体中发送。POST 请求通常使用表单来提交数据,表单数据会被编码并放在请求体中。
GET 请求将请求参数明文附加在 URL 上,因此请求参数可以被任何人看到,包括敏感信息。POST 请求将请求参数放在请求体中,相对来说更加安全。
区别三:TCP packet
- GET 产生一个 TCP 数据包;POST 产生两个或以上 TCP 数据包。
HTTP缓存
| 缓存 | 内容协商 | |
|---|---|---|
| HTTP 1.1 | Cache-Control: max-age=3600 Etag: ABC | If-None-Match: ABC 响应状态码:304 或 200 |
| HTTP 1.0 | Expires: Wed, 21 Oct 2015 02:30:00 GMT Last-Modified: Wed, 21 Oct 2015 01:00:00 GMT | If-Modified-Since: Wed, 21 Oct 2015 01:00:00 GMT 响应状态码:304 或 200 |
HTTP 和 HTTPS 的区别
- HTTP 是明文传输的,不安全;HTTPS 是加密传输的,非常安全。
- HTTP 使用 80 端口,HTTPS 使用 443 端口。
- HTTP 较快,HTTPS 较慢。
- HTTPS 的证书一般需要购买(但也有免费的),HTTP 不需要证书。
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 不支持。(实际上没多少人用)
TCP 三次握手和四次挥手
建立 TCP 连接时 server 与 client 会经历三次握手
- 浏览器 向 服务器 发送 TCP 数据:SYN(seq=x)
- 服务器 向 浏览器 发送 TCP 数据:ACK(seq=x+1) SYN(y)
- 浏览器 向 服务器 发送 TCP 数据:ACK(seq=y+1)
关闭 TCP 连接时 server 与 client 会经历四次挥手
- 浏览器 向 服务器 发送 TCP 数据:FIN(seq=x)
- 服务器 向 浏览器 发送 TCP 数据:ACK(seq=x+1)
- 服务器 向 浏览器 发送 TCP 数据:FIN(seq=y)
- 浏览器 向 服务器 发送 TCP 数据:ACK(seq=y+1)
为什么 2、3 步骤不合并起来呢?看起来是脱裤子放屁。
答案:2、3 中间服务器很可能还有数据要发送,不能提前发送 FIN。