2011-01-31 19 views
15

私のJavaScriptアプリケーションでは、の長さを決定してから、をAjaxでダウンロードする必要があります。通常これは問題ではありません。HEADリクエストを作成してContent-Lengthを抽出するだけです。クロスドメインAjaxリクエストからContent-Lengthヘッダーにアクセスするにはどうすればよいですか?

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

ただし、リソースはクライアントとは別のサーバーに保存されます。 (私が管理するサーバー)。だから私はCORSを使ってクロスドメインのajaxリクエストを作成しており、HEADリクエストとGET/POSTリクエストのカスタムフッタを要求するプリフライトリクエストに応答するようにサーバを設定しています。

メインに大きな働いているが、私はCORSで作業する際の方法は、HEAD応答から Content-Lengthを抽出見つけることができないよう

:私は様々なヘッダを設定して実験してきた

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 

このような仕様では、利用可能にする必要があるようです。しかし、私が何をするにしても、私はContent-Lengthヘッダをクライアントに利用可能にすることはできません。助言がありますか?

(クローム8)

答えて

3

私はバギーであることをすべてのブラウザでCORSレスポンスヘッダのサポートを見つけました。 Chrome/Safariでは、getAllResponseHeaders()の結果に単純な応答ヘッダー(http://www.w3.org/TR/cors/#terminology)が表示されますが、「Access-Control-Expose-Headers」ヘッダー応答に設定されます。また、Firefox 3.6.13では、getAllResponseHeaders()は何も返しません(単純な応答ヘッダーでさえありません)。回避策として、単純なレスポンスヘッダーの1つにコンテンツの長さを含めることができますが、それは他の問題を引き起こす可能性がありますが、Firefoxを修正することはできません。私は私の.htaccessに次の行を追加することを教えてくれどこか他のスレッド見つかっまで

+0

右。これがWebkitのバグとして提出されるべきだと思いますか? –

+0

はい。最初に検索してみてください。以前はこれについてのバグを見たと思っていましたが、今見つけられません。 – monsur

5

私は、同じ問題を抱えていた。

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

次にBOOMを、それが固定しまいました。

+0

詳細はhttps://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers – broofa

関連する問題