3

URLにいくつかの引数を入力すると、「400OK」として有効な要求であるはずのエラーが表示されることがあります。

同じURLと引数は99%の確率で機能しますが、ログにエラーが表示されます。

それは、いくつかの要因が原因で発生する可能性のあるあいまいなことですか、それとも私のアプリに固有の何かが奇妙なヘッダーのミッシュマッシュを引き起こしているのですか?前者に答えがなければ、後者だと思います:)

アップデート

コメントについては、「it」は、作成された比較的単純なRESTfulAPIです。今では、ほとんどの場合、400とエラーの本体または200とOKの本体のような正しいヘッダーが返されます。不正なヘッダーがWebクライアントに到達すると、Webクライアントは取得したメッセージを含むレポートURLにpingを送信するため、Webアプリとモバイルアプリの間でAPIエラーを区別できます。私たちが知る限り、この「400OK」を地獄にするようなコードの組み合わせはありません。しかし、コードの混乱の外でそれが起こることは不可能に思えるので、私はより深く見ていきます。

更新2

さて、私は私が長い間持っていたよりも私たちのフレームワークを深く掘り下げて、何人かの開発者と話をしました。

APIへのAJAX呼び出しを介してブラウザに情報を返します。

ブラウザは「400OK」を検出してサーバーに送り返し、そこでこの奇妙なレポートを受け取ります。誰もこれが彼らの目で起こるのを見たことがありません、しかしログはそれが起こっていると言います。

HTTPヘッダーハンドラーの400は「400badrequest」のみであるため、コードベースには文字通り400OKを返すコードはありません。

私が遭遇したブラウザ/jquery/ajaxのバグがあるかどうか今疑問に思っています。

UPDATE 3(あまり多くの情報を得ることができないため)

ブラウザが何が悪いのかをどのように認識するかを確認しました。jQuery $ .ajaxによって報告されたように、失敗するとコールバックが発生します。次に、次のようなコードがあります。

xhr.always(function() {
  var request = [ this.type, this.url, this.data ].join(' '),
      response = [ xhr.status, xhr.statusText, xhr.responseText ].join(' ');

  $.ajax({ 
    url   : REPORTING_URL,
    type  : 'POST', 
    data : { request : request, response : response }
  });
});

そして、これらのajax呼び出しから「400エラー」応答も受け取ったため、これは「ほとんど」の場合に機能することがわかっています。

更新4

文字通りすべてのエラーがユーザーエージェントから来ていることに気づきました。

Mozilla webkit etc...... AdobeAIR/1.5.3これは非常に古いバージョンです

私たちのAIRアプリには、Webアプリのiframeがあります。私はそこで何が起こっているのか想像することしかできません。

4

2 に答える 2

2

さて、RFC 2616によると、ステータス行の形式は次のとおりです。上記のコメントは間違っていました。

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

RFCはさらに次のように述べています。

Status-Code要素は、要求を理解して満たそうとする3桁の整数の結果コードです。これらのコードはセクション10で完全に定義されています。理由フレーズは、ステータスコードの短いテキスト説明を提供することを目的としています。Status-Codeはオートマトンによる使用を目的としており、Reason-Phraseは人間のユーザーを対象としています。クライアントは、理由フレーズを調べたり表示したりする必要はありません。

したがって、サーバーは「1.1400OK」を返す可能性があります。しかし、これは適切に選択された理由フレーズではありません。このような混乱を避けるために、ステータスコードに記載されている理由に固執する方がはるかに良いでしょう。(そして、おそらく[過度に]うるさいクライアント/プロキシの問題を避けてください。)

于 2012-08-01T21:37:07.213 に答える
1

私が公式の答えとしてマークした@pstの素晴らしい答えの後で、私は私の場合に100%真実であるより気のめいる答えを見つけました。

このヘッダーは、AdobeAIR1.5.3のユーザー向けにiframe内のWebサイトを使用して取得されました。

すべてのAIRユーザーを強制的にアップグレードした後、それはなくなったので、これはヘッダーレポートのバグであると考えるのが安全です。

于 2012-08-27T19:05:42.017 に答える