为什么要将 ETag 设置为“必须要求级别”?
您在 ETag 返回之前获取资源...
我正在开发一个项目,其中我是向服务器发送 HTTP 请求的客户端,该服务器返回带有 ETag 的 HTTP Cache-Control 标头来缓存响应(其中在每个添加请求中,它都会与 If-None-Match 标头进行比较确定数据是否过时以及是否应发出新请求)。在我当前的项目中,ETags 参数使用条件 GET 架构,并具有 RFC 2119 中指定的 MUST 要求级别。
必须 这个词或术语“必需”或“应当”意味着该定义是规范的绝对要求。
我不明白使用条件 GET 和 MUST 要求级别的意图?根据我的理解,必须要求限制(对吗?)向发出请求的客户端提供的资源,但是客户端(在本例中是我)已经拥有第一个请求中的资源。我可以根据需要继续获取相同的资源(或者更新的资源,如果它已更新),无论是否返回 If-None-Match 和 ETag 标头字段。
在这种情况下,如果不限制返回的资源,除了能够缓存和限制对服务器的请求量之外,将其设置为必须要求级别的目的是什么(我从客户端的角度询问,是的)我知道我可以缓存它,但为什么必须要求)?这不就是为了限制资源吗?
所以基本上,如果我可以在有或没有它的情况下获得资源,这是否会使这个必须要求不再是一个要求?我在这里错过了什么吗?
我的问题不是询问 Etag、Cache-Control 或 If-None-Match 标头的工作原理和工作方式。
预先感谢,干杯!
如果您已经拥有资源,为什么要将 ETag 设置为必须要求?
客户端必须使用条件 GET 来减少数据流量。
除了能够缓存和限制对服务器的请求量之外
请求数量保持不变,但传输的数据总数发生变化。
Using if-none-matched GET 请求中的 ETag(条件获取)
- 当您进行 API 调用时,响应标头包含一个 ETag,其值是 API 调用中返回的数据的哈希值。您存储此 ETag 值以供下一个请求使用。
- The next time you make the same API call, you include the
If-None-Match
request header with the ETag value stored from the first step.
- If the 数据没有改变,响应状态码将是
304 – Not Modified
并且没有返回任何数据。
- If the 数据已更改自上次查询以来,数据将像往常一样使用新的 ETag 返回。游戏再次开始:您存储新的 ETag 值并将其用于后续请求。
Why?
这不就是为了限制资源吗?
No...
- You can ask an API for multiple resources in one request.
- 当客户端认为资源不存在时,您可以阻止方法(例如 PUT)修改现有资源(替换保护)。
有或没有我都可以获得资源吗?
当您忽略“必须使用条件 GET”时,(a) 流量将会增加,(b) 您会丢失来自服务器端的“资源已更改”指示。您必须在客户端实现比较处理:第二个请求的资源是否比第一个请求的资源新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)