2017-08-04 10 views
1

私はプロジェクト用の小さなjavascriptライブラリを作成しました。このライブラリでは、私たちが404ページにいるかどうかを検出する関数を持っています。XHRでキャッチ404エラー

var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
     if (this.readyState == 4) { 
      if (this.status == 404) { 
       console.log("404 detected"); 
      } 
     } 
    } 
    xhr.open('HEAD', window.location.href); 
    xhr.send(); 

大部分のケースで機能します。しかし、私は何かに問題があります。

POSTクエリでページに到達すると、この関数は404ページであることを通知します。これは、xhrリクエストが古典的なGETクエリー(フォームを再提出しないように)を呼び出してページをGETクエリーを受け入れないためにWebアプリケーションが404を返すためです。

私はこの場合に検出する方法を見つけようとしていますが、「404検出」を発生させないでください。これがjavascriptでも可能かどうかわかりません。

アイデア?

+1

あなたは現在、 'HEAD'メソッドで送信しています。サーバーはそのルート上で 'POST'を受け入れ、他のものに404を返します。 'POST'で送信してみてください – litelite

+0

@liteite:問題は、ページがJavaScriptで呼び出されたプロトコルを検出できることです。 – Xavierh95

答えて

3

は私がXHRリクエストが、古典的なGETクエリの

ソートしてページを呼び出そうからだと思います。 the specification参照:

HEADメソッドは、サーバが応答メッセージ本文を送信しない なければならないことを除いてGETと同一である(すなわち、応答が ヘッダ部の端部で終端します)。


は、私はこのケースでいる時に検出する方法を見つけようとしているし、その後、「検出された404を」起動しません。これがjavascriptでも可能かどうかわかりません。

JavaScriptはほとんど無関係です。それはHTTPになる。答えは、HTTPリクエストを作成するために使用するプログラミング言語についても同じです。

あなたはリクエストを行い、応答が何であるかを確認します。本文(HEAD、あなたが使っているもの)なしでGETリクエストからヘッダを取得するための特定のリクエストタイプがあります。一部のサーバーで正しく実装されていないため、100%信頼できるわけではありません。

標準のPOSTのようなものはありません。

特定の要求が404応答を取得するかどうかを確認する唯一の信頼できる方法は、実際にその要求を行うことです。

+0

JSはページ/リクエストに関する情報を取得する唯一の方法です。だから私の元の質問に対する答えは "いいえ、それは不可能です" – Xavierh95

関連する問題