常见基础问题(HTTP)

140 阅读5分钟

GET 和 POST 的区别是什么?

幂等性

GET是读,POST是写,所以GET是幂等的,POST不是幂等的。(幂等是指多次执行,结果不会改变) 也正是由于幂等性,使得:

  1. 浏览器打开网页发送的是GET请求,如果想用打开网页,POST需要用到form标签。
  2. GET打开的网页,刷新是无害的,POST打开的页面刷新需要确认。
  3. GET的结果会被缓存,POST结果不会被缓存。
  4. GET打开的页面可被书签收藏,POST打开的不能。

请求参数

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

TCP packet

  1. GET产生一个TCP数据包,POST产生两个或以上的TCP数据包。

HTTP 缓存有哪些方案?

HTTP1.1

缓存(强缓存)Cache-Control:max-age=xxxEtag:yyy (xxx代指以秒为单位的时间,yyy代指一个文件的特征值)。Cache-Control表明缓存有效期,Etag表明到期后询问是否删除缓存。

内容协商(弱缓存):If-None-Match:yyy存储文件特征值,浏览器询问时进行对比。如果需要删除,服务器返回200,如果需要继续保存,服务器返回304。

HTTP1.0

缓存(强缓存)Expires:日期1Last-Modified:日期2,分别记录有效期至日期1 和 上次更新时间是日期2。Expires存在bug:有可能设置的时间在获取时就已经过了。 Last-Modified存在bug:精度只能到秒,有可能在1秒内进行了多次修改,无法确定是否是最新的文件。

内容协商(弱缓存):浏览器用If-Modified-Since:日期2查询,服务器给出相应状态码:200表示删除,304表示继续保存。日期可能与Last-Modified日期一致。

image.png

HTTP 和 HTTPS 的区别有哪些?

HTTPS = HTTP+SSL/TLS(安全层)

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

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

  1. HTTP2使用二进制传输,而且将head和body分成帧来传输。HTTP1.1是字符串传输。
  2. HTTP2支持多路复用,HTTP1.1不支持。(多路复用,简单来说就是所有请求通过一个TCP并发完成。不支持多路复用则需要每个请求一个TCP)
  3. HTTP2可以压缩head,HTTP1.1不可以。
  4. HTTP2支持服务器推送,HTTP1.1不支持。

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

三次握手

建立TCP连接时客户端与服务器会经历三次握手:

1.客户端向服务器发送SYN段并指明初始序列号:SYN(seq=x)

2.服务器向客户端发送ACK和SYN段:ACK(seq=x+1),SYN(y)

3.客户端向服务器发送ACK:ACK(seq=y+1)

四次挥手

关闭TCP连接时客户端和服务器会经历四次挥手:

1.客户端向服务器发送FIN段并指明初始序列号:FIN(seq=x)

2.服务器向客户端发送ACK并回复序列号:ACK(seq=x+1)

3.服务器向客户端发送FIN段并指明初始序列号:FIN(seq=y)

4.客户端向服务器发送ACK并回复序列号:ACK(seq=y+1)

问题:为什么挥手比握手多一次?为什么2、3不合并?

因为在此期间服务器可能还有数据要发送,不能提前发FIN。

说说同源策略和跨域

同源策略

如果两个URL的协议、端口、域名都完全一致,则这两个URL是同源的。同源策略是指限制一个源的文档或者它加载的脚本与另一个源的资源进行交互。

只要在浏览器内打开页面,就默认遵守同源策略。

优点:同源策略能够保证用户的隐私安全和数据安全。

缺点:前端访问另一个域名的后端接口会被浏览器阻止获取相应。(请求能发出,但响应被浏览器屏蔽)

解决方法:跨域。

跨域

方法有JSONPCORS,以及Nginx代理/Node.js代理的方法

JSONP 实现原理:

A站点利用script标签跨域跨域的特性,向B站点发送GET请求。

B站点改造JS文件的内容,将数据传进回调函数。

A站点通过回调函数拿到B站点的数据。

缺点

  • 由于是script标签,因此只能发送GET请求,不支持POST
  • 缺失用户认证的功能。

优点

  • 改动较小。
  • 可在不支持CORS的浏览器上使用。

CORS

  1. 对于简答请求,B站点在响应头里加上Access-Control-Allow-Origin:A站点URL即可
  2. 对于复杂请求,如PATCH,B站点需要:
    1. 响应OPTIONS请求,在响应中添加如下响应头
    Access-Control-Allow-Origin: A站点URL
    Access-Control-Allow-Methods: POST,GET,OPTIONS,PATCH
     Access-Control-Allow-Headers: Content-Type 
    
    1. 响应POST请求,在响应中添加Access-Control-Allow-Origin头.
  3. 如果需要附带身份信息,JS中需要在AJAX里设置xhr.withCredentails=true

Nginx代理/Node.js代理

前端请求到后端,后端通过代理,请求另一个域名的后端。

Session、Cookie、LocalStorage、SessionStorage 的区别

Session vs Cookie

  1. Cookie存在浏览器文件里,Session存在服务器文件里。

  2. Session是基于Cookie实现的。具体做法是将SessionID存在Cookie里。 Cookie vs LocalStorage

  3. Cookie会被发送到服务器,LocalStorag不会。

  4. Cookie一般最大4K,LocalStorag可以达到5M甚至是10M(各浏览器不一样)。

LocalStorage、SessionStorage

  1. LocalStorage一般不会自动过期,除非用户手动删除。
  2. SessionStorage在会话结束时过期(如关闭浏览器之后等,有浏览器自行决定)

(其他区别或者更详细的,请参照更多文章)