ユーザーが送信したファイルを 10 MB のチャンクでアップロードしようとしています。現在、生の XMLHttpRequest (および XDomainRequest) を使用して、個々のスライス ( File.prototoype.slice
) をフロント エンドにプッシュしています。バックエンドは、アップロード モジュールを使用した Nginx です。
参考までに、私が使用している方法の概要は次のslice
とおりです。
element.files[0].slice(...)
クロスブラウザーのプレフィックス付きメソッドwebkitSlice
などを理解しmozSlice
ています。
私が抱えている問題は、実際にクロスドメインリクエストを行うことです。から にアップロードしserver.local
ていupload.server.local
ます。Firefox では、options
リクエストは正常に処理されますが、実際のリクエストはpost
失敗します。Chrome と Opera では、options
リクエストは失敗します。
OPTIONS https://URL Resource failed to load
Firefox のヘッダーは次のとおりです。
リクエスト ヘッダー
OPTIONS /path/to/asset HTTP/1.1
Host: upload.server.local:8443
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: https://server.local:8443
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-disposition,content-type,x-content-range,x-session-id
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
応答ヘッダー
HTTP/1.1 204 No Content
Server: nginx/1.2.6
Date: Wed, 13 Feb 2013 03:27:44 GMT
Connection: keep-alive
access-control-allow-origin: https://server.local:8443
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: x-content-range, origin, content-disposition, x-session-id, content-type, cache-control, pragma, referrer, host
access-control-allow-credentials: true
Access-Control-Max-Age: 10000
実際のpost
リクエストがブラウザから出ることはありません。Nginx アクセス ログにはpost
. 何らかの理由でブラウザが停止します。この投稿がブロックされている理由を解明するにはどうすればよいですか?
Chromium 24
Firefox 18
Opera 12.14
すべてのブラウザーが CORS を適切にサポートしていることを確認しました ここ.
アップロードを にポイントするhttps://cors-test.appspot.com/test
ことで、問題がサーバー側のヘッダーにあることを確認しました。