面试题 - HTTP基础梳理

121 阅读4分钟

GET和POST的区别?

区别一:幂等性

什么是幂等性?重复操作是否影响结果。

例如,刷新页面(get),刷新一次和十次是相同的,所以是幂等的。

例如,付款行为(post),付款一次和付款十次是不同的,所以不是幂等的。

区别二:请求参数

一般约定俗成,get的参数放在url里,post的参数放在请求体里。

get的参数直接暴露在url上,相对不安全。(但其实post到参数在请求体里也是明文到)

get的请求参数在url上,浏览器和服务器会限制它的长度(http协议没有限制)。post的参数放在body里,长度限制可以配置。

区别三:TCP Packet

一般来讲,get产生一个TCP Packet,post产生多个TCP Packet。

需要明确的是,在技术规格文档中,get和post最大的区别是语义的区别。一般来讲面试官问的是实践当中的区别,所以我们一般回答常见的使用方法。

HTTP缓存有哪些方案?

缓存(强缓存)内容协商(弱缓存)
HTTP 1.0Cache-Control:max-age: 3600;If-None-Match: asdf;
Etag: asdf;status code 304 or 200
HTTP 1.1Expires: xxxxx GMTIf-Modified-Since: xxxxx GMT
Last-Modified: xxxxx GMTstatus code 304 or 200

HTTP 1.1中:

缓存:在请求头里设置文件缓存的时间max-age,和文件的唯一特征值标识Etag

内容协商:强缓存时间到期后,浏览器会发送一个询问If-None-Match,存着唯一标识Etag的值,服务器返回状态码304则不删除文件,返回状态码200则删除文件。

HTTP 1.0中:

缓存:在请求头里设置文件缓存到什么时间,和文件上次被修改的时间。

内容协商:强缓存时间到期后,浏览器会发送一个询问If-Modified-Since,存着文件上次被修改的时间,服务器返回状态码304则不删除文件,返回状态码200则删除文件。

存在问题:客户端本地的时间混乱会导致bug,文件如果在一秒内被修改则If-Modified-Since无法发现文件被修改过。

HTTP与HTTPS有什么区别?

简单来说,HTTPS = HTTP + 安全层(SSL or TLS)

区别如下:

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

阮一峰ssl/tls机制博客:www.ruanyifeng.com/blog/2014/0…

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

TCP的全称为传输内容协议,是传输层协议。

“三次握手”,指建立连接时,server和client的行为。

  1. client向server发送TCP数据:SYN(seq=x)
  2. server向client发送TCP数据:ACK(seq=x+1) SYN(seq=y)
  3. client向server发送TCP数据:ACK(seq=y+1)

SYN为sync,同步。

ACK为acknowledge,确认。

seq为请求序号。

“四次挥手”,指关闭连接时,server和client的行为。

  1. client向server发送TCP数据:FIN(seq=x)
  2. server向client发送TCP数据:ACK(seq=x+1)
  3. server向client发送TCP数据:FIN(seq=y)
  4. client向server发送TCP数据:ACK(seq=y+1)

FIN为finish,结束。

ACK为acknowledge,确认。

seq为请求序号。

步骤2和步骤3为什么不合并呢?因为在步骤2之后,server很有可能还有数据需要继续发送。

同源策略和跨域?

同源策略是什么?

如果两个url的协议,域名,端口都一致的话,则这两个url是同源的。在浏览器里打开默认就是同源策略,而postman就不使用同源策略。

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

缺点:很多时候,前端需要访问另一个域名的后端接口,此时,请求可以发送出去,但会被浏览器阻止其获取响应。

怎么解决缺点?

跨域。

  1. JSONP
  2. CORS

Session / Cookie / LocalStorage / SessionStorage / Token的区别?

HTTP 1.1和HTTP 2的区别?

  1. HTTP 2使用了二进制传输,而且将head和body分成帧来传输。HTTP 1.1 是
    符串传输
  2. HTTP 2支持多路复用,HTTP 1.1 不支持。(多路复用简单来说就是一个TCP连接
    从单车道变成了几百个车道)
  3. HTTP 2可以压缩 head,HTTP 1.1 不行。
  4. HTTP 2支持服务器推送,HTTP 1.1 不支持。(实用价值不大)