1. ホーム 
  2. 備忘録 
  3. PHP

HTTPヘッダ

HTTPヘッダについて

クライアントにHTMLファイルなどを送信する際に「レスポンスヘッダ」と呼ばれる情報を送信している

Webサーバーからクライアントに向けて送信されるHTTPレスポンスは、「ステータスライン」「ヘッダライン」「本文」の3部で構成されている

各部の詳細については参考文献2を確認すること

このページではHTTPヘッダの設定方法について説明していく


header関数

header 関数を使うことで生の HTTP ヘッダを送信できる

header 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の出力の前にコールする必要がある

頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に空白または空行があり、header() の前に出力が行われてしまうというものがある


header(string $header, bool $replace = true, int $response_code = 0): void
$header
ヘッダ文字列

特殊な header コールが 2 種類ある。最初のものは、文字列 "HTTP/" から始まる全てのヘッダ (大文字・小文字は区別されない)である
このヘッダは送信する HTTP ステータスコードを示すために使用される
例えば、存在しないファイルへのリクエストを処理するためにある PHP スクリプトを使用するよう( ErrorDocument ディレクティブにより ) Apache を設定する場合、そのスクリプトが正しいステータスコードを返すようにする必要がある
// この例は、"HTTP/" から始まる特別な場合を示している。
// これより良い、典型的な使い方として、以下があげられる:
// 1. header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
//    (HTTP/1.0 を使いながら、httpステータスメッセージを上書きする)
// 2. http_response_code(404); (デフォルトのメッセージを使う)
header("HTTP/1.1 404 Not Found");

2 番目の特別なヘッダは、"Location:" ヘッダである
このヘッダがブラウザに返されるだけではなく、ブラウザに REDIRECT (302) ステータスコードを返す( 201 や 3xx ステータスコードが既に送信されていない場合にのみ )
なお、何秒か経過した後にリダイレクトさせたい場合は refresh ヘッダを活用すること
header("Location: http://www.example.com/"); // ブラウザをリダイレクトする
header("refresh:5; http://www.example.com/"); // 5秒後にブラウザをリダイレクトする
$replace
ヘッダが、前に送信された類似のヘッダを置換するか、または同じ形式の二番目のヘッダを追加するかどうかを指定する
デフォルトでは、この関数は置換を行なうが、二番目の引数に false を指定すると、同じ型の複数のヘッダを強制的に生成する
例として下記に記載しておく
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', false); // false なので↑の内容を上書きしない
$response_code
HTTP レスポンスコードを強制的に指定の値にする
このパラメータが意味をなすのは header が空文字列でないときだけであることに注意する
戻り値
この関数は値を返さない

    参考文献

  1. 公式ドキュメント
  2. 【PHP】header関数によるHTTPヘッダの設定方法を解説