服务器响应在中途被切断

sam*_*tte 36 rest json response

我有一个返回json响应的REST API.有时(以及似乎完全随机的),json响应会在中途被切断.所以返回的json字符串如下所示:

...route_short_name":"135","route_long_name":"Secte // end of response
Run Code Online (Sandbox Code Playgroud)

我很确定这不是编码问题,因为截止点会不断改变位置,具体取决于返回的json字符串.我没有找到一个特定的响应大小,要么发生切断(我看到65kb没有切断,而40kbs会).

在切断确实发生时查看响应头:

{
    "Cache-Control" = "must-revalidate, private, max-age=0";
    Connection = "keep-alive";
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Fri, 11 May 2012 19:58:36 GMT";
    Etag = "\"f36e55529c131f9c043b01e965e5f291\"";
    Server = "nginx/1.0.14";
    "Transfer-Encoding" = Identity;
    "X-Rack-Cache" = miss;
    "X-Runtime" = "0.739158";
    "X-UA-Compatible" = "IE=Edge,chrome=1";
}
Run Code Online (Sandbox Code Playgroud)

也不响铃.任何人?

小智 32

我有同样的问题:

Nginx切断了FastCGI后端的一些响应.例如,我无法从PhpMyAdmin生成正确的SQL备份.我检查了日志,发现了这个:

2012/10/15 02:28:14 [暴击] 16443#0:*14534527 open()"/ usr/local/nginx/fastcgi_temp/4/81/0000004814"失败(13:权限被拒绝)在读取上游时,客户端:*,服务器:,请求:"POST / HTTP/1.1",上游:"fastcgi://127.0.0.1:9000",主持人:"",推荐人:"http://*/server_export.php?token =** "

我必须做的就是为/usr/local/nginx/fastcgi_temp文件夹提供适当的权限,以及client_body_temp.

固定!

非常感谢samvermette,你的问答让我走上正轨.

  • 这个答案救了我!但对于1.8,它是`/ var/cache/nginx/fastcgi_temp`文件夹.所以我做了命令`chmod 777/var/cache/nginx/-R` (3认同)

sam*_*tte 30

error.log查看我的nginx 文件,发现以下内容:

13870 open() "/var/lib/nginx/tmp/proxy/9/00/0000000009" failed (13: Permission denied) while reading upstream...
Run Code Online (Sandbox Code Playgroud)

看起来nginx的代理试图将响应内容(通过thin传入)保存到文件中.它只在响应大小超过时才proxy_buffers会这样做(64位平台默认为64kb).那么到底臭虫连接到我的请求响应的大小.

我通过在我的nginx配置文件中设置proxy_buffering来修复我的问题off,而不是增加proxy_buffers或修复文件权限问题.

还不确定nginx缓冲区的用途.我很感激,如果有人能加上这个.禁用缓冲完全是个坏主意吗?


小智 11

从服务器切割响应我遇到了类似的问题.

只有在我返回响应之前添加了json头时才会发生这种情况 header('Content-type: application/json');

在我的情况下gzip引起了这个问题.

我解决它通过指定gzip_typesnginx.conf和添加application/json打开之前列表gzip:

gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml + rss text/javascript application/json;

gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json;
gzip on;
Run Code Online (Sandbox Code Playgroud)

  • 虽然服务器配置与答案完全相同,但我们遇到了同样的问题.在客户端添加请求标头'Accept Encoding:gzip'解决了它. (2认同)