前言

在HTTP1.1规范中,新增了一个HTTP头信息:ETag。对于普通开发者来说,可能平时真的不会接触到该HTTP头。平时接触不到或者说用得少,不代表这个请求头不重要。ETag使用得当,是可以减少服务器带宽压力的。

什么是ETag?

Etag是 Entity tag的缩写,可以理解为“被请求变量的实体值”,Etag是服务端的一个资源的标识,在 HTTP 响应头中将其传送到客户端。所谓的服务端资源可以是一个Web页面,也可以是JSON或XML等。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。比如,浏览器第一次请求一个资源的时候,服务端给予返回,并且返回了ETag: "50b1c1d4f775c61:df3" 这样的字样给浏览器,当浏览器再次请求这个资源的时候,浏览器会将If-None-Match: W/"50b1c1d4f775c61:df3" 传输给服务端,服务端拿到该ETAG,对比资源是否发生变化,如果资源未发生改变,则返回304HTTP状态码,不返回具体的资源。

Etag实际例子讲解

我们可以通过Etag来利用浏览器的缓存,降低我们服务器的带宽压力。这是可以提升服务端的性能的(数据传输上)。七牛云的文件存储,就用到了Etag的属性。现在,我请求七牛云上的一个资源:

可以通过它的响应头看到,返回了Etag字段给我们。Etag的值为Fpl1rXE-K20cYsLu89YTzUQ3ydDk。

再次刷新资源:

此时,HTTP的状态码变成了304,304状态码表示资源未改变。查看此次的HTTP请求头,如下:

可以看到,客户端在向服务端请求资源的时候,通过If-None-Match请求头带上了之前服务端返回的Etag的值。服务端收到第二次请求的时候,发现携带了If-None-Match字段,就重新计算服务器对应资源的Etag,如果二者匹配了,就认为资源没有发生变化,直接给客户端相应304,让客户端读取缓存中的数据。

总结

本文只是对Etag做一个概念性的讲解,并且结合了七牛云的对象存储的例子,分析了Etag缓存的流程。关于Etag,还有很多东西没有深入讲解,比如Etag是怎么计算的,Last-Modified/If-Modified-Since是什么,以及Etag实战等,这些在后续再做深入的讲解吧!

etag java_你知道HTTP协议的ETag是干什么的吗?相关推荐

  1. http etag java_你应该知道的HTTP头------ETag

    在HTTP1.1规范中,新增了一个HTTP头信息:ETag.对Web开发者来说,它是一个非常重要的信息.它是用作缓存使 用的两个主要的头信息之一 (另一个是Expires).除此之外,在REST架构中 ...

  2. etag java_HTTP头信息中的参数Etag

    服务器如果是集群,不同服务器返回的HttpHeader中的Etag参数不一样.如果是图片是网络 服务器如果是集群,不同服务器返回的 Http Header 中的 Etag 参数不一样.如果是图片是程序 ...

  3. etag java_浅谈ETag

    HTTP/1.1中有一个Etag,用来判断请求的文件是否被修改.为什么要使用Etag呢?Etag主要网络 HTTP/1.1中有一个Etag,用来判断请求的文件是否被修改. 为什么要使用Etag呢?Et ...

  4. 北斗通讯协议4.0 java_北斗4.0协议讲解.doc

    北斗4.0协议讲解 北斗用户机用户接口协议 (4.0版本外用) 接口数据传输约定 串口非同步传送,参数定义如下: 传输速率:19200bit/s(默认),可根据用户机具体情况设置其它速率: 1 bit ...

  5. 北斗通讯协议4.0 java_北斗4.0协议解析.doc

    北斗4.0协议解析 北斗用户机用户接口协议 (4.0版本外用) 接口数据传输约定 串口非同步传送,参数定义如下: 传输速率:19200bit/s(默认),可根据用户机具体情况设置其它速率: 1 bit ...

  6. 北斗通讯协议4.0 java_北斗一串口协议4.0.pdf

    版本: 4.0 页数: 22 北斗一号用户机数据接口要求 集中采购业务办公室 二○○六年十一月 目 录 1. 接口形式 ········································ ...

  7. 808协议 java_基于JT/T808协议的车辆监控平台架构方案

    技术支持QQ:78772895 1.车载终端协议网关采用mina/netty+spring架构,独立于其他应用,主要负责维护接入终端的tcp链接.上行以及下行消息的解码.编码.流量控制,黑白名单等安全 ...

  8. rdp协议编程java_关于Java RDP协议实现远程桌面连接的开源项目properjavardp | 学步园...

    最近想学一下在Android平台上实现RDP协议远程连接PC,于是在网上找这方面的资料,发现了一个开源的Java RDP项目,很不错,拿出来和大家分享一下.关于properjavardp的一些说明,可 ...

  9. rdp协议编程java_关于Java RDP协议实现远程桌面连接的开源项目properjavardp

    发现了一个开源的Java RDP项目,很不错,拿出来和大家分享一下.关于properjavardp的一些说明,可以到这里看看:http://properjavardp.sourceforge.net/ ...

最新文章

  1. 【计算机网络】数据链路层 : CSMA/CD 协议 ( 载波监听多点接入 / 碰撞检测 协议 | 单程端到端传播时延 | 截断二进制指数规避算法 | 计算示例 | 最小帧长问题 )★
  2. 如何用Java做玫瑰花数_c语言如何输出玫瑰花数?(代码示例)
  3. 带有骆驼,ActiveMQ,Elasticsearch的HL7关键用例
  4. 【转载】早点长大的飞秋
  5. sqlserver2014导出mysql_sql server2014如何备份数据库-sql server2014备份数据库教程 - 河东软件园...
  6. 摸鱼一年半,我终于摸出了一篇顶会论文
  7. SylixOS学习三—— SylixOS的引导与安装1
  8. 计算机诗人 原理,写诗软件
  9. 聊一聊我常用的6种绘制地图的方法
  10. 建筑节能技术在云计算数据中心建设中的应用
  11. 刷题方法(五步刷题法)
  12. AI测试中的数据收集
  13. 机器人导航学习历程(一)简介
  14. Anemometer适应新版pt-query-digest需要的调整
  15. [架构之路-179]-《软考-系统分析师》-19- 系统可靠性分析与设计 -1- 故障模型、可靠性模型、可靠性分析
  16. 基于混沌透镜成像学习的哈里斯鹰优化算法
  17. lisp 提取字符串中的數字_lisp 提取字符串中的數字_LISP - 字符串
  18. oracle预防性维护计划,Oracle dba 日常管理
  19. iOS开发 教学白板,互动版本,画画功能实现(类似于你画我猜功能)
  20. 解析如何评估并部署Web应用防火墙

热门文章

  1. C++可变长数组vector的使用
  2. 记录一则expdp任务异常处理案例
  3. 使用DataSync迁移数据到Gaussdb T
  4. 5G时代,怎样的数据库才能满足金融领域快速发展的需求?
  5. 常用的echo和cat,这次让我折在了特殊字符丢失问题上
  6. NDPQ(NDP+PQ),定义分布式数据库新方向
  7. 上过云么?一行代码秒上云体验过么?
  8. 教你如何优雅的改写“if-else”
  9. 万字长文:解读区块链7类共识算法
  10. 【华为云技术分享】敏捷实践:一周的Sprint太短,可以调吗