z-memo / interview

我们缺的从来都不是前端/后端工程师,而是工程师(或者那些会系统思考,并总是想着解决问题的人)
27 stars 3 forks source link

HTTP面试相关 #41

Open MrSeaWave opened 3 years ago

MrSeaWave commented 3 years ago

参考 浏览器的缓存机制

参考 Shopee HTTP面试总结

MrSeaWave commented 3 years ago

HTTP 缓存

首先都知道HTTP缓存都是从第二次请求开始的。

  1. 第一次发起请求后,服务器返回资源,并在response header中返回带Expires(http1.0)Cache-Control(http1.1)的字段,状态码为200
  2. 第二次发起请求后,强缓存命中则直接读取浏览器缓存,在network中显示的是from memory或者from disk,状态码为200。当浏览器的强缓存失效的时候或者请求头中设置了不走强缓存,并且在请求头中设置了If-Modified-Since(http1.0)或者If-None-Match(http1.1)的时候,会将这两个属性值到服务端去验证是否命中协商缓存,如果命中了协商缓存,会返回304状态码,加载浏览器缓存,并且响应头会设置Last-Modified或者ETag属性。
  3. 若强缓存和协商缓存都未命中,则服务器返回新的资源。
Q: 怎么设置不走强缓存?
Q: Cache-Control 的 public、 private 区别知道吗?
Q: from memory 和 from disk 区别知道吗?

浏览器会把哪些文件丢进内存中?哪些丢进硬盘中? 关于这点,网上说法不一,不过以下观点比较靠得住:

HTTP 状态码

讲一些常见的HTTP状态码

Q: 301 和 302 什么区别?
Q: 重定向会带上原来请求的数据吗?

Springboot 重定向如何携带数据

  1. 传统使用session

  2. 使用RedirectAttributes. (利用session原理)

​ 优点: 提供了addFlashAttribute 等方法.确保数据只能被使用一次后删除

​ ① 直接在Controller的参数中添加RedirectAttributes.

​ ② addFlashAttribute会在重定向到下一个页面取出这个数据以后,将session里面的数据删除\

​ ③ addFlashAttribute 方法会将数据存储在session中,访问一次后失效

​ ④ addAttribute 方法会将数据拼接在url后(get的形式)

重定向POST请求带来的问题(307的应用)

301重定向的时候无法将数据发送给即将重定向的页面, 307 Temporary Redirect是HTTP协议中的一个状态码(Status Code)。可以理解为一个临时的重定向。 但该响应代码与302重定向有所区别的地方在于,收到307响应码后,客户端应保持请求方法不变向新的地址发出请求

HTTP 报文结构

请求报文和响应报文大致上都是起始行+头部+空行+实体

Q: 头部中间加一个空行会怎么样?
Q: 常见的请求头、响应头有哪些

请求头、响应头

常见的请求头字段:

常见的响应头字段:

Q: 请求头里的Referer是干什么用的?

(设置一些防盗链,比如直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer的。https://blog.csdn.net/shenqueying/article/details/79426884)

Q: Content-Length是什么的长度?
Q: 知道Transfer-Encoding: chunked这个字段吗?
Q: Cookie中有哪些属性?
Q: 同源和同站的区别是什么?

安全

讲一下前端常见的一些安全问题以及怎么去预防。

Q: HTML属性怎么攻击?

比如上传头像,本来保存的是一段url,然后页面通过<img src="url">渲染。 但是攻击者可能会传入 ' " onerror="alert('xxx')"'这样的字符串,这样页面渲染头像的时候就被攻击了。

Q: CSP除了在响应头里面设置,还可以在哪里设置?

可以在HTML里通过meta元素设置。

Q:CSP有哪些属性? CSP属性说明

HTTPS 握手过程

1、先了解HTTPS的加密原理 2、再来抓包看握手过程

Cookie、Session、Token区别

浏览器跨域

不同源的请求就会被浏览器认为是跨域。

Q: 你们一般是通过什么方法解决跨域?
Q: 还有什么办法吗?

Q: 知道简单请求和非简单请求吗? 简单请求:

非简单请求:

Q: 知道跨域中的简单请求和非简单请求流程吗? 简单请求会直接发出CORS请求。

非简单请求会在正式通信之前,增加一次OPTIONS请求,称为"预检"请求。

Q: 如何避免发送多次OPTIONS预检请求?
Q: 跨域请求怎么携带Cookie?

LocalStorage、SessionStorage区别

LocalStorage:

SessionStorage:

Q: localstorage存量过大时有什么解决方案吗?

HTTP2 的优点

Q: 头部压缩带来了什么优化?

https://juejin.cn/post/6844903734670000142#heading-6

Q: 为什么HTTP1.x不能实现多路复用?
Q: keep-alive和多路复用区别是什么?