パソコンQ&A

HTTPステータスコード

HTTPステータスコード
(HTTPレスポンスコード)

PHPではこんな感じに使う。

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.example.com/");
exit;

$time_newest=time();
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s", $time_newest ) . " GMT" );

RFC 2616の§6、§10で仕様が定められている。


CGIのハナシ
NPHスクリプト[NPH方式]
Non-Parsed Hederの略。
『nph-』で始まるファイル名のときにNPHで実行される。
Apacheサーバの設定が必要。

通常のCGIでは
CGI→wwwサーバー→wwwブラウザ
の順でデータが処理されるものを
CGI→wwwブラウザ
に返すようにするシステム

メリット
wwwサーバーを介さないので処理が軽くなる
バッファリングをしない[Apache1.2以前の話]

デメリット
wwwサーバーログにエラーが残らない
『nph-』で始まるファイル名に変更しなければいけない

# HTTPヘッダーステータスコードはどんなヘッダーより先に送ります。
print "HTTP/1.0 200 OK\r\n";
# クッキーをセットする場合にはこのように書きます。
print "Set-Cookie: NAME=VALUE\r\n";
# コンテントタイプ
print "Content-type: text/html\r\n";
# HTTPヘッダ終わり
print "\r\n";

ページ更新をしてもヘッダー以外のデータを送信しない
チャットや掲示板などでデータが更新さてれない場合に、負荷軽減のため、
データの更新がなければ、レスポンスヘッダだけ送信して、何もデータを送信しないようにすることができる。
このときCGIリクエストを送信した画面を表示したままになります。
print "HTTP/1.0 204 No Content\r\n";
# キャッシュしない
print "Cache-control: no-cache\r\n";
print "Pragma: no-cache\r\n";
# キャッシュの削除(期限を過去にする)
print "Expires: Sat, 01-Jan-2000 01:00:00 GMT\r\n";
print "\r\n";
exit;

Apache 1.2ではapacheサーバはバッファリングをしていましたが、
Apache 1.3 ではバッファリングをしないのであまり意味がなくなったようです。

ということでHTTPヘッダー情報を好きに生成したいという理由だけであれば asisを使ったほうがよいようです。

Apache モジュール mod_asis
as isは『そのまま』という意味です。

send-as-is ハンドラに結び付けられたファイルは、HTML であるか画像であるかに関わらず、ほとんどそのままをクライアントに返します。


HTTPステータスコードの一覧 HTTP/1.0 HTTP/1.1
1.01.1Code状態説明
1xx: Informational (情報)
×○100Continueリクエストの先頭部分を受信したのでクライアントはリクエストの続きを送信してもよい
×○101Switching Protocolsサーバはクライアントの指示に従いプロトコルを変更する
2xx: Success (成功)
○○200OKリクエストは正常に処理された
○○201Created新しいURIが作成されたときにサーバから返される
○○202Acceptedリクエストは受け取られたが、すぐに処理の対象とはならない
×○203Non-Authoritative Informationエンティティヘッダの情報が本来のサーバが発信したものではない
○○204Not Contentエンティティボディが返されていない
×○205Reset CotentUAは使用されたフォームをクリアして、次のリクエストに備えるべきである
×○206Partial Contentサーバは要求されたサイズの部分的なデータを返した
3xx: Redirection (転送)
×○300Multiple ChoicesリクエストされたURIは2つ以上のリソースを有している
○○301Moved PermanentyリクエストされたURIは永続的に移転している。Locationヘッダ中に移転先が記される
○○302Moved TemporarilyリクエストされたURIは一時的に移転している。Locationヘッダ中に移転先が記される
×○303See OtherリクエストされたURIは別のURIに存在する
○○304Not Modified指定日時以降にドキュメントが変更されていないことを示す
×○305Use ProxyLocation ヘッダで指定されるProxy経由でアクセスしなくてはならない
××306-未使用
×○307Temporary Redirectリクエストされたリソースは一時的に移動している。一時的なリダイレクト先URIを示す
4xx: Client Error (クライアントエラー)
○○400Bad Requestクライアントのリクエストに文法エラーがあった
○○401Unauthorizedユーザは認証されていないためリソースにアクセスできない
×○402Payment Required未使用
○○403Forbiddenリクエストは何らかの理由で拒否された
○○404Not Found指定されたリソースは存在しない
×○405Method Not Allowedクライアントの指定したメソッドが無効
×○406Not Acceptableリクエストされたデータはあるが、指定された形式と異なる
×○407Proxy Authentication RequiredProxyサーバが認証を要求している
×○408Request Time-Outタイムアウトしたため接続が切断された
×○409Conflictリクエストが他のリクエストと矛盾している
×○410GoneリクエストされたURIは永久的にそのサーバから削除されてしまった
×○411Length RequiredContents-Lengthヘッダ指定がないと受け付けられないリクエストにLengthなしでリクエストした
×○412Precondition Failedそのリクエスト中のIfヘッダ条件に偽が返された
×○413Request Entity Too Largeリクエストのエンティティが大きすぎて、処理できない
×○414Request Too LongリクエストしたURLが長すぎて処理できない
×○415Unsupported Media Type未知の形式でリクエストされたため処理できない
×○416Requested Range Not Satisfiable 
×○417Expectation Failed 
5xx: Server Error (サーバエラー)
○○500Internal Server Errorサーバ内部エラー。CGIの実行等になんらかのエラーが発生した
○○501Not Implementedサーバに未実装の処理をリクエストされたためエラーが発生した
○○502Bad Gateway無効なレスポンスを受信した
○○503Service Unavailable一時的にサービスは利用できないでいるが、将来的には回復の予定であることを示す
×○504Gateway Time-Out408とにているが、サーバ側のタイムアウト
×○505HTTP Version Not Supported要求されたHTTPのバージョンをサーバは対応していない

このページはリンクフリーです。設定などは自己責任で…
Copy Right kikky

kikky.net