HTTP性能优化与认证机制全解析
1. ETag机制
ETag(实体标签)是一种比Last - Modified更易实现且能避免一些竞态条件的策略。ETag头包含一个无意义的字符串,当对应的资源表示发生变化时,该字符串必须改变。
示例HTTP响应包含ETag:
HTTP/1.1 200 OK
Content-Length: 44181
Content-type: text/html
ETag: "7359b7-a37c-45b333d7"
<html>
...
当客户端再次请求同一资源时,会将 If - None - Match 头设置为原始响应中获得的ETag:
GET /some-resource HTTP/1.1
If-None-Match: "7359b7-a37c-45b333d7"
如果 If - None - Match 中的ETag与资源当前的ETag相同,服务器将发送304(未修改)状态码和空的实体主体;如果资源表示已更改,服务器将发送200(OK)状态码、完整的实体主体和更新后的ETag。
与Last - Modified需要跟踪大量时间戳不同,生成ETag无需跟踪额外数据,例如可以使用MD5哈希将任意字节字符串转换为唯一的短字符串。但在运行这些转换时,实际上已经创建了资源表示的字节字符串,若要使用ETag节省时间,需要缓存资源表示的ETag,并在资源表示更改时使缓存失效。
Last - Modified和ETag都支持条件请求
超级会员免费看
订阅专栏 解锁全文
2285

被折叠的 条评论
为什么被折叠?



