顧客のサーバーで奇妙な問題が発生しました。
以下に投稿されたようなコードをいくつかのスクリプトで使用しています。$.ajax の構成はほとんど同じ (つまり、ファイル、データ、および成功関数の変更のみ) であり、常に type:POST を使用します。
これはほとんどの場合うまくいきますが、以下の場合、POST は常に失敗します。タイプを GET に変更すると問題なく動作します。
ここで何が起こっているのか、私には少しわかりません。
var parameter = {
password : $("#password").val()
};
$.ajax({
type : "POST",
url : "query/submit_password.php",
dataType : "xml",
async : true,
data : parameter,
success : function(aXHR) { /* ... */ },
error : function(aXHR, aStatus, aError) { alert("Error:\n" + aStatus + "\n"+ aError); }
});
このコードは常に「NetworkError: ネットワーク エラーが発生しました。」というアラートを返します。
繰り返しますが、ほとんど同じコードの他のケースは問題なく動作します。
Chrome および Firefox 開発ツールは、それ以上の説明なしに POST エラーを報告します。
ここで何が起こるか分かりますか?
さらにいくつかの詳細。
- クライアントのサイトは GoDaddy でホストされています
- 同じピースコードは他のサーバーでもうまく機能します
- はい、GETリクエストが機能するため、ファイルは存在します
- これを試したすべてのブラウザには、ブロッカープラグイン(adblockなど)がインストールされていません
HTTPScoop は次の結果を示します
(3 回の試行、赤いステータスは「通信パートナーによって接続が閉じられました」と表示されます)。
Chrome では次のように表示されます。
ほぼ解決。
Apache ログは、リクエストのステータス 403 を示していました。
また、返されたサイズが 0 であることも示されました。これは、クロムなどが失敗した要求を示した理由である可能性があります。
なぜこれが起こるのかはまだ明らかではありませんが、サーバー側の構成の問題であることは間違いありません (ほとんどの場合、mod_rewrite の問題またはそのようなものです)。