免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5304 | 回复: 10
打印 上一主题 下一主题

[C] http的ETag怎么不好用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-29 23:57 |只看该作者 |倒序浏览
看网上说,服务端假如给客户端发送一个包含ETag的包,客户端下次请求时会将ETag带上发过来。而ETag的内容,rfc中没有规定必须什么格式。
为什么自己做实验发现不起作用。服务端发了之后,客户端再次发送并没有带上ETag的串。
大家遇到过吗?

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-04-30 09:55 |只看该作者
Etag 应该不会发回来的.
因为服务器端并没有检查etag的代码.

一般情况下, etag是 header 的一部分. 当一份内容被cache后, 会根据 expire, max time, etag, 之类的信息来决定如果使用这个cache.

一般etag的使用, 应该是 client向server发起 head请求, 拿到新的etag之后, 如果跟cache中的etag不同, 就会产生新的 GET 请求.

至于 etag的格式, 我没有看过代码, 不知道是什么情况, 印象中是个 时间或 inode的 hash值, 要看具体 server的实现了.

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
3 [报告]
发表于 2014-04-30 10:42 |只看该作者
没见过~~

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
4 [报告]
发表于 2014-04-30 12:05 |只看该作者
回复 1# zhendehaoren


    ETag的使用并不是强制性的,所以客户端可以不带啊。而且如果客户端使用的是http 1.0标准,那就更不用带ETag了,http 1.1才有的ETag。
    ETag典型的应用在cache服务器上。ETag使用的流程大体如下:客户端发送请求->服务器回应(ETag),客户端再次请求(If-None-Match)->服务器根据条件进行回复。

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
5 [报告]
发表于 2014-04-30 12:11 |只看该作者
回复 2# q1208c


    你的理解是错误的,客户端肯定不会向服务器单独发送head请求来查看ETag,而是使用If-None-Match、If-Match之类的条件,来使用"condition get"。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
6 [报告]
发表于 2014-04-30 13:05 |只看该作者
回复 5# myworkstation


可能吧, 我对协议也不是太熟.

正好请教一下, 304 这个代码一般是在什么情况下发送给客户端的呢?     

论坛徽章:
0
7 [报告]
发表于 2014-04-30 14:18 |只看该作者
多谢!

ETag使用的流程大体如下:客户端发送请求->服务器回应(ETag),客户端再次请求(If-None-Match)->服务器根据条件进行回复。

这个正确,我的问题是,通过抓包发现,客户端再次请求没有发现“If-None-Match”字段 这个字段的内容实际上就是etag的串

304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
8 [报告]
发表于 2014-04-30 15:05 |只看该作者
回复 7# zhendehaoren

多谢.
   

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
9 [报告]
发表于 2014-04-30 15:23 |只看该作者
回复 7# zhendehaoren


    什么客户端?

论坛徽章:
0
10 [报告]
发表于 2014-04-30 16:17 |只看该作者
浏览器,我自己找了个开源服务器,把回复写死为301,etag,强迫浏览器再次发送If-None-Match
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP