面试常见状态码:
状态码 | 作用 |
---|---|
200 | 请求成功 |
203 | 非授权信息 |
204 | 无内容返回 |
206 | 范围请求成功,返回部分内容 |
301 | 永久重定向 |
302 | 临时重定向 |
303 | 查看其它地址,客户端应采用Get方法请求 |
304 | 所请求的资源未修改 |
400 | 客户端请求语法错误 |
401 | 请求要求用户身份认证 |
403 | 服务器拒绝执行此请求 |
404 | 无法根据请求找到资源 |
500 | 服务器内部错误 |
501 | 服务器不支持请求的功能 |
503 | 服务器超载,系统维护 |
504 | 充当网关或代理的服务器未及时获取请求 |
505 | 服务器不支持请求的HTTP协议的版本 |
主要背以上的状态码即可。
解释304的时候最好加上缓存的概念,能加分。
缓存:
缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。
优点:缓解服务器端压力,提升性能(减少网页加载速度),提高用户体验。
浏览器缓存有两种:强缓存和协商缓存。
请求资源时浏览器怎么知道是强缓存还是协商缓存?
用户首次请求并获取到该资源后,根据返回的信息来告诉如何缓存资源,可能采用的是强缓存,也可能告诉客户端浏览器是协商缓存,这都需要根据响应的header内容来决定。
强缓存:
(1)过程
用户请求访问过的资源,浏览器拦截请求,查看该资源的强缓存相关header字段来判断资源是否过期,若未过期即命中强缓存,直接从本地获取资源来展示给用户,若没有命中强缓存,则从服务器重新加载资源或进入协商缓存流程(如果资源同时设置了强缓存和协商缓存)
(2)相关header字段
Expires: 一个未来时间,浏览器再次加载资源时,如果在这个过期时间内,则命中强缓存。
Expires:
Thu , 15 Apr 2030 20:00:00 GMT //代表 2030 年4月15日请求过期,在这之前当前请求都有效。
Cache-Control: 当值设为max-age=300时,则代表在这个请求正确返回时间(浏览器也会记录下来)的5分钟内再次加载资源,就会命中强缓存。
(当然还有几个参数,但面试不会这么深入问,只需回答强缓存和协商缓存的用法即可)
注: 同时设置时 cache-control 优先级高于 expires
协商缓存:
用户请求访问过的资源,请求头携带相关header字段去跟服务器的对应相关header字段做对比,由服务器判断资源是否修改,未修改则命中协商缓存,服务器返回304状态码,不返回资源,浏览器获取本地资源。若资源被修改,则返回200状态码并返回新的资源。
强缓存和协商缓存的区别:
强缓存是浏览器(判断是否命中后)单方面做决定是否向服务器发起请求,比较强势,若命中则不会与服务器进行任何通信。而协商缓存是浏览器与服务器(相关字段的校对)双方协商是否返回新资源。
一般将一些不常更新的静态资源设置强缓存加协商缓存,而类似index.html等更新频繁的资源设置为协商缓存。