HTTP协议之ETag字段

    整理者:华科小涛:http://www.cnblogs.com/hust-ghtao/

    前段时间参加某公司的面试,问我ETag字段,当时说的不是很清楚,找了些资料,整理为此篇。

    简单ETag即类似于资源实体的指纹,并且他们能够被快速地被比较,以确定两个版本的资源是否相同。ETag的比较只对同一个URL有意义——不同 URL上的资源的ETag值可能相同也可能不同,从他们的ETag的比较中无从推断。

    首部字段ETag能告知客户端实体标识。它是一种可将资源以字符串做唯一性标识的方式。服务器会为每份资源分配对应的ETag值,当资源更新时,  ETag值也需要更新。生成ETag常用的方法包括对资源内容使用抗碰撞散列函数,使用最近修改的时间戳的哈希值,甚至只是一个版本号。

     在典型用法中,当一个URL被请求,Web服务器会返回资源和其相应的ETag值,它会被放置在HTTP的“ETag”字段中:

   1: ETag: "686897696a7c876b7e"

然后,客户端可以决定是否缓存这个资源和其ETag。以后,如果客户端想再次请求相同的URL,将会发送一个包含已保存的ETag和“If-None-Match”字段的请求。

   1: If-None-Match: "686897696a7c876b7e"

    客户端请求之后,服务器可能会比较客户端的ETag和当前版本资源的ETag。如果ETag值匹配,这就意味着资源没有改变,服务器便会发送回一个极短的响应,包含HTTP “304 未修改”的状态。304状态告诉客户端,它的缓存版本是最新的,并应该使用它。

然而,如果ETag的值不匹配,这就意味着资源很可能发生了变化,那么,一个完整的响应就会被返回,包括资源的内容,就好像ETag没有被使用。这种情况下,客户端可以用新返回的资源和新的ETag替代先前的缓存版本。

时间: 2024-12-19 09:26:44

HTTP协议之ETag字段的相关文章

Http协议中常用字段总结(不定时完善中)

1.Http协议概述 关于Http协议的发展,各种资料有很多,在此不再赘述,不明白的小伙伴儿可以去搜一下,Http报文分为请求报文和相应报文,由于Http是面向文本的,因此在报文中的每一个字段都是一些ASCII码,下图是摘自谢希仁第五版<计算机网络>的图片,本文按照这两种分类对报文头的字段进行一下汇总说明. 资料都是从给位大神那里获取到的,我只是负责汇总而已~ 2.Http请求报文 如上图(a)中为请求报文格式,分为请求行.首部行和实体主体(本文对实体主体不做说明,下同): 2.1 请求行 请

003::每天五分钟入门TCP/IP协议栈::IP协议之TOS字段说明

从IP首部看ToS的位置:ToS即为服务类型,只有当网络设备能够支持(能够识别IP首部中的ToS字段)识别ToS字段时,这给字段设置才有意义.否则都是空谈. 先说具体字段的意义:Tos字段长度为8bit前3bit字段:为优选权子字段,现在已经废弃,这个字段默认值是000,从wireshark抓包结果看,表示的是: 大部分IP首部中的ToS字段的8bit字段中,前三个子字段默认值是000,默认填充为000.但是在一些特定的场景,例如OSPF协议中网络设备之间交互OSPF相关数据,该字段是有用的:

HTTP协议Keep-Alive模式详解和HTTP头字段总结

1.什么是Keep-Alive模式? 我们知道HTTP协议采用"请求-应答"模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HTTP协议为无连接的协议):当使用Keep-Alive模式(又称持久连接.连接重用)时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接. http 1.0中默认是关闭的,需要在http头加入"

DNS 中的协议字段详细定义

DNS中的协议字段定义 Table of Contents 1 概述 2 DNS Classes 3 DNS OpCodes 4 DNS RCODEs 5 DNS Label Types 6 DNS资源记录 7 EDNS Version 8 DNS EDNS0 Option Codes (OPT) 1 概述 总结DNS协议中各字段的取值 2 DNS Classes Decimal Name Reference 0 Reserved RFC6895 1 Internet(IN) RFC1035 2

HTTP协议头部与Keep-Alive模式详解(转)

转自:http://a280606790.iteye.com/blog/1095085 http1.1 中怎么打开持久连接,怎么关闭,怎么传输数据(确定本次数据是否传输完毕) 1.什么是Keep-Alive模式? 我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HTTP协议为无连接的协议):当使用Keep-Alive模式(又称持久连接.连接重用)时,Keep-Alive功能使客户端到服

HTTP协议头部与Keep-Alive模式详解

1.什么是Keep-Alive模式? 我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HTTP协议为无连接的协议):当使用Keep-Alive模式(又称持久连接.连接重用)时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接. http 1.0中默认是关闭的,需要在http头加入"Connectio

http协议头分析

http协议头各个域解析: 请求头的方法有GET, POST , PUT ,DELETE,等.GET用来请求数据,POST还提交数据. 状态码:  1xx 表示请求被接受,正在处理中. 200 ok 表示请求被接受,处理. 301  表示页面被重定向,客户端根据给出的重定向链接再次请求 304 表示页面没有修改,这是在使用ETAG字段时,服务器对比之后发送未修改的状态码. 401 表示身份验证错误,需要登录信息. 403 表示请求被拒绝,用户没有权限. 404 表示请求的资源不存在 500 表示

http2协议翻译(转)

超文本传输协议版本 2 IETF HTTP2草案(draft-ietf-httpbis-http2-13) 摘要 本规范描述了一种优化的超文本传输协议(HTTP).HTTP/2通过引进报头字段压缩以及多路复用来更有效利用网络资源.减少感知延迟.另外还介绍了服务器推送规范. 本文档保持对HTTP/1.1的后向兼容,HTTP的现有的语义保持不变. 1 介绍 The Hypertext Transfer Protocol (HTTP) is a wildly successful protocol.

通用轻量级二进制格式协议解析器

在通信协议中,经常碰到使用私有协议的场景,报文内容是肉眼无法直接看明白的二进制格式.由于协议的私有性质,即使大名鼎鼎的 Wireshark,要解析其内容,也无能为力. 面对这种情况,开发人员通常有两个办法:第一,对照报文内容和协议规范进行人工分析(假设内容没有经过加密.压缩):第二,编程实现协议报文的解析(源于程序员的懒惰 ^_^). 很明显,第二条道路是主流.目前比较常见的实现方式是开发对应的 Wireshark 插件,包括 C.Lua 等插件.当然,插件完成后需要运行 Wireshark 才