HTTP相关知识点总结

83 阅读4分钟

GET 和 POST 的区别有哪些?

幂等性

幂等性:是指一个操作或函数被重复执行多次所产生的效果是相同的。例如GET请求,不管对同一个资源请求多少次,最终的结果是相同的。

  1. 由于GET是读,POST是写,所以GET是幂等的,POST部不是幂等的。
  2. 由于GET是读,POST是写,所以用浏览器打开网页会发送GET请求,想要POST打开网页要用form标签。
  3. 由于GET是读,POST是写,所以GET打开的页面刷新是无害的,POST打开的页面刷新需要确认。
  4. 由于GET是读,POST是写,所以GET结果会被缓存,POST结果不会被缓存。
  5. 由于GET是读,POST是写,所以GET打开的页面可以被书签收藏,POST打开的不行。

请求参数

  1. 通常,GET请求参数放在url里面,POST请求数据放在body(消息体)里。
  2. GET比POST更不安全,因为参数直接暴露在URL上,所以最好不要用来传递敏感信息。
  3. GET请求参数放在url里面是有长度限制的,而POST放在body里没有长度限制。

GET请求和POST请求协议里是没有长度限制的,是浏览器和服务器做了长度限制,并且POST也有长度限制,只是一般达不到限制,所以我们说没有限制。

TCP packet

  1. GET产生一个TCP数据包;POST产生两个或以上TCP数据包(因为POST既有header又有body)。

HTTP缓存有哪些方案?

缓存(强缓存)内容协商(弱缓存)
HTTP1.1Cache-Control: max-age=3600
Etag:ABC
If-None-Match: ABC
响应状态码 304 或200
HTTP1.0Expires: 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(安全层)

  1. HTTP是明文传输的,不安全;HTTPS是加密传输的,非常安全。
  2. HTTP使用80端口, HTTPS使用443端口。
  3. HTTP较快,HTTPS较慢。
  4. HTTPS的证书一般需要购买(也有免费的),HTTP不需要证书。

TCP 三次握手和四次挥手是什么?

建立 TCP 连接时 server 与 client 会经历三次握手

  1. 浏览器向服务器发送TCP数据:SYN(seq=x)
  2. 服务器向浏览器发送TCP数据:ACK(seq=x+1) SYN(seq=y)
  3. 浏览器向服务器发送TCP数据:ACK(seq=y+1)

关闭 TCP 连接时 server 与 client 会经历四次挥手

  1. 浏览器向服务器发送TCP数据:FIN(seq=x)
  2. 服务器向浏览器发送TCP数据:ACK(seq=x+1)
  3. 服务器向浏览器发送TCP数据:FIN(seq=y)
  4. 浏览器向服务器发送TCP数据:ACK(seq=y+1)

HTTP/1.1和HTTP/2的区别有哪些?

  1. HTTP/2 使用了二进制传输,而且将head和body分成来传输;HTTP/1.1是字符串传输。
  2. HTTP/2支持多路复用,HTTP/1.1不支持。
  3. HTTP/2可以压缩head,但是HTTP/1.1不行。
  4. HTTP/2支持服务器推送,但HTTP/1.1不支持。