前端押题 HTTP

103 阅读4分钟

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 比 POST 更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET 请求参数放在 URL 里是有长度限制的,而 POST 放在 body 里没有长度限制。

区别三:TCP packet

  • GET 产生一个 TCP 数据包;POST 产生两个或以上 TCP 数据包。

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。

同源策略和跨域

同源策略是什么?

如果两个 URL 的协议、端口和域名都完全一致的话,则这两个 URL 是同源的。

同源策略怎么做?

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

优点

保证用户的隐私安全和数据安全。

缺点

很多时候,前端需要访问另一个域名的后端接口,会被浏览器阻止其获取响应。

比如甲站点通过 AJAX 访问乙站点的 /money 查询余额接口,请求会发出,但是响应会被浏览器屏蔽。

怎么解决缺点

使用跨域手段

  1. JSONP

  • 甲站点利用 script 标签可以跨域的特性,向乙站点发送 get 请求。
  • 乙站点后端改造 JS 文件的内容,将数据传进回调函数。
  • 甲站点通过回调函数拿到乙站点的数据。
  1. CORS

  • 对于简单请求,乙站点在响应头里添加 Access-Control-Allow-Origin: http://甲站点 即可。

  • 对于复杂请求,如 PATCH,乙站点需要: a. 响应 OPTIONS 请求,在响应中添加响应头
    b. 响应 POST 请求,在响应中添加 Access-Control-Allow-Origin 头。

  • 如果需要附带身份信息,JS 中需要在 AJAX 里设置 xhr.withCredentials = true .

  1. Nginx 代理 / Node.js 代理

  • 前端 ⇒ 后端 ⇒ 另一个域名的后端

Session、Cookie、LocalStorage、SessionStorage 的区别

Cookie V.S. LocalStorage

  1. 主要区别是 Cookie 会被发送到服务器,而 LocalStorage 不会
  2. Cookie 一般最大 4k,LocalStorage 可以用 5Mb 甚至 10Mb(各浏览器不同)

LocalStorage V.S. SessionStorage

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

Cookie V.S. Session

  1. Cookie 存在浏览器的文件里,Session 存在服务器的文件里
  2. Session 是基于 Cookie 实现的,具体做法就是把 SessionID 存在 Cookie 里