面试被问到什么是http缓存,一脸茫然,所以查询并记录下来。
1.产生原因
想服务器重复发送请求时,网络上传来传去都是一份数据,造成浪费
2.解决办法
将内容缓存到本地磁盘或者缓存服务器中,加速访问且减轻源服务器负担
3.具体操作
- response header中加入expires,浏览器在指定日期前访问本地(?)缓存即可,现在一般用chache-control替代(状态码200,强制缓存);
- espires到期后再访问,请求头加入上次修改时间(if-Modified-Since),服务器判断如果与内部文件(eg: a.js)相同的话使用缓存(状态码304,协商缓存)
- 有可能a.js定期修改,但内容没变,请求头加入文件ID(if-Match),服务器比对a.js的ETag,如果相同就使用缓存(状态码304,协商缓存)
补充:
Referer请求头用来表示,服务器原始资源的URI?意思是当前页面的URI?可以用来保证安全支付,判断如果不是同源的就认为非法而拒绝访问。?、、
补充:
HTTP通信时,除了客户端和服务器以外,还有用于通信数据转发的应用程序,如代理(缓存/不缓存),网关(修改报文/不修改)和隧道(使用SSL等加密手段保证安全通信)。
补充
正向代理和反向代理。
转自https://blog.csdn.net/riba2534/article/details/80964097
翻墙的原理就是正向代理,S能访问D,D能访问A(比如美国网站),这样客户端就在服务器前隐藏了自己的身份,正向代理是客户端隐藏(比如托人找马云借钱)
反向代理是服务器隐藏,浏览器不知道源服务器在哪。(比如给10086打电话)
Nginx是反向代理,可以用来做负载均衡
webpack处理跨域的原理也是反向代理,本地服务器是localhost,访问的也是localhost,他代理了源服务器,浏览器才有同源策略,服务器间没有,因此可以访问到。