tl;博士:我如何解决在 DotCloud 上运行的 nginx 的“411 长度要求”错误?
我在 DotCloud 平台上部署了一个支持 CORS 的 API 作为 Python 服务。当我的 javascript 客户端尝试访问它时,浏览器以 OPTIONS 请求开始,但返回 411。
DotCloud 上的 nginx 似乎不喜欢带有空正文的 HTTP 请求。我已经看到添加“Content-Length:0”标头的建议,或者尝试使用chunkin
模块,但我不能这样做:
- 我不控制浏览器为其 OPTIONS 请求添加的 HTTP 请求标头
- 我不认为我可以在 DotCloud 上安装 3rd 方 nginx 模块。即使我可以,这也可能无济于事,因为请求中没有“Transfer-encoding:chunked”标头
任何想法如何解决这个问题?
更新:
放入以下内容nginx.conf
可以解决我的直接问题。与 chunkin 类似,它捕获 411 错误并在请求方法为 时返回预设响应OPTIONS
。在这个 repo 中遇到了它。
error_page 411 = @cors;
location @cors {
if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'Content-Type, Authorization, ...';
add_header Access-Control-Max-Age '1800';
add_header Content-Length 0;
add_header Content-Type text/plain;
return 200;
}
return 411;
}
这并不理想,因为我想在 Python 代码而不是 nginx 配置中处理这些响应。而且我预计 DELETE 和 HEAD 请求会出现问题——这些也没有请求正文。