HTTP协议常用字段

HTTP 协议中的 Transfer-Encoding这里写链接内容

http 304优化,了解客户端缓存

使用HMTL5 API监控前端性能

前端工程精粹(一):静态资源版本更新与缓存
浏览器缓存和304的冲突问题

状态码

100-199
200-299 成功
300-399 重定向,服务器资源被移除
400-499 客户端错误
500-599 服务器程序处理错误

HTTP协议详解(真的很经典)

常用字段

简介

 ETAG在HTTP协议中的定义是资源实体的标记(entity tag),强标识一个资源。是缓存过期的一种代替方案(IF-MODIFIED-SINCE,IF-UNMODIFIED-SINCE)。服务器端资源一旦改变,ETAG值需要跟着改变。但是协议没有规定ETAG的计算方法,可以任意实现。一般对应静态资源(静态URL或文件)采用MD5摘要方式较好。

ETAG与IF-MATCH,IF-NONE-MATCH配合实现缓存方案,代替IF-MODIFIED-SINCE,IF-UNMODIFIED-SINCE(另外)

资源(Resource):URL唯一标识的资源,一个URL对应一个资源。

实现原理
服务器端创建资源,生成ETAG,每次修改也更新ETAG。
客户端首次访问资源,服务器返回资源实体内容和在头区中返回ETAG值,客户端保存实体内容和ETAG值。
客户端再次访问资源的时候,在头域(header)中加入“If-match:etag值”指令。
服务器接受到请求后,检查资源的ETAG值是否与请求的If-match指定的etag值相同(强匹配),如果匹配则响应304 Not Modified,表示资源未改变,客户端可以直接使用前面请求中保存的资源,如果不匹配才返回资源实体(entity,也就是body体).或者:客户端再次访问资源的时候,在header中加入“If-None-Match:etag值”,如果服务器的ETAG值匹配客户端请求 的etag值则返回412,表示条件冲突,不匹配则返回实体内容。
客户端继续使用缓存的资源。
If-Match:匹配则返回实体内容,否则响应307,不返回实体内容。
If-None-Match:不匹配则返回实体内容,否则响应412错误。

ETag比Last-Modified和 Expires 的优势
Last-Modified和Expires都是时间作为判断资源是否改变的标志存在一些隐患。
在秒级以内多次修改,Last-Modified和Expires无法表示出来,因为Last-Modified和Expires最小粒度为秒级。
对资源多次修改,但是最后又修改回最初的内容,实际上内容并没有改变。
ETag值是根据实际内容变更才更新,所以可以更准确的标志资源。

实际应用

云存储中最为文件的tag,标记文件是否改变。一般使用MD5判断文件是否改变,也可以直接使用MD5值作为ETAG值。
问题:对大文件,修改一小部分内容后,更新ETAG,从新计算MD5,效率太低,解决方案啊~?

Expires头

什么是Expires头?

Expires存储的是一个用来控制缓存失效的日期。当浏览器看到响应中有一个Expires头时,它会和相应的组件一起保存到其缓存中,只要组件没有过期,浏览器就会使用缓存版本而不会进行任何的HTTP请求。Expires设置的日期格式必须为GMT(格林尼治标准时间)。

HTTP1.1协议中缓存的另一种选择

Expires存在着明显的不足。

首先,Expires头使用的是一个特定的时间,要求客户端和服务器端的时钟严格同步。何为严格同步?我们知道客户端的时间是可以修改的,如果服务器和客户端的时间不统一,这就导致有可能出现缓存提前失效的情况,存在不稳定性。其次,假如Expires的日期到来了,那么还需要在服务器配置中提供一个新的日期。

面对这种情况,HTTP1.1引入了Cache-Control头来克服Expires头的限制。Cache-Control使用max-age制定组件被缓存多久,使用秒为单位,例如Cache-Control:max-age=3600;表示组件将被缓存60分钟。如果max-age和Expires同时出现,则max-age有更高的优先级,浏览器会根据max-age的时间来确认缓存过期时间。

问题:

使用永久强缓存后(静态文件末尾添加md5戳),设置Expires为未来时间,但是静态文件还会出现304,如果让浏览器直接使用缓存。

工具

代理工具 :

charles
filldder

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值