1

tl; dr:DotCloudで実行されているnginxからの「411Lengthrequired」エラーを回避するにはどうすればよいですか?

DotCloudプラットフォームにPythonサービスとしてデプロイされたCORSサポート付きのAPIがあります。私のjavascriptクライアントがそれにアクセスしようとすると、ブラウザはOPTIONSリクエストで起動しますが、411に戻ります。

DotCloudのnginxは、本文が空のHTTPリクエストを好まないようです。「Content-Length:0」ヘッダーを追加するか、chunkinモジュールを使用しようとする提案を見てきましたが、どちらも実行できません。

  • ブラウザがOPTIONSリクエストに追加するHTTPリクエストヘッダーを制御していません
  • DotCloudにサードパーティのnginxモジュールをインストールできないと思います。できたとしても、リクエストに「Transfer-encoding:chunked」ヘッダーがないため、これは役に立たない可能性があります

この問題を回避する方法はありますか?

アップデート:

以下を入れるとnginx.conf、私の当面の問題は解決します。チャンキンと同様に、リクエストメソッドが。の場合、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;
}

これらの応答をnginx構成ではなくPythonコードで処理したいので、理想的ではありません。また、DELETEリクエストとHEADリクエストには、今後問題が発生することが予想されます。これらにもリクエスト本文はありません。

4

1 に答える 1

0

この問題を回避する別の方法は、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
于 2012-12-07T22:53:48.453 に答える