ajax – 使用HTTP范围标题与字节之外的范围说明符?
核心问题是使用HTTP头,包括
Range,
If-Range,
Accept-Ranges和用户定义的范围说明符。
这是一个制造的例子来帮助说明我的问题。假设我有一个Web 2.0样式的应用程序显示某种可读的文档。这些文件被编入分页(类似于您在新闻网站上看到的文章)。对于这个例子,假设: >有一个标题为“HTTP范围问题”的文档分为三页。 > / document / content / http-range-question?page = 1 现在问题了。我可以使用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:
关键是最后一段。真正在说的是,当他们为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,并且缓存应该正确对待。 希望这可以帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |