1

jquery 2.0.2 に問題があり、API を呼び出すときに HTTP 403 ステータス コードを特定するのに苦労しています (呼び出し元の静的 Web ページと同じように、同じマシンでホストされています)。Web ページの JavaScript から、/sessions ルートに対して $.ajax GET を実行して、ユーザーの Cookie が現在設定されているかどうかを確認しています。

Ajax は、次の呼び出しで事前にセットアップされています。

  setupAjax: ->
    $.ajaxSetup(
      dataType: 'json'
      xhrFields:
        withCredentials: true)

API (以下の nginx リバース プロキシ ログ) は、認証されていないユーザーに対して 403 を正しく返します。

127.0.0.1 - - [06/Jul/2013:22:48:25 -0700] "GET /1/sessions HTTP/1.1" 403 33 "https://foo.localhost.com/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"

Firefox は以下に同意します。

ここに画像の説明を入力

ただし、jQuery の xhr エラー ハンドラーが呼び出されると、何らかの理由で xhr.status コードが常に 404 になり、ロジックが完全にオフになります。たとえば、以下の CoffeeScript 呼び出しを使用するとします。404 ハンドラーのみが呼び出されます。これは、正しいルートまたは存在しないルート (サーバー ログと Firefox の両方で 404 を正しく返す) を指定した場合の両方で行われます。

  checkSessionCookie: ->
    $.ajax(
      url: "#{@baseUrl}/sessions"
      type: 'GET'
      statusCode:
        403: -> console.log "I'm a 403"
        404: -> console.log "I'm a 404")

(コンソールの xhr オブジェクトのダンプ):

Object { readyState=4, status=404, statusText="error"}

何が起きてる?jQuery の設定を誤ったのでしょうか、それとも何らかの方法で誤用したのでしょうか? ここにトリックはありますか?

4

1 に答える 1

0

いくつかの実験に基づいて、Firefox が CORS 例外を飲み込んで、誤ったステータスを引き起こしている可能性があるようです。Chrome は常に CORS 呼び出しを報告していたため、Firefox でこれをテストしていました。

サーバーに CORS ヘッダーを設定すると、Firefox が 403 を正しく返すようになりました。

于 2013-07-08T17:28:04.253 に答える