zoukankan      html  css  js  c++  java
  • 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替代先前的缓存版本。

  • 相关阅读:
    2018爆零记第二弹之day0
    2018NOIP爆0记第一弹
    图论中偶然发现的一个问题
    [SCOI2010]序列操作
    CF 675E Trains and Statistic
    CF100015C
    Python 使用 NLTK 实现简单情感分析--Twitter(推特)分析
    pipenv -- python 搭建虚拟环境
    Python
    ElasticSearch 入门教程
  • 原文地址:https://www.cnblogs.com/hust-ghtao/p/4796828.html
Copyright © 2011-2022 走看看