0

サーバーのセットアップとブラウザのチェック

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class customHTTPServer(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write('<HTML><body>Get!</body></HTML>')
        return

server = HTTPServer(('',8080),customHTTPServer)
print 'server started at port 8080'
server.serve_forever()

ブラウザでに移動するhttp://localhost:8080と、予想されるGet!.

予期しない観測

テスト 1 :

サーバーでさまざまなステータスコードを使用してテストしました。次のステータス コードを試しました: 301302400402403404405406407408418500および。501502504505511

(Q1) 奇妙なことに、異なるステータス コード ( を除く407) を使用すると、ステータス コード を使用していたときと同じ動作になります200。何故ですか?

テスト 2

次に、最初のテストでテストしたすべての異なるステータス コードをに置き換えましself.wfile.write('<HTML><body>Get!</body></HTML>') た。self.wfile.write('')ステータス コードを使用すると、、、、、403またはブラウザに特定404のブラウザメッセージが表示されるようになりました (、、... )。500501502504505403 Forbidden404 not found

(Q2) これらのステータス コードを使用する特定のブラウザ メッセージのみを受け取り、他のステータス コードを使用しないのはなぜですか?

概要

私は 3 種類の行動を区別できます。

  • ステータス コード301, 302, 400, 402, 405, 406,またはを使用しても408、空の文字列を送信するか空でない文字列を送信するかに関係なく、ステータス コードを使用する場合と違いはありません。418511200
  • ステータス コード、、、、、またはを使用すると403、ブラウザに特定のブラウザ メッセージが作成されますが、空の文字列が送信された場合のみです。404500501502504505
  • ステータス コードを使用すると、空の文字列または空でない文字列を送信しているかどうかに関係なく407、特定のブラウザ メッセージ (エラーを表示) が返されます。323
4

2 に答える 2

2

(A1) エラー コードを送信しても本文が返されると、ブラウザはそれが Web サーバーから送信されたカスタム エラー ページであると見なします。これは、たとえば、stackoverflow が404 のデフォルトのブラウザページの代わりに、不明なドキュメントのリクエスト用のカスタム ページを提供する方法です。

(A2) ブラウザ メッセージが表示されないステータス コードの意味を確認し、返されたときにブラウザ メッセージを表示することが適切かどうかを自問してください。また、ほとんどの場合、メッセージが表示されるかどうかはブラウザーごとに異なります。

于 2012-09-13T15:31:42.750 に答える
1

例として 404 Not Found を取り上げます。多くの場合、サイトは、サイト ナビゲーションの手段を含むカスタム 404 ページを生成します。これは、ブラウザによって生成されるエラー メッセージよりも役立つ場合があります。したがって、サーバーが 404 でコンテンツを返す場合、ブラウザーはそれを表示します。

また、特定のエラーに関する詳細情報も表示されます。たとえば、403 Forbidden は、リソースへのアクセスが制限されている理由や、アクセス許可の申請方法に関する情報を提供する場合があります。

仕様を読めば驚くことではありません。本文を含むことができるステータス コードとできないステータス コードを定義します (204 No Content のように :)。

wget などの別の UA を使用した場合、404 応答の処理が異なることに気付くかもしれません。

于 2012-09-13T15:39:03.447 に答える