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.0 | Cache-Control:max-age: 3600; | If-None-Match: asdf; |
| Etag: asdf; | status code 304 or 200 | |
| HTTP 1.1 | Expires: xxxxx GMT | If-Modified-Since: xxxxx GMT |
| Last-Modified: xxxxx GMT | status 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)
区别如下:
- HTTP是明文传输的,非常不安全。HTTPS是加密传输的,非常安全。
- HTTP使用80端口。HTTPS使用443端口。
- HTTP相对较快,HTTPS相对较慢。
- HTTP不需要证书,HTTPS需要证书,有的需要购买有的免费。
阮一峰ssl/tls机制博客:www.ruanyifeng.com/blog/2014/0…
TCP三次握手四次挥手是什么?
TCP的全称为传输内容协议,是传输层协议。
“三次握手”,指建立连接时,server和client的行为。
- client向server发送TCP数据:SYN(seq=x)
- server向client发送TCP数据:ACK(seq=x+1) SYN(seq=y)
- client向server发送TCP数据:ACK(seq=y+1)
SYN为sync,同步。
ACK为acknowledge,确认。
seq为请求序号。
“四次挥手”,指关闭连接时,server和client的行为。
- client向server发送TCP数据:FIN(seq=x)
- server向client发送TCP数据:ACK(seq=x+1)
- server向client发送TCP数据:FIN(seq=y)
- client向server发送TCP数据:ACK(seq=y+1)
FIN为finish,结束。
ACK为acknowledge,确认。
seq为请求序号。
步骤2和步骤3为什么不合并呢?因为在步骤2之后,server很有可能还有数据需要继续发送。
同源策略和跨域?
同源策略是什么?
如果两个url的协议,域名,端口都一致的话,则这两个url是同源的。在浏览器里打开默认就是同源策略,而postman就不使用同源策略。
优点:保证用户的隐私安全和数据安全。
缺点:很多时候,前端需要访问另一个域名的后端接口,此时,请求可以发送出去,但会被浏览器阻止其获取响应。
怎么解决缺点?
跨域。
- JSONP
- CORS
Session / Cookie / LocalStorage / SessionStorage / Token的区别?
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 不支持。(实用价值不大)