Cross Domain Ajaxリクエストからコンテンツレングスヘッダーにアクセスするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4850288

質問

私のJavaScriptアプリケーションは、リソースの長さを決定する必要があります Ajaxでダウンロードします。通常、これは問題ではありません。ヘッドリクエストを行い、 Content-Length.

var xhr = $.ajax({type:"HEAD", url: "http://own-domain/file.html"})
xhr.getResponseHeader("Content-Length")  
// "2195"

ただし、リソースは別のサーバーにクライアントに保存されます。 (サーバーI制御)。そのため、CORSを使用してCross Domain Ajaxリクエストを作成し、サーバーを設定して、ヘッドリクエストのプリライトリクエストに応答し、カスタムヘッダーを使用してリクエストを取得/投稿しています。

それは主にうまく機能していますが、私は抽出する方法を見つけることができないようです Content-Length corsで作業するときの頭の応答から:

var xhr = $.ajax({type:"HEAD", url: "http://other-domain/file.html"})
xhr.getResponseHeader("Content-Length")
// ERROR: Refused to get unsafe header "Content-Length"

私は、プリフライトや応答にさまざまなヘッダーを設定することを実験しました。

Access-Control-Expose-Headers: Content-Length

仕様が提案していると思われるものは、利用可能にする必要があります。しかし、私が何をしても、クライアントがコンテンツ長ヘッダーを利用できるようにすることはできないようです。助言がありますか?

(クロム8)

役に立ちましたか?

解決

すべてのブラウザでCORS応答ヘッダーのサポートがバギーであることがわかりました。 Chrome/Safariでは、getallResponseheaders()の結果で、単純な応答ヘッダー(http://www.w3.org/tr/cors/#terminology)のみが表示されます。応答に設定されています。 Firefox 3.6.13では、getallResponseheaders()は何も返さない(単純な応答ヘッダーでさえ)。回避策として、単純な応答ヘッダーの1つをオーバーロードしてコンテンツレングスを含めることができると思いますが、それは他の問題を引き起こす可能性があり、それでもFirefoxを修正しない可能性があります。

他のヒント

私は同じ問題を抱えていましたが、.htaccessにこのラインを追加することを教えてくれた他の場所でスレッドを見つけたまで:

Header add Access-Control-Expose-Headers "Content-Length"

その後、ブーム、修正されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top