Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails何时响应';传输编码';与';内容长度';?_Ruby On Rails_Nginx_Chunked Encoding_Content Length - Fatal编程技术网

Ruby on rails Rails何时响应';传输编码';与';内容长度';?

Ruby on rails Rails何时响应';传输编码';与';内容长度';?,ruby-on-rails,nginx,chunked-encoding,content-length,Ruby On Rails,Nginx,Chunked Encoding,Content Length,我正在Rails版本4.1.7/Nginx上构建一个API,用于响应来自iOS应用程序的请求。我们在客户端上看到了一些奇怪的缓存,我们认为这与Rails发送回的响应有一点不同有关。我的问题 1) 我想了解为什么对于完全相同的请求(仅更改了授权标头值),Rails有时会发回transfer-encoding:chunked,有时会发回Content-Length:?我认为这可能与响应大小有关,但在下面粘贴了标题的示例响应中,返回到正文中的数据完全相同 2) 有没有办法强制它使用内容长度?我们认为这

我正在Rails版本4.1.7/Nginx上构建一个API,用于响应来自iOS应用程序的请求。我们在客户端上看到了一些奇怪的缓存,我们认为这与Rails发送回的响应有一点不同有关。我的问题

1) 我想了解为什么对于完全相同的请求(仅更改了授权标头值),Rails有时会发回
transfer-encoding:chunked
,有时会发回
Content-Length:
?我认为这可能与响应大小有关,但在下面粘贴了标题的示例响应中,返回到正文中的数据完全相同

2) 有没有办法强制它使用
内容长度
?我们认为这将解决iOS应用程序中的缓存问题

答复#1

请求#2


根据HTTP 1.1,这两个响应都是有效的,因此您需要修复客户端代码,使其能够处理这两个响应。尝试修复服务器,使其行为不会触发客户端中的错误,这是一个坏主意。 下一个版本的nginx可能会有不同的行为,您的用户甚至可能有更改传输的代理,可能只有在他们漫游并使用不同的提供商时

如果您想在标题上进行一些手指打印,ETag标题可能会对您有所帮助,因为无论传输如何,当响应的内容没有更改时,ETag应该保持不变

服务器通常在调用动态页面时分块发送,因为这样就不需要为整个页面创建缓冲区并等待生成所有页面


如果服务器已经有了缓冲区,通常会一次性发送响应,例如,因为它在缓存中,或者内容在文件中,并且不是很大。一次发送效率更高,另一方面,缓冲输出的额外数据副本需要更多内存,效率更低。因此,服务器甚至可以根据可用内存来决定这一点

Rails是发回了第二个响应,还是nginx?也就是说,nginx是否在进行自己的缓存?@MichaelHampton-hmm。。。我会调查一下,然后再报告。。。
HTTP/1.1 200 OK
Cache-Control: max-age=0, private, must-revalidate
Content-Type: application/json; charset=utf-8
Date: Wed, 18 Mar 2015 00:59:31 GMT
ETag: "86f277ea63295460d4f3bed9a073eaa2"
Server: nginx/1.6.2
Status: 200 OK
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Request-Id: dd36f139-1986-4da6-9645-4438d41e74b0
X-Runtime: 0.123865
X-XSS-Protection: 1; mode=block
transfer-encoding: chunked
Connection: keep-alive
HTTP/1.1 200 OK
Cache-Control: max-age=0, private, must-revalidate
Content-Type: application/json; charset=utf-8
Date: Wed, 18 Mar 2015 00:59:36 GMT
ETag: "86f277ea63295460d4f3bed9a073eaa2"
Server: nginx/1.6.2
Status: 200 OK
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Request-Id: 0cfd7705-157b-41b5-aa36-739bc6f8302e
X-Runtime: 0.092672
X-XSS-Protection: 1; mode=block
Content-Length: 2234
Connection: keep-alive