如果您已经拥有资源,为什么要将 ETag 设置为必须要求?

2023-12-21

为什么要将 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(条件获取)

  1. 当您进行 API 调用时,响应标头包含一个 ETag,其值是 API 调用中返回的数据的哈希值。您存储此 ETag 值以供下一个请求使用。
  2. 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?

  • 使用条件 GET 请求的主要原因是减少数据流量。

这不就是为了限制资源吗?

No...

  • You can ask an API for multiple resources in one request.
    • (好吧,这也通过保存其他请求来限制资源。)
  • 当客户端认为资源不存在时,您可以阻止方法(例如 PUT)修改现有资源(替换保护)。

有或没有我都可以获得资源吗?

当您忽略“必须使用条件 GET”时,(a) 流量将会增加,(b) 您会丢失来自服务器端的“资源已更改”指示。您必须在客户端实现比较处理:第二个请求的资源是否比第一个请求的资源新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果您已经拥有资源,为什么要将 ETag 设置为必须要求? 的相关文章

  • iOS 上的多个 HTTP 请求与单个 TCP 连接

    我正在开发一个 iPhone 应用程序 它使用我控制的基于 Web 的 API 连接到持续打开的 TCP 端口并通过 TCP API 发出请求 或者为我想要获取的所有数据发出新的 HTTP 请求 会更快或更高效吗 我认为差异可以忽略不计 但
  • AngularJS 和 Apiary.IO - 无法读取任何响应标头?

    我使用 Apiary io 模拟我的 API 但不知怎的 我无法使用 angularJS 从响应对象中读取任何标头 我确信我至少通过检查 firebug 正确设置了 Content Type application json Angular
  • 如何使用继承来建模 RESTful API?

    我有一个需要通过 RESTful API 公开的对象层次结构 但我不确定我的 URL 应该如何构建以及它们应该返回什么 我找不到任何最佳实践 假设我有从动物继承的狗和猫 我需要对狗和猫进行CRUD操作 我还希望能够对一般动物进行手术 我的第
  • Yammer API 限制

    Yammer Rest api 文档表示 每个应用程序每个用户在 10 秒内最多可以发出 10 个请求 问题 什么是user这里 是为当前经过身份验证的 yammer 用户发出请求的 IP 地址还是承载令牌 如果我们所有的用户都使用相同的外
  • RestSharp RestClient的默认超时值是多少?

    任何人都知道默认超时值休息锐利 https github com restsharp 休息客户端 RestSharp 在底层使用 HttpWebRequest 它有一个默认超时 https msdn microsoft com en us
  • 将 SoapUI 请求转换为 CFHTTP

    我正在 SoapUI 中查看一个将标头信息发送到特定端点的请求 但我很难在 ColdFusion 中重新创建它 下面是 RAW 请求在 SoapUI 中的样子 gt gt GET https test 01 mywebsite com da
  • Android - API 请求

    我开发了一个应用程序 它也在 iPhone 上 问题出在 api 请求上 我为所有请求设置了超时 有时会出现 30 60 秒的中断 看起来这个应用程序执行了几个请求 然后就中断了 一直超时 大约 45 秒后一切正常 不知道是服务器问题还是安
  • 带点 (.) 的 Spring MVC @PathVariable 被截断

    这是问题的延续Spring MVC PathVariable 被截断 https stackoverflow com questions 3526523 spring mvc pathvariable getting truncated S
  • 面向服务的架构 - AMQP 或 HTTP

    一点背景 非常大的整体 Django 应用程序 所有组件都使用相同的数据库 我们需要分离服务 以便我们可以独立升级系统的某些部分而不影响其余部分 我们使用 RabbitMQ 作为 Celery 的代理 现在我们有两个选择 使用 REST 接
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • UNIX/MacOS 上静态文件的“临时 Web 服务器”?

    是否有一个像小型网络服务器这样的东西 我可以从命令行调用它 只从本地文件系统获取文件并通过特定端口上的 HTTP 为它们提供服务 我希望能够做这样的事情 cd Sites mysite serve 10 0 1 1 8080 这应该会启动一
  • HTTP Header Key 可以重复吗?

    在 JAVA HttpUrlConnection 中 请求 Header 设置的主要逻辑代码如下 public synchronized void set String k String v for int i nkeys i gt 0 i
  • 我可以使用 HTTP 范围标头“有意”加载部分文件吗?

    我正在研究 HTTP 范围标头 specs http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 16 据我了解 我可以设置文件的字节范围ala 0 199 2000 200
  • 如何绕过 ASP.NET Web API 中发现多个操作的异常

    当试图找到以下问题的解决方案时 默认操作的 MVC Web Api 路由不起作用 https stackoverflow com questions 11724749 mvc web api route with default actio
  • symfony api 平台深度

    到目前为止 我们一直在 Symfony Doctrine 和 Serializer 深度方面苦苦挣扎 我希望能够使用 Symfony 提供一级深度的 JSON REST API 从而允许我直接从视图管理我的 外键 和关系逻辑 GET peo
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • 使用 HttpClient 时,为什么服务器响应中省略了 Content-Length 标头?

    我正在使用这个问题的源代码如何异步执行httprequest并显示下载响应的进度 https stackoverflow com questions 9594318 how to asynchronous perform a httpreq
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 注册期间现有电子邮件的 422 或 409 状态代码

    我正在构建 RESTful API 遇到了一种情况 在用户注册期间 如果电子邮件已存在 则在422 and 409哪个http响应代码有意义 我浏览过类似的one https stackoverflow com questions 9269

随机推荐

  • 如何生成可重复的随机数序列?

    我想要一个可以生成伪随机值序列的函数 但该序列每次运行都是可重复的 我想要的数据必须在给定范围内相当好的随机分布 它不一定是完美的 我想编写一些代码 根据随机数据对其运行性能测试 我希望每台机器上的每次测试运行的数据都相同 但由于存储原因
  • 将内容文件存入带换行符的 unix 变量中

    我有一个文本文件 test txt 其中包含以下内容 text1 text2 我想将文件的内容分配给 UNIX 变量 但是当我这样做时 testvar cat test txt echo testvar 结果是 text1 text2 代替
  • 使用 Graph Api 针对租户进行角色计数

    有没有办法找到每个role存在反对tenant and number of users已分配给每个role using GraphServiceClient or GraphConnection班级 我正在使用 C 目录角色 查找租户的所有
  • Windows 中的 Jenkins 以俄语显示 UI

    我来自乌克兰 当我在浏览器中打开 Jenkins 时 我看到所有用户界面都是俄语的 我在 Windows 上运行 Jenkins 但是 Windows 配置 区域和设置 中没有俄语 格式 英语 美国 地点 美国 只有时区是乌克兰语 UTC
  • 如何在 UITabBarController 中插入 UINavigationController

    如何插入UINavigationController inside UITabBarController 目前我有主要UITabBarController像这样在应用程序委托内声明 所以选项卡是主要的 self window rootVie
  • 如何在 r markdown 中将 kable 和 ggplot 对齐在一行(并排)?

    我正在尝试编织一个 r markdown 文件pdf 但我无法将 ggplot 和 kable 对齐在一行中 我尝试过以下方法 猫 双列 kable styling 位置 float right 下面是一个最小的 可重现的示例 title
  • 从 Jenkinsfile 中的共享库导入类

    我有一个具有以下结构的共享库存储库 root src com company DeploySteps groovy vars MainDeploySteps groovy 该库通过 Jenkinsfile 导入到作业中 如下所示 libra
  • 保存后显示相同页面

    我想显示一个带有某些字段 示例中的一个 的表单 提交它 保存并显示同一页面并重置所有字段 当我提交问题时 我执行 保存 操作 但是当我显示视图时 表单仍然被填写 该模型 public class TestingModel public st
  • 多个已编译的 linq 查询可以链接在一起吗?

    我正在尝试将多个已编译的 linq 查询链接在一起 我已经成功地将两个查询链接在一起 但我无法让三个查询链正常工作 因此 这里减少了我的代码以重现问题 我的两个问题是 为什么这不起作用 以及 是否有更好的方法来保持编译查询的性能优势并避免重
  • 如何在 PHP Web 应用程序中实现 Mozilla DeepSpeech 以将语音转换为文本?

    我有一个 PHP Web 应用程序 正在寻找一种开源 高精度的语音到文本识别实现 该实现将采用语音命令来打开用户的网页 例子 进行销售 这将打开创建销售 PHP 页面 下达采购订单 打开日终报告 etc 我的问题 我想知道我们是否可以使用M
  • 如何使用代表点对复杂形状进行建模?

    我想将该图像中的白色像素数量减少到输出图像中的一些候选点或代表点 目标是对不同类型的形状进行建模 如果您只是将输出图像中的灰点连接在一起 您将拥有相同的路径 但白色像素较少 这条路径应该只有一个起点和一个终点 并且涵盖从起点到终点的所有路径
  • GDB未知目标异常(在64位环境下调试32位目标时)

    我想使用 64 位版本的 MinGW w64 x86 64 w64 mingw32 提供的 GDB 调试器来调试使用 32 位版本的 MinGW w64 x86 64 w64 mingw32 创建的 32 位目标 根据在 64 位环境中使用
  • GSON 未以 UTF-8 发送

    以下方法发送 JSON 回复 然而 在接收端 我不断收到无效字符 并且 UTF 8 无法解码数据 我究竟做错了什么 对客户端的响应 数据输出流 Get the client request clientRequest new Buffere
  • Android oreo 在白色圆形内显示图标

    我的 Android 应用程序在 Android oreo 版本上显示白色圆圈内的启动器图标 我想显示启动器图标 因为默认情况下它在奥利奥设备上是方形的 浏览了各种博客 发现 1 移动用户可以从主屏幕设置屏幕更改图标类型 但我不想要 我想默
  • getElementById 的 Javascript 简写

    JavaScript document getElementById 是否有简写 或者有什么方法可以定义一个吗 它会重复重新输入over and over var function id return document getElement
  • C# 中的自动属性是什么?它们的用途是什么?

    有人可以对 C 中的自动属性及其用途提供一个非常简单的解释吗 也许还可以提供一些示例 请尽量用通俗易懂的语言来表达 拜托 当属性访问器中不需要附加逻辑时 将使用自动属性 该声明看起来像这样 public int SomeProperty g
  • Jersey 不支持嵌套资源中的声明性超链接,这是否正确?

    public class Widget Ref resource WidgetResource class URI url public URI getUrl return url public Wonkle getWonkle retur
  • 匹配函数来匹配多个值

    我有两列 Column A Column B Apple A banana B Grape C Apple D Banana F 现在我想找到有数据的行的行号Apple D 他们的使用方式是Match函数获取行号 你可以使用这个 LOOKU
  • Jqgrid 数据类型从数组本地加载

    在我询问如何在从本地 js var 刷新下划线数据后重新应用工具栏过滤器时在这里问 https stackoverflow com questions 12983215 alternative to jqgrid triggertoolba
  • 如果您已经拥有资源,为什么要将 ETag 设置为必须要求?

    为什么要将 ETag 设置为 必须要求级别 您在 ETag 返回之前获取资源 我正在开发一个项目 其中我是向服务器发送 HTTP 请求的客户端 该服务器返回带有 ETag 的 HTTP Cache Control 标头来缓存响应 其中在每个