加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 使用HTTP范围标题与字节之外的范围说明符?

发布时间:2020-12-16 03:08:54 所属栏目:百科 来源:网络整理
导读:核心问题是使用HTTP头,包括 Range, If-Range, Accept-Ranges和用户定义的范围说明符。 这是一个制造的例子来帮助说明我的问题。假设我有一个Web 2.0样式的应用程序显示某种可读的文档。这些文件被编入分页(类似于您在新闻网站上看到的文章)。对于这个例子
核心问题是使用HTTP头,包括 Range, If-Range, Accept-Ranges和用户定义的范围说明符。

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

>有一个标题为“HTTP范围问题”的文档分为三页。
> shell页面(/ document / shell / http-range-question)知道有关文档的元信息,包括页数。
>文档的第一个可读页面通过ajax GET在页面onload事件中加载并插入页面。
>一个UI控件看起来像[1 2 3全部]在页面的底部,点击一个数字将显示可读页面(也通过ajax加载),然后单击“全部”将显示整个文档。假设这些URLS为1,2,3和所有用例:

> / 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范围标头代替URL的一部分(例如querystring参数)吗?在GET / document / content / http-range-question请求中可能是这样的:

Range: page=1

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

Range: bytes=0-499

任何意见或真实世界范例的定制范围说明符?

更新:我找到了一个类似的关于Range头(Paging in a Rest Collection)的问题,他们提到Dojo的JsonRestStore使用自定义的Range头值。

Range: items=0-24
绝对 – 你可以自由地指定你喜欢的范围单位。

从RFC 2616:

3.12 Range Units

HTTP/1.1 allows a client to request
that only part (a range of) the
response entity be included within the
response. HTTP/1.1 uses range units
in the Range (section 14.35) and
Content-Range (section 14.16)
header fields. An entity can be broken
down into subranges according to
various structural units.

06000

The only range unit defined by
HTTP/1.1 is “bytes”. HTTP/1.1
implementations MAY ignore ranges
specified using other units.

关键是最后一段。真正在说的是,当他们为HTTP / 1.1编写规范时,他们只列出了“字节”标记。但是,从“其他范围单位”位可以看出,您可以自由地提出自己的令牌说明符。

提出您自己的Range说明符确实意味着您必须控制使用该说明符的客户端和服务器代码。所以,如果你拥有公开“/ document / content / http-range-question”URI的后台,那么你很好大概你使用的是一个现代化的Web框架,可以让你检查出来的请求头。你可以查看范围值来正确地执行支持查询。

此外,如果您控制AJAX代码来请求后端,您应该可以自己设置Range标头。

但是,您有预期的潜在缺点:您可能会发现缓存缓存的可能性。如果您使用自定义范围单位,则客户端和源服务器之间的任何高速缓存可能忽略使用[单位而不是’bytes’]指定的范围。所以例如,如果您在前端和后端之间有一个Squid / Varnish缓存,则不能保证您希望的结果将从缓存中提供!

您也可以考虑使用另一种实现方式,而不是使用查询字符串,使页面成为URI的“参数”;例如:/ document / content / http-range-question / page / 1。这可能会对您的服务器端有一些更多的工作,但它符合HTTP / 1.1,并且缓存应该正确对待。

希望这可以帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读