GET 和 POST 的区别有哪些?
幂等性
幂等性:是指一个操作或函数被重复执行多次所产生的效果是相同的。例如GET请求,不管对同一个资源请求多少次,最终的结果是相同的。
- 由于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比POST更不安全,因为参数直接暴露在URL上,所以最好不要用来传递敏感信息。
- GET请求参数放在url里面是有长度限制的,而POST放在body里没有长度限制。
GET请求和POST请求协议里是没有长度限制的,是浏览器和服务器做了长度限制,并且POST也有长度限制,只是一般达不到限制,所以我们说没有限制。
TCP packet
- GET产生一个TCP数据包;POST产生两个或以上TCP数据包(因为POST既有header又有body)。
HTTP缓存有哪些方案?
| 缓存(强缓存) | 内容协商(弱缓存) | |
|---|---|---|
| HTTP1.1 | Cache-Control: max-age=3600 Etag:ABC | If-None-Match: ABC 响应状态码 304 或200 |
| HTTP1.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 07:30:00 响应状态码:304 或 200 |
HTTP1.1 在文件响应头中添加 Cache-Control: max-age=3600字段就会自动的缓存一个小时,同时向浏览器发送特征值字段Etag:ABC;
当缓存过期时,浏览器会在发送请求时带上if-None-Match字段将特征值ABC发送给服务器询问缓存是否有效,若服务器返回304状态码,则表示缓存有效,可以继续使用,若返回200状态码,则表示需要重新获取资源并更新缓存。
HTTP1.0 是在文件响应头中通过Expries字段设置缓存过期时间(这个方案当用户电脑时间错误时,会导致缓存失效),然后将最后一次修改时间通过Last-Modified字段发送给浏览器做为特征值(这个方案只精确到秒,假如1s内修改多次,就无法区分)。当缓存过期时,浏览器会在发送请求时带上If-Modified-Since字段将特征值发送给服务器询问缓存是否有效,若服务器返回304状态码,则表示缓存有效,可以继续使用,若返回200状态码,则表示需要重新获取资源并更新缓存。
HTTP和HTTPS的区别有哪些?
HTTPS = HTTP + SSL/TLS(安全层)
- HTTP是明文传输的,不安全;HTTPS是加密传输的,非常安全。
- HTTP使用80端口, HTTPS使用443端口。
- HTTP较快,HTTPS较慢。
- HTTPS的证书一般需要购买(也有免费的),HTTP不需要证书。
TCP 三次握手和四次挥手是什么?
建立 TCP 连接时 server 与 client 会经历三次握手
- 浏览器向服务器发送TCP数据:SYN(seq=x)
- 服务器向浏览器发送TCP数据:ACK(seq=x+1) SYN(seq=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)
HTTP/1.1和HTTP/2的区别有哪些?
- HTTP/2 使用了二进制传输,而且将head和body分成帧来传输;HTTP/1.1是字符串传输。
- HTTP/2支持多路复用,HTTP/1.1不支持。
- HTTP/2可以压缩head,但是HTTP/1.1不行。
- HTTP/2支持服务器推送,但HTTP/1.1不支持。