2012-03-08 20 views
2

私が構築したAPIと話をするためにBackbone.jsアプリを構築しています。クロスドメインリクエストwithCredentialsがFirefoxで動作しない

APIは上 api.foo.com ウェブサイトに座っている

イムは、Apache

Header set Access-Control-Allow-Origin "http://web.foo.com" 
Header set Access-Control-Allow-Methods "GET,PUT,POST,DELETE,OPTIONS" 
Header set Access-Control-Allow-Headers Content-Type 
Header set Access-Control-Allow-Credentials "true" 
Header append Access-Control-Allow-Headers Origin 
Header append Access-Control-Allow-Headers Accept 
Header append Access-Control-Allow-Headers X-Requested-With 

に適切なヘッダフィールドでの作業と設定CORSを得ることができたweb.foo.com

f = { withCredentials: true} 

    params.xhrFields = f; 

    // Make the request, allowing the user to override any Ajax options. 
    $.ajax(params); 

にxhrFieldsクロムと、このすべての作品。 Im about api.foo.com/sessions loginへの投稿をして、クッキーを入手してから、そのクッキーでもう一度api.foo.comにリクエストしてください。

残念ながら、私がfirefox 10.0.7に切り替えたとき、これはうまくいきませんでした。 withCredentialsは、jqueryがCookieを取得して使用するようには見えませんでした。

これはstackoverflowに関する質問とは異なり、これはオフではありませんが、私はこれをブラウザ間で一貫して動作させる必要があります(私はまだIEになっていません)。

BACKBONE.JSを使用して

イム0.9.1 のjQuery 1.7.1 は1.0.7 アンダースコア

クローム17.0.963.65

doesntの上1.3.1

作品を必要としますfirefoxで仕事をする10.0.2

誰でも助けてくれますか?

+1

上記に基づいて何が起こっているのかを言うのは本当に難しいです...問題を示すリンクがある可能性はありますか? –

+0

内部はすべて不具合です。私はクロスブラウザCORSはまだ簡単なことではないという印象を受けます。今のところ私はApacheのインスタンスをプロキシしていますので、心配する必要はありません。 –

+0

これは非常に簡単です...ブラウザ間で同じように動作しない場合は、一方または他方のブラウザが壊れています。 https://developer.mozilla.org/en/HTTP_Loggingの指示に従ってHTTPログを作成して、それをどこに置いても構いませんか? –

答えて

2

ちょうど私がやったことでこの質問を更新すると思った。私が感じることは、CORSは(セキュリティ上の理由から)まだ簡単なことではないということです。この主題に関するほとんどの答えは、プロキシがどれくらい簡単かをあまり説明することなく、「Proxy or do CORS」になります。以下、私はこれがないことはすべての要求がweb.foo.com/apiうとしているniceley

ProxyPass /api http://api.foo.com/ 
    ProxyPassReverse /api http://api.foo.com/ 

<Location /api> 
    Order allow,deny 
    Allow from all 
</Location> 

を演奏すべてを取得するために私のウェブサイトのApacheのファイルに置くために必要なもので、Apacheは自動的にプロキシがapi.foo COMに渡します。つまり、CORSヘッダーは必要なく、すべてのクッキーはうまく動作します。また、あなたがまだapi.foo.comこれはまだから社内APIを分離しながらCORSのものへの必要性を解決するための本当に簡単な方法です

を照会するためにJavaScriptではない他のソフトウェアのために実行したことを意味し

フロントエンド。

関連する問題