PHP HTTPステータスコードを簡単にセットする方法
スポンサーリンク
このドキュメントの内容は、以下の通りです。
- はじめに
- HTTPステータスコード
- PHPでHTTPのステータスコードを設定する古い方法
- もっと簡単にHTTPステータスコードを設定する方法
- リダイレクトを行う場合
- 301と302のリダイレクトの違い
- よく似ている 302と303の違い
- よく似ている 301,302,308,307 の違い
- HTTPに関する書籍を探す
はじめに
インターネットでよく使われているプロトコルの1つがHTTP(Hypertext Transfer Protocol)です。パソコンやスマートフォンのウェブブラウザがウェブサイトを表示するとき、ウェブサーバとブラウザは、HTTPと呼ばれるプロトコルを利用して通信しています。ウェブブラウザは、ウェブサーバに対して、HTTPリクエストを送信します。ウェブサーバは、ウェブブラウザに対して、HTTPレスポンスを送信します。
ウェブサーバは、レスポンスを返すときに、HTTPのステータスコードとよばれるものを返しています。
HTTPステータスコード
HTTPステータスコードは、サーバからのレスポンスの意味を表す3桁の数字です。いろいろなステータスがありますが、たとえば、いくつか例を以下に挙げます。
- 指定されたドキュメントが見つかった
- 指定されたドキュメントがなかった
- 指定されたドキュメントは移動した
- 指定されたドキュメントは変更されていない
- 認証が失敗した
- リクエストがおかしい
- 禁止されている
- サーバ内部でエラーがおきた
たとえば、curlコマンドでウェブサーバにアクセスすると以下のレスポンスが返ってきました。
薫 $ curl -i http://localhost/ HTTP/1.1 200 OK Date: Mon, 15 Jun 2020 14:55:46 GMT Server: Apache/2.4.41 (FreeBSD) PHP/7.4.3 Last-Modified: Tue, 03 Mar 2020 03:50:20 GMT ETag: "2d-59feb33e4156c" Accept-Ranges: bytes Content-Length: 45 Cache-Control: max-age=2592000 Expires: Wed, 15 Jul 2020 14:55:46 GMT Content-Type: text/html <html><body><h1>It works!</h1></body></html>
HTTP/1.1 200 OK
この一行目の 200 が HTTPのステータスコードです。200 で OK と返ってきています。ほとんどのリクエストが、正常に処理されたときは、この 200 を返しています。
この例の 2xx 系のステータスは、成功を表します。
参考までにもう1つ、よくある 404 Not found を紹介します。
$ curl -i http://localhost/not_found HTTP/1.1 404 Not Found Date: Mon, 15 Jun 2020 14:58:56 GMT Server: Apache/2.4.41 (FreeBSD) PHP/7.4.3 Content-Length: 196 Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> </body></html>
4xx 系は、クライアントのリクエストに誤りがあっときに返されるものとされています。
この例の 404 Not Found ですが、指定されたリソースが存在しないときに、返されます。グーグルなどで検索して、でてきたページにアクセスしたら、 404 Not Found と表示されたことがある方もそれなりにいらっしゃると思いますが、ブラウザにそのエラーページが出てきているときに、ブラウザは、 404 というステータスコードを受信しているのです。
このように、HTTP では、HTTPレスポンスの1行目で、クライアントにステータスを返しているわけです。
PHPでHTTPのステータスコードを設定する古い方法
PHPでHTTPステータスコードを設定するために、 header()関数を利用したりしてました。以下に、サンプルコードを示します。<?php header ("HTTP/1.1 404"); ?>
上記のコードを実行すると下記のようになります。
HTTP/1.1 404 Not Found Date: Tue, 14 May 2013 14:42:15 GMT Server: Apache/2.2.23 (FreeBSD) PHP/5.4.11 DAV/2 X-Powered-By: PHP/5.4.11 Content-Type: text/html; charset=utf-8
もっと簡単にHTTPステータスコードを設定する方法
PHPの場合、HTTPのステータスコードを設定するためにheader()を利用してもよいですが、自分でHTTPステータスコードに対応する英字の文字列(たとえば Not Found) を書くことになるので、都度、単語を調べるのは面倒ですね。
もっと簡単にするには、PHPの場合は http_response_code () 関数を利用します。 http_response_code() は、PHP 5.4.0 から追加されました。
書式は以下の通りです。
http_response_code ([ int $response_code ] ) : mixed
http_response_codeのデフォルトのステータスコードは200です。 以下の例では、200を返します。
<?php http_response_code (); // 200 OK ?>
404 を返したい場合には、引数で 404 を指定します。
<?php http_response_code (404); ?>
404 を指定した場合、PHPを実行すると以下の結果が得られます。関数名は、長くなりましたが、パラメータが非常に簡単です。 Not Found とか自分で指定しなくていいのが簡単でよいです。
HTTP/1.1 404 Not Found Date: Tue, 14 May 2013 14:44:13 GMT Server: Apache/2.2.23 (FreeBSD) PHP/5.4.11 DAV/2 X-Powered-By: PHP/5.4.11 Content-Type: text/html; charset=utf-8
リダイレクトを行う場合
リダイレクトを行う場合には、 header() も利用します。 HTTPステータスコードの 3xx 系は、リダイレクションです。
リダイレクトには、HTTPステータスコードの 301 や 302 などがよく利用されています。
<?php http_response_code (301); header("Location: https://あなたのサイト/"); ?>
上記のソースコードを実際に動かしてみましょう。HTTPレスポンスは、以下の通りです。
HTTP/1.1 301 Moved Permanently Date: Tue, 16 Jun 2020 13:56:03 GMT Server: Apache/2.4.41 (FreeBSD) PHP/7.4.3 X-Powered-By: PHP/7.4.3 Location: https://www.google.com/ Cache-Control: max-age=2592000 Expires: Thu, 16 Jul 2020 13:56:03 GMT Content-Length: 0 Content-Type: text/html; charset=UTF-8
301と302のリダイレクトの違い
HTTPステータスコードのリダイレクションの 300系には、いくつかのステータスが存在してます。ここでは、まず、 301 と 302 についてです。HTTPステータスコードの 301 は Moved Permanently です。301 は、恒久的な移動を意味します。301 は、ウェブサイトが移転した場合、ページが移動した場合に利用されます。
HTTPステータスコードの 302 は Found です。302 は、一時的な移動を意味します。以前は、302 は Moved Temporarily でした。
よく似ている 302と303の違い
HTTPステータスコードには、302 に似ている 303 があります。- 302 Found は、一時的なリダイレクトです。
- 303 See Other は、ほかを参照せよ、という意味のリダイレクトです。
よく似ている 301,302,308,307 の違い
HTTPステータスコードには、301 と 302 に似ている 308, 307 があります。301 と 308 はどちらも永久的な移動の意味です。では、なにが違うかというと、 POST から GET へリクエストメソッドの変更が許可されているかどうかです。
HTTPリクエストには、リクエストのメソッドがあり、よく使われているメソッドに GET と POST があります。
ウェブサイトのログイン画面でIDとパスワードを入力し、ログインボタンを押したときに、多くのログインのフォームは、POSTでIDとパスワードを送信します。POSTで送信されたデータは、URLのクエリストリングにはのりません。 GETの場合は、URLのうしろにクエリストリングという形でデータが送信されます。
POSTが利用されるシーンはさまざまですが、機密性の高い情報が含まれることも多いため、GETに変更されると情報漏洩などの可能性が高くなるため、望ましくはないと考えられます。 301 , 302 が作られた当時は、そういった事情を考慮できていなかっため、 307, 308 が追加されました。
301, 302, 308, 307 の主な違いを以下の表にまとめました。
POSTからGETへの変更 | 永久的 | 一時的 |
許可する | 301 | 302 |
許可しない | 308 | 307 |
301, 302, 308, 307 の役割を以下の表にまとめました。
HTTPステータスコード | ステータスの文字列 | 意味 |
301 | Moved Permanently | 永久的な移動 |
302 | Found | 一時的な移動 |
307 | Temporary Redirect | 一時的な移動 |
308 | Permanent Redirect | 永久的な移動 |
HTTPに関する書籍を探す
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12