DotCloud上的CORS,需要411长



tl; dr:我如何处理" 411长度"的nginx在dotcloud上运行的错误?

我在DotCloud平台上有一个API,其中包含CORS支持为Python服务。当我的JavaScript客户端尝试访问它时,浏览器以选项请求开始,但请返回411。

在dotcloud上出现nginx不喜欢空白的http请求。我已经看到了添加" content-Length:0"标题的建议,或尝试使用chunkin模块,但我不能这样做:

  • 我不控制浏览器为其选项添加的HTTP请求标头
  • 我认为我不能在dotcloud上安装第三方Nginx模块。即使我可以,这甚至可能没有帮助,因为没有"转移编码:块状"标题

有什么想法如何解决这个问题?

更新:

将以下内容放在nginx.conf中解决了我的直接问题。与Chunkin类似,它会捕获411个错误并在请求方法为OPTIONS时返回罐头响应。在此存储库中遇到了它。

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配置。我预计会出现删除和头部请求的问题 - 这些都没有请求。

解决此问题的另一种方法是不使用nginx并改用gunicorn。
这是用于这种配置的dotcloud.yml的示例:

www:
    type: python-worker
    config:
        python_version: v2.7
    processes:
        api: gunicorn -b 0.0.0.0:$PORT_WWW -w 8 wsgi:app
    ports:
        www: http

相关内容

  • 没有找到相关文章

最新更新