解密HTTP协议

本文深入探讨了HTTP协议的工作原理,包括浏览器如何通过DNS解析请求服务器资源,以及微服务架构中RPC调用的底层传输机制。同时,详细介绍了HTTP缓存机制,包括强缓存和协商缓存的区别及工作流程,解释了Last-Modified与Etag的差异,并讨论了不同刷新方式对缓存的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、浏览器请求服务器的整个流程

       浏览器输入URL,浏览器作为HTTP请求发起的客户端,首先会找到本机的hosts文件中有没有IP和域名的映射关系,没找到先请求本地的DNS域名解析服务器,也就是配置宽带时候设置的DNS,一般是8.8.8.8或者114.114.114.114。如果本地DNS服务器没找到就将这个域名往根DNS域名解析服务器(也可以设置不直接请求根DNS服务器,而是采用就近原则,逐层往上抛)上丢,逐层去解析域名,一旦解析成功就返回对应的IP地址,浏览器再去请求对应的IP地址+端口,得到响应。

Alt

       DNS服务器的分布式架构与下图所示:

Alt



二、基于TCP/IP的应用层协议

       拿微服务架构举例子,A服务通过RPC调用B服务,A服务的数据需要沿着TCP/IP的四个分层逐层地往下传输每层都需要在数据上添加首部,到达链路层则通过网线、光纤等介质直接进行传输,B服务则从链路层的数据帧逐层往上传输逐层地去掉首部,直到到达B服务的应用层。

Alt


三、URI、URL、URN

       URI:Uniform Resource Identifier,统一资源标识符
       URL:Uniform Resource Locator,统一资源定位符
       URN:Uniform Resource Name,统一资源

       URI包括URL和URN,
       URN相当于只是一个人的名字,URL就等于这个人的住所,可以用过URL找到这个人。

       URI和URL的唯一区别仅仅是提供的访问机制(协议)不同,换句话说URL提供了协议,而URI则不一定。

       举例:https://www.baidu.com就是URL同时也是URI,而www.baidu.com仅仅只是URI不是URL。

Alt



四、HTTP的缓存机制

       这段时间,正好师姐在看前端的面经,其中就提到HTTP缓存,所以特意来了解了一下。

       HTTP缓存可以分别为强缓存和协商缓存。强缓存可以理解为当强缓存的属性和协商缓存的属性都有效的时候,强缓存处在一个强势地位,即不会对服务器发起人和请求,直接从缓存中拿资源。

Alt

1、强缓存

       利用请求头中的expires/cache-control:max-age属性决定客户端是否需要再发请求给服务器,如果还没到期直接从本地缓存中拿静态资源。


2、协商缓存

       当用户第一次请求某个资源的时候,服务端会传回Last-Modified或者Etag(两个都代表服务端中资源最后次更新的时间),用户每次请求(还是会请求服务器判断资源是否是最新的)的时候会带上If-Modified-Since(带的值就是第一次服务器返回的Last-Modified属性)或者If-None-Match(带的值就是第一次服务器返回的Etag属性),如果这一对属性对不上,就重新去服务端下载资源,如果对上了直接从缓存中获取资源。


3、Last-Modified和Etag区别

       ① Last-Modified这个属性只能精确到秒级别,也就是说如果服务器的资源文件在一秒内变化多次,客户端是无法正确感知的。而Etag是服务器通过加密算法实现的,只要资源文件有一丁点变化,这个值会立刻改变。

       ② 服务器仅仅只是打开了这个资源文件且不做任何修改,那服务器的Last-Modified的属性也会发生变化。


4、F5和Ctrl+F5发生的事情

       ① 按下F5刷新页面之后,请求头中的cache-control:max-age属性类似就变为0这种感觉了,也可能完全丢掉了这个属性,此时协商缓存的属性起作用,但是强缓存被跳过了。

       ② 当按下Ctrl+F5的时候,请求头中的cache-control会变为no-cache状态,即虽然还是使用缓存,但是每次都会请求服务器当前资源是否为最新的。PS:此时猜测请求头中的If-Modified-SinceIf-None-Match这两个会发生变化,导致两个属性对不上,那会重新从服务器下载资源,既跳过了强缓存,又跳过了协商缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值