相关疑难解决方法(0)

在休息集合中分页

我有兴趣将直接REST接口暴露给JSON文档集合(想想CouchDBPersevere).我遇到的问题是GET如果集合很大,如何处理集合根上的操作.

作为一个例子假装我暴露StackOverflow的Questions表,其中每一行都作为文档公开(不一定是这样的表,只是一个相当大的'文档'集合的具体例子).收集将在可提供/db/questions与通常的CRUD API GET /db/questions/XXX,PUT /db/questions/XXX,POST /db/questions是在玩.获取整个集合的标准方法是,GET /db/questions但如果天真地将每一行转储为JSON对象,那么您将获得相当大的下载和服务器上的大量工作.

解决方案当然是分页.Dojo 通过一个巧妙的RFC2616兼容扩展使用带有自定义范围单元的标头,在其JsonRestStore中解决了这个问题.结果是只返回请求的范围.这种方法优于查询参数的优点是它为查询留下了查询字符串(例如,或某些,以及是的,它被编码).Rangeitems206 Partial ContentGET /db/questions/?score>200%3E

这种方法完全涵盖了我想要的行为.问题是RFC 2616指定206响应(强调我的):

请求必须具有包含Range头部字段(部分14.35),指示在期望的范围,并且可以具有包括一个If-Range头字段(部分14.27),以使所述请求为条件.

这在标题使用标题的上下文中是有意义的,但是是一个问题因为我希望206响应是默认处理天真客户端/随机人员探索.

我已经仔细研究了RFC,寻找解决方案,但对我的解决方案一直不满意,并对SO对这个问题的看法感兴趣.

我有过的想法:

  • 返回200Content-Range头! - 我不认为这是错的,但我更喜欢一个更明显的指标,即响应只是部分内容.
  • 返回400 Range Required - 所需标头没有特殊的400响应代码,因此必须手动使用和读取默认错误.这也使得通过Web浏览器(或像Resty这样的其他客户端)进行探索变得更加困难.
  • 使用查询参数 - 标准方法,但我希望允许查询la Persevere,这会切入查询命名空间.
  • 回来206吧! - 我认为大多数客户都不会惊慌失措,但我宁愿不反对RFC中的MUST
  • 扩展规格!返回266 Partial Content - 行为与206完全相同,但是响应于不得包含Range …

rest pagination http http-headers

130
推荐指数
4
解决办法
3万
查看次数

Django的Byte Ranges

Django中是否存在HTTP字节范围的现有实现?即当客户端发送Range:标头时,我希望我的Django应用程序接受它并使用HTTP"206 Partial Content"响应进行回复.

我可以从头开始写东西,但肯定有人已经这样做了吗?

这有很多部分:

  1. 解析和完整性检查Range标头
  2. 实际上生成范围
  3. 支持在响应中返回单个范围
  4. 支持在单个响应中返回多个范围,适当地进行MIME编码

当然至少(1)和(4)在哪里有图书馆支持?

django http http-headers

22
推荐指数
2
解决办法
4579
查看次数

我可以使用HTTP范围标头"故意"加载部分文件吗?

我正在玩HTTP范围标题(规格).

根据我的理解,我可以设置文件ala的字节范围

0-199/2000
200-499/2000
500-799/2000
etc
Run Code Online (Sandbox Code Playgroud)

问题:
假设我只想访问文件的某些范围,是否可以指定这些范围,然后使用我收到的"不完整"数据?我正在玩过滤大型日志文件,所以我很好奇这样的事情会起作用.

感谢您的投入!

javascript filtering http range http-headers

14
推荐指数
1
解决办法
7053
查看次数

内容范围标头 - 允许的单位?

这与: 我应该如何在 RESTful Web 服务中实现 COUNT 动词?在 Rest 集合中进行分页 以及使用带有除字节之外的范围说明符的 HTTP 范围标头?

实际上我认为这里的 -1 评级 anwser 是正确的/sf/answers/100429101/

一般来说,答案说您可以使用引用 sec 3.12 的自定义单位

  range-unit       = bytes-unit | other-range-unit
  bytes-unit       = "bytes"
  other-range-unit = token
Run Code Online (Sandbox Code Playgroud)

然而,当您阅读 HTTP 规范时,请注意生产规则如下:

   Content-Range = "Content-Range" ":" content-range-spec
   content-range-spec      = byte-content-range-spec
   byte-content-range-spec = bytes-unit SP
                             byte-range-resp-spec "/"
                             ( instance-length | "*" )
Run Code Online (Sandbox Code Playgroud)

标头规范仅引用第 3.12 节中的字节单位,而不是范围单位,因此我认为实际上在这里使用自定义单位是违反规范的。

我错过了什么还是流行的答案错了?

编辑:由于这可能不清楚,我的问题的要点是:rfc2616 sec14.16 仅引用字节单位。它从未提及范围单元,因此范围单元的生成与内容范围无关,因此只能使用字节单元。

我认为这最好地解决了我的担忧,尽管我需要一些时间来理解它(而且我想确保措辞有问题)。

这反映了这样一个事实:显然,第一组语法规则是专门用于解析的,第二组是用于生成 HTTP 请求的

感谢埃尔加顿

api rest http

5
推荐指数
1
解决办法
5343
查看次数

使用c#使下载可恢复

我正在使用此方法(WebClientClass)从Internet下载文件:

private Task DownloadUpdate(string url, string fileName)
{
       var wc = new WebClient();
       return wc.DownloadFileTaskAsync(new Uri(url), @"c:\download" + fileName);
}
Run Code Online (Sandbox Code Playgroud)

如何使用上述代码使下载恢复

c# asynchronous webclient-download

5
推荐指数
1
解决办法
4664
查看次数