每日一篇——23秋招计算机网络面经(3)
⭐304的过程
- 检查强缓存:浏览器请求资源时首先命中资源的Expires 和 Cache-Control
- Expires字段指定了一个绝对的时间戳,表示该资源的缓存将在此时间之后过期,其受限于本地时间,如果修改了本地时间,可能会造成缓存失效
- Cache-control: max-age指定了最大生命周期,状态仍然返回200,但不会请求数据,在浏览器中能明显看到from cache字样。
- 强缓存失效,进入协商缓存阶段,首先验证ETag,ETag可以保证每一个资源是唯一的,资源变化都会导致ETag变化。服务器根据客户端请求头上的If-None-Match值(存储了上次ETag的值)来判断是否命中缓存。
- 协商缓存Last-Modify/If-Modify-Since阶段,客户端第一次请求资源时,服务器返回的header中会加上Last-Modify,Last-modify是一个时间标识该资源的最后修改时间。再次请求该资源时,request的请求头中会包含If-Modify-Since,该值为缓存之前返回的Last-Modify。服务器收到If-Modify-Since后,根据资源的最后修改时间判断是否命中缓存。 在尝试确定文档是否已更改时,Last-Modified日期并不很可靠。有时开发人员会在修复某些内容后将所有文件上传到服务器,即使内容仅在子集上更改,也会重置所有文件的Last-Modified日期。为了适应这种情况,大多数服务器也会发送一个ETag。
⭐说说强缓存和协商缓存
强缓存和协商缓存是HTTP中常用的两种缓存机制,用于提高网页加载速度和减轻服务器负载。
- 强缓存:
- 当浏览器请求某个资源时,先检查该资源的强缓存信息(Expires和Cache-Control)。
- 如果缓存未过期或者在指定的有效期内(通过"Expires"或"Cache-Control"中的"max-age"字段来确定),浏览器会直接从本地缓存中获取该资源,并返回200 OK。
- 如果缓存已过期,则浏览器需要向服务器发送请求,进行协商缓存。
- 协商缓存:
- 当缓存已过期或者浏览器禁用了强缓存时,浏览器会向服务器发起请求,携带上一次请求返回的缓存标识。
- 服务器收到请求后,根据携带的缓存标识(通常是ETag或Last-Modified)与当前资源的比较结果,确定是否返回新的资源。
- 如果资源未发生变化(比对结果为304 Not Modified),服务器会返回该响应状态码,告知浏览器继续使用缓存的资源,减少数据传输量。
- 如果资源已经发生变化(比对结果不是304 Not Modified),服务器会返回新的资源,并在响应头部中更新缓存标识。
强缓存和协商缓存可以配合使用,当强缓存失效时,浏览器通过协商缓存与服务器验证资源是否有更新。如果服务器返回304状态码,浏览器会继续使用缓存的资源;如果服务器返回新的资源,浏览器会更新缓存并使用新的资源。
常见的缓存相关的响应头字段包括:Cache-Control、Expires、ETag和Last-Modified。通过合理设置这些字段,可以控制缓存的行为和有效期,提高网站性能和用户体验。
⭐什么是ARP协议 (Address Resolution Protocol)?
ARP协议完成了IP地址与物理地址的映射。每一个主机都设有一个 ARP 高速缓存,里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。当源主机要发送数据包到目的主机时,会先检查自己的ARP高速缓存中有没有目的主机的MAC地址,如果有,就直接将数据包发到这个MAC地址,如果没有,就向所在的局域网发起一个ARP请求的广播包(在发送自己的 ARP 请求时,同时会带上自己的 IP 地址到硬件地址的映射),收到请求的主机检查自己的IP地址和目的主机的IP地址是否一致,如果一致,则先保存源主机的映射到自己的ARP缓存,然后给源主机发送一个ARP响应数据包。源主机收到响应数据包之后,先添加目的主机的IP地址与MAC地址的映射,再进行数据传送。如果源主机一直没有收到响应,表示ARP查询失败。
如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
⭐什么是NAT (Network Address Translation, 网络地址转换)?
用于解决内网中的主机要和因特网上的主机通信。由NAT路由器将主机的本地IP地址转换为全球IP地址,分为静态转换(转换得到的全球IP地址固定不变)和动态NAT转换。