スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

インターネットでよく使われているプロトコルの1つがHTTP(Hypertext Transfer Protocol)です。パソコンやスマートフォンのウェブブラウザがウェブサイトを表示するとき、ウェブサーバとブラウザは、HTTPと呼ばれるプロトコルを利用して通信しています。

ウェブブラウザは、ウェブサーバに対して、HTTPリクエストを送信します。ウェブサーバは、ウェブブラウザに対して、HTTPレスポンスを送信します。

ウェブサーバは、レスポンスを返すときに、HTTPのステータスコードとよばれるものを返しています。

HTTPステータスコード

HTTPステータスコードは、サーバからのレスポンスの意味を表す3桁の数字です。

いろいろなステータスがありますが、たとえば、いくつか例を以下に挙げます。

  • 指定されたドキュメントが見つかった
  • 指定されたドキュメントがなかった
  • 指定されたドキュメントは移動した
  • 指定されたドキュメントは変更されていない
  • 認証が失敗した
  • リクエストがおかしい
  • 禁止されている
  • サーバ内部でエラーがおきた
上記のようなステータスを3文字の数字で表すのです。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 は、ほかを参照せよ、という意味のリダイレクトです。
掲示板やWikiなどを更新したときに、違うページへリダイレクトするといった実装をすることがあります。303 がなかった時代は、 302 のリダイレクトが利用されていました。 302 は「一時的な移動を意味するリダイレクト」ですが、掲示板などの書き込み時に必要なリダイレクトは、「一時的な移動」ではないため、適切ではありませんでしたが、302 で使用されていました。そのため、あらたなに 303 や 307 が追加されました。

よく似ている 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に関する書籍を探す


  • HTTP をアマゾンで探す
  • HTTP を楽天で探す
  • HTTP をヤフーショッピングで探す


スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 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

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー