使用带有范围说明符而不是字节的 HTTP 范围标头?

2024-01-26

核心问题是关于HTTP headers的使用,包括Range http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35, If-Range http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.27, 接受范围 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.5和用户定义的范围说明符。

这是一个制造的例子来帮助说明我的问题。假设我有一个 Web 2.0 风格的应用程序,它显示某种人类可读的文档。这些文档在编辑上分为多个页面(类似于您在新闻网站上看到的文章)。对于此示例,假设:

  • 有一个名为“HTTP Range Question”的文档分为三页。
  • 外壳页面 (/document/shell/http-range-question)知道有关文档的元信息,包括页数。
  • 文档的第一个可读页面在页面加载事件期间通过 ajax GET 加载并插入到页面上。
  • A UI control that looks like [ 1 2 3 All ] is at the bottom of the page, and clicking on a number will display that readable page (also loaded via ajax), and clicking "All" will display the entire document. Assume these URLS for the 1, 2, 3 and All use cases:
    • /document/content/http-range-question?page=1
    • /document/content/http-range-question?page=2
    • /document/content/http-range-question?page=3
    • /document/content/http-range-question

现在回答问题。我可以使用 HTTP Range 标头代替 URL 的一部分(例如查询字符串参数)吗?也许类似这样的事情GET /document/content/http-range-question要求:

Range: page=1

看起来规范只定义了允许的字节范围,所以即使我让我的 ajax 调用与我的浏览器和服务器代码一起工作,中间的任何内容都可能会破坏合同(例如缓存代理服务器)。

Range: bytes=0-499

自定义范围说明符有什么意见或现实世界的例子吗?

Update:我确实发现了有关 Range 标头的类似问题(Rest 集合中的分页 https://stackoverflow.com/questions/924472/paging-in-a-rest-collection)他们提到 Dojo 的JsonRestStore http://docs.dojocampus.org/dojox/data/JsonRestStore使用自定义 Range 标头值。

Range: items=0-24

绝对 - 您可以自由指定您喜欢的任何范围单位。

来自 RFC 2616:

3.12 范围单位

HTTP/1.1 允许客户端请求 这只是部分(一系列)
响应实体包含在 回复。 HTTP/1.1 使用范围单位 在范围内(第 14.35 节)和 内容范围(第 14.16 节)
标头字段。实体可以被破坏 根据 各种结构单元。

  range-unit       = bytes-unit | other-range-unit
  bytes-unit       = "bytes"
  other-range-unit = token

唯一定义的范围单位 HTTP/1.1 是“字节”。 HTTP/1.1
实现可以忽略范围 使用其他单位指定。

关键部分是最后一段。实际上,它的意思是,当他们编写 HTTP/1.1 规范时,他们只概述了“字节”标记。但是,正如您从“其他范围单位”位中看到的那样,您可以自由地提出自己的标记说明符。

提出您自己的范围说明符确实意味着您必须控制使用该说明符的客户端和服务器代码。因此,如果您拥有公开“/document/content/http-range-question”URI 的后端部分,那么您就可以开始了;假设您正在使用现代 Web 框架,该框架可让您检查传入的请求标头。然后您可以查看 Range 值以正确执行后备查询。

此外,如果您控制向后端发出请求的 AJAX 代码,您应该能够自己设置 Range 标头。

但是,您在问题中预计存在一个潜在的缺点:可能会破坏缓存。如果您使用自定义范围单位,则客户端和源服务器之间的任何缓存“可能会忽略使用[‘字节’以外的单位]指定的范围”。例如,如果您在前端和后端之间有一个 Squid/Varnish 缓存,则无法保证您希望的结果将从缓存中提供!

您还可以考虑另一种实现,而不是使用查询字符串,而是将页面设置为 URI 的“参数”;例如:/document/content/http-range-question/page/1。对于服务器端来说,这可能会需要更多工作,但它符合 HTTP/1.1 标准,并且缓存应该正确处理它。

希望这可以帮助。

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

使用带有范围说明符而不是字节的 HTTP 范围标头? 的相关文章

  • 如何从 GridView TemplateColumn 单击触发 UpdatePanel?

    我有以下情况 我的所有控件都在页面上的更新面板上 这些控件之一是 GridView 该 GridView 在标题模板字段上包含一个复选框 以进行全部选中 autopostback 是 true 但是当检查更改时 没有任何更改 更新面板会触发
  • 我如何知道用户是否单击了“后退”按钮?

    我正在使用锚点来处理 ajaxy 网站的唯一 url 但是 我想在用户点击浏览器的 后退 按钮时重新加载内容 以便内容始终与网址匹配 我怎样才能实现这个目标 当用户单击 后退 时是否会触发 jQuery 事件 您需要使用 hashchang
  • jQuery mCustomScrollbar 不适用于 ajax 内容

    window load function content 1 mCustomScrollbar scrollButtons enable true ajax code function beauty of ceylon content te
  • 从 HTML 字符串中解析和选择

    使用 ajax 调用 我返回了页面的partialView HTML 但在显示它之前 我希望从主 div 中提取信息 如果我创建一个浮动窗口 该数据只是大小信息 Code div class window details more data
  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 对于较大的请求正文,Nginx proxy_cache_key $request_body 将被忽略

    我使用 nginx 作为反向代理 我希望它能够缓存 POST 请求 我的后端已正确配置为为 POST 请求返回适当的缓存控制标头 在 nginx 中我配置了 proxy cache methods POST proxy cache key
  • 在 JQuery ajax 中,如何正确处理 HTTP 408 错误?

    我使用设置了 错误 选项的 JQuery Ajax 调用 在我的 错误 方法中 我希望以不同于普通 HTTP 500 的方式处理 HTTP 408 问题是 jxhr statusCode 为 0 status 值只是 error 但在 fi
  • jQuery数据表设置列设计和成功回调中的值

    我为我的数据表编写了以下代码 它用我的数据库中的内容填充表 如下所示 if datatable null datatable destroy datatable tableProducts DataTable pageLength 50 b
  • 将屏幕宽度获取到 javascript 变量中并通过 ajax 将其发送到 php 页面以避免页面加载

    这是JS检测我的页面命名上的屏幕分辨率index html并将其发送到 php 以便可以使用以下方式检索值 GET 这是我的PHP文件命名的内容process php
  • 在用户离开或关闭页面之前保存 HTML5 视频当前时间

    我想保存 HTML5 视频的位置currentTime当用户离开网页时到数据库 这好像是window onbeforeunload这不是一个可靠的方法 更不用说它会给出一个不受欢迎的弹出窗口 有一个更好的方法吗 除了定期将位置保存到服务器之
  • AJAX 进度条 - 轮询、Comet?

    我想要一些关于如何实施以下内容的建议 我想让我的用户通过 AJAX 了解在我的服务器上运行的任务的进度 我的服务器运行一个 PHP 脚本 该脚本使用 popen 函数通过 shell 命令下载文件 它定期回显 打印正在发生的事情 我想使用
  • Web API GET 请求中的电子邮件地址

    我正在开发在 ASP NET Web API 中实现的 REST API 我们想要支持的一个场景是执行GET通过电子邮件地址请求一些用户信息 理想情况下 客户应该能够执行以下操作 GET api v1 users email your em
  • 无法在 git 上获取 Http 工作

    我在拇指驱动器上使用 gitbash 作为 git 我的防火墙阻止了我 并且想设置我的 git 以进行 http 访问 我使用 github 并且已经看到了有关如何执行此操作的各种信息 但我还不够了解 无法让它为我自己工作 我在 php i
  • 使用ajax轮询服务器

    我正在建立一个网站 该网站有一个用户可以互相发送消息的系统 我希望这样当登录用户收到消息时 他会在屏幕上看到一些更新告诉他这一点 这些消息不必是实时的 所以我认为我不想用彗星或主宰之类的东西来推动 相反 我很乐意每隔一分钟左右轮询一次服务器
  • 如何对 bootstrap-3 分页进行编程以处理简单的 HTML 内容

    我正在 新闻 部分工作 并尝试使用 jquery 使 bootstrap 3 分页工作 分页的 HTML
  • HTTPbis - bis 是什么意思?

    我经常看到 bis 附加到协议版本 例如 v 34bis 或 httpbis bis 是什么意思或代表什么 我认识的一位电信工程师认为它可能起源于法国 正如其他人已经说过的 bis 来自 两次 或 重复 http oxforddiction
  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • 使用jquery和coldfusion cffile上传多个文件

    不是一个真正的问题 只是想将其发布在某个地方 因为我在其他地方找不到它 现在我已经拼凑了一个工作演示 我想我会分享 这在 Coldfusion 和 Railo CFML 服务器上同样有 效 问题是 对于 CFML 开发人员来说 CFFILE
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当

随机推荐

  • 带有 std::thread 和 std::chrono 的基本计时器

    我正在尝试使用经典方法来实现一个基本计时器 start 和 stop 我将 c 11 与 std thread 和 std chrono 一起使用 启动方法 创建一个在给定间隔时间内休眠的新线程 然后执行给定的 std function 当
  • 设置 UIView 的背景颜色会增加内存使用量

    我正在将许多 UIView 加载到 UIScrollView 上 并试图找出它们使用这么多内存的原因 经过使用 Instruments 的排除过程后 我发现设置视图的背景颜色会增加 4 倍的内存使用量 如果我不设置背景颜色 内存使用量约为
  • 上传到firebase时如何防止重复图像?

    当我想将图像上传到 firebase 实时数据库和存储 时遇到一些问题 在实时数据库中 我的图像对象默认有一张图像 并且当我上传其他图像时我不想覆盖图像所以我使用了传播运算符 SO 当我选择时一张图片并单击上传它们 它可以工作并保存 没有重
  • 更新列表列表中的属性

    问题是 如何在不循环的情况下更新 allItems 内的 ItemCount 字段 例如使用 Linq 例如 如果 Index 0 我想将 ItemCount 设置为 ItemCount 5 您可以看到下面的代码 我有以下课程 public
  • 尝试使用 LEFT OUTER JOIN 优化 MySQL 查询

    我有这个查询 它工作正常 只是需要很长时间 7 秒 jobs 表中有 40k 条记录 wq 表中有 700k 条记录 我尝试了 EXPLAIN 它说它查看作业表中的所有记录 并且不使用任何索引 我不知道如何告诉 MySQL 在查找 wq 表
  • 淘汰赛验证插件自定义错误消息

    根据以下内容 我到底如何设置回调以显示自定义错误消息而不是默认消息 ko validation rules exampleAsync async true the flag that says Hey I m Async validator
  • Pyaudio:将输入连接到输出时出错

    我正在 Intel Edison 主板上尝试 pyaudio 但它在内置测试中失败了 单独录音和播放在我的设置中工作得很好 但如果我尝试将输入连接到输出 则会出现错误 文件 wire full py 第 33 行 位于 data strea
  • 将子组件的配置传递给父组件

    通常 要定义网格类型 我会执行以下操作 Ext define MyApp view MyGrid extend Ext grid Panel alias widget myGrid store MyStore columns 然后我通过其
  • 如何在iOS App Store Sandbox中测试自动续订订阅的“续订”组件?

    Folks 我正在尝试验证自动续订订阅是否确实在沙盒环境中续订 首先 沙盒中的自动续订订阅似乎只有 5 分钟的有效期 说得通 我预计如果我等待五分钟 然后再拨打 https sandbox itunes apple com verifyRe
  • NSString 为空

    如何测试 NSString 是否为空 或全部空白或为零 通过单个方法调用 你可以尝试这样的事情 implementation NSString JRAdditions BOOL isStringEmpty NSString string i
  • 如何有效地对Delta表进行分区?

    在将数据帧存储在增量表中时 为我的数据帧寻找有效的分区策略 我当前的数据帧 1 5000 000 rowa 将数据从数据帧移动到增量表需要 3 5 小时 为了寻找一种更有效的方法来完成此写作 我决定尝试表中的不同列作为分区列 我搜索了列的基
  • Moment js - 显示距离日期还有几天和几小时

    我正在开发一个项目 需要对日期对象进行这种文本响应 1天7小时路程 需要这样 而不是 距离 31 小时 或 距离 1 天 我也在使用 moment js 因为我正在英语和德语之间进行语言切换 所以我已经利用了 moment js 语言区域设
  • Mac 上的 Docker Beta:无法使用 ip 访问 nginx 容器

    我安装了 docker beata https beta docker com https beta docker com 对于 OSX 接下来 我用这个文件创建了一个文件夹docker compose yml web image ngin
  • ggraph/ggplot2 中的手动图例 [R]

    除了这个帖子 https stackoverflow com questions 51569831 how to draw graph corresponding with its attributes in ggraph r 在这里我提出
  • Web API Core 2.2 中的延迟加载

    我遇到了延迟加载的问题 我有以下 dbcontext public virtual DbSet
  • 如何从查询字符串中获取参数值?

    如何在routes jsx文件中定义路由来捕获 firebase request key从 Twitter 的单点登录进程在从其服务器重定向后生成的 URL 中的参数值 http localhost 8000 signin k v9ifuf
  • 在 Symfony2/Twig 中使用 JavaScript

    我有一个名为 contact html twig 的视图 它有一个带有一些文本字段的表单 我想使用 javascript 来验证没有任何字段为空 以及一些其他规则 但我不知道将 js 和定义放在哪里 我也不知道如何使用 Twig 表示法调用
  • 批处理文件:从串口接收数据并将其写入txt文件

    我正在尝试通过 USB 串行端口从 Arduino 提取一些数据并将其写入 txt 文件 因此 我使用批处理文件 Windows 7 普通cmd 它发送例如 d 从 Arduino 请求所需的数据 收到 d 后 Arduino 开始向 PC
  • 在没有窗口的情况下进行屏幕截图

    我一直在研究 Son Of Grab Apple 演示 我真的很难获得没有任何窗口 只有桌面 扩展坞和菜单栏 的屏幕截图 有谁知道该怎么做 下面是一些示例代码 仅使用桌面进行屏幕截图 CFArrayRef onScreenWindows C
  • 使用带有范围说明符而不是字节的 HTTP 范围标头?

    核心问题是关于HTTP headers的使用 包括Range http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 35 If Range http www w3 org Pr