ブラウザが何もしないように応答する-それは可能ですか?
質問
このようなHTTPレスポンスを作成することは可能ですか?ブラウザはそれを無視し、以前に表示されたページを表示し続けますか?
次のシナリオを意味します:
a)ユーザーが何かをクリックする
b)一部のPOSTがサーバーに送信されます(またはGETですが、より興味深いものとしてPOSTに固執しましょう)
c)サーバーは何らかの理由で、現時点では返信を送信したくないと判断しました
d)サーバーは特別に細工された応答を送信します
e)ブラウザはエラーページを表示せず、空のページを表示せず、どこにもリダイレクトせず、リロードしません-ユーザーがフォームを送信したことがないかのように、表示されていたものを表示し続けます
PSもちろんAJAXでラップすることもできますが、私はベアボーンの非JavaScriptソリューションが可能かどうかを尋ねます
解決
HTTP 204 No Contentを返します。このレスポンスコードの説明は、 RFC 2616(ハイパーテキスト転送プロトコル- -HTTP / 1.1)場所:
クライアントがユーザーエージェントの場合、ドキュメントビューを変更しないでください。 これによりリクエストが送信されました。この応答は主に許可することを目的としています ユーザーエージェントのアクティブを変更せずに実行するアクションの入力 ドキュメントビュー。ただし、新規または更新されたメタ情報は、 現在、ユーザーエージェントのアクティブビューにあるドキュメント。
他のヒント
これは通常 AJAX と呼ばれるメソッドです。 Javascript と XMLHttpRequest 関数。
編集:下部の「PS」に注目してください。別の回答で提案された 204応答は、有効である可能性があります非Javascriptソリューション。
あなたがそうするとします。
ユーザーは何をしますか?もちろん、フォームを再度送信してください。
数回。
彼らはあなたのサイトが壊れていると判断し、去ります。
それを行うにはJavascriptが必要だと思います。リクエストを送信すると、サーバーの応答に応じてJavascriptがfalseを返し、実際のページの更新/再読み込みを回避できます。
204応答については知りませんが、その方法でサーバー側から実行できます。
それを行う別の方法(Javascriptも)は、リクエストが送信された直後にfalseを返すことです。サーバーの応答(ajaxを使用)に応じて、実際のページを変更するか、ユーザーを別のページに送信できます。
いいえ。 HTTPプロトコルは、要求と応答のサイクルで構成されています。サーバーは応答しないことを決定できません(できますが、プロトコルを破ってエラーをコミットします)。