【总结】面试中常遇到的一些冷门问题(1)
一、缓存
1、强缓存:强制浏览器在一定时间内直接从本地缓存读取数据,不向服务器发送请求。强缓存可以通过设置响应头信息实现,常见的响应头有 Expires 和 Cache-Control。
2、协商缓存:在强缓存失效时,浏览器会向服务器发送请求,询问服务器该资源在最后一次访问后是否有修改。如果没有修改,服务器会返回 304 状态码,告诉浏览器可以继续使用本地缓存,否则会返回新的资源内容。协商缓存可以通过设置响应头信息实现,常见的响应头有 Last-Modified 和 ETag。
3、浏览器缓存的主要流程可以概括为以下几个步骤:
3.1、浏览器收到 HTTP 请求时,会根据 URL 判断该资源是否已经被缓存。如果已经被缓存,则直接从本地缓存读取资源。
3.2、如果未被缓存或者缓存已经过期,浏览器会向服务器发送请求,并在请求中带上一些信息,例如上次访问时间、Etag 等。
服务器收到请求后,根据请求中的信息判断资源是否有更新。如果资源没有更新,则返回一个 304 响应码,告诉浏览器可以继续使用本地缓存;如果资源已经更新,则返回新的资源内容和一些缓存相关的头信息。
3.3、浏览器收到响应后,会根据响应头信息来更新本地缓存,并将新的资源内容展示给用户
二、跨域
跨域是指访问一个不同于当前页面所在域名、协议或端口的资源。常见的跨域问题包括 Ajax 请求、跨域写入 Cookie 等。
解决跨域问题的一些方法包括:
1、JSONP:通过动态生成 script 标签,实现跨域获取数据。
JSONP的限制:
1.1、只能用于 GET 请求:由于 JSONP 利用