PHPスクリプトでHTTPヘッダを出力する

技術情報

「PHPスクリプトを書いてみよう」シリーズの第2回です。 今回はHTTPヘッダの出力について説明します。

HTTPヘッダって何ですか

一般にWebページには、画面に表示される本体データの直前に、ブラウザへの指示を与える「見えないデータ」が付いています。それがHTTPヘッダです。

普通は見えないHTTPヘッダも、専用のツールを使えば確認できます。たとえば前の記事で書いた 「HTTPヘッダを表示するPythonスクリプト」の実行例を再掲します。

C>py head-web.py
Date : Thu, 13 Feb 2020 15:37:58 GMT
Content-Type : text/html; charset=UTF-8
Content-Length : 15
Connection : close
X-Powered-By : PHP/7.3.10
Vary : Range
Accept-Ranges : none
Server : Apache

HTTPヘッダの各行がそれぞれ別の設定を意味し、すべて「項目名:設定値」という形式をとります。

代表的なHTTPヘッダのご紹介

HTTPヘッダの種類は非常に多く、IANAに登録されたHTTPヘッダだけでも、本記事の執筆時点で300個以上あります。すべて把握するのは無理なので、ここでは代表的なものをいくつか紹介します。

  • Content-Type
    次のような形式で、Webページ本体のMediaTypeをあらわします。

     Content-Type : text/html (HTML文書)
     Content-Type : img/jpeg (JPEG画像)

    詳しくは、IANAに登録されたMediaTypeの一覧表を見てください。
     
  • Content-Type + charset
    Content-Typeがテキスト系(text/*)の場合は、オプションで文字セットを指定できます。

     Content-Type: text/javascript; charset=UTF-8
     Content-Type: text/plain; charset=Shift_JIS

    文字セットの指定は、HTML文書ならmetaタグも使えるのですが、他の種類のテキストデータではContent-Typeヘッダを使うしかありません。
     
  • Cache-Control
    ブラウザがWebページをキャッシュすべきかどうか指定します。特にPHPで作る動的なWebページでは、しばしばキャッシュ禁止の指定が行われます。

     Cache-Control: no-cache (キャッシュを禁止する)
     
  • Access-Control-Allow-Origin
    最近のブラウザはセキュリティのため、あるサーバのWebページから別サーバのJavaScriptの実行を制限しています。しかしJavaScript側で、たとえば

     Access-Control-Allow-Origin: http://example.net/

    というHTTPヘッダを送信すると、このJavaScript は example.net に限っては実行可能になります。また jquery.js のような公開ライブラリの場合、

     Access-Control-Allow-Origin: *

    というHTTPヘッダが設定され、誰でも利用可能になっています。

PHPでHTTPヘッダを出力する

PHPでは出力するデータのHTTPヘッダを自由に設定できます。

サンプルとして、「IPアドレスを得るJavaScript」をPHPで作ってみましょう。次にコードを示します。「ipjs.php」という名前で保存してください。

<?php
	$ipaddress = $_SERVER["REMOTE_ADDR"] ?? "no IPaddress";

	header("Content-Type: text/javascript; charset=utf-8");
	header("Cache-Control: no-cache");
	header("Access-Control-Allow-Origin: *");

	print("ipv4 = '$ipaddress';\n");

実際にサーバに置いてみました。

このページは「IPアドレスを得るJavaScript」を出力するものなので、HTMLの<script>タグで読み込むことができます。

また、同様のPHPスクリプトをIPv6対応のサーバにも置いてみました。

こちらはユーザーがIPv6で接続すると、「IPv6アドレスを得るJavaScript」を出力します。

次回へ続く

このようにHTTPヘッダを指定することで、PHPでは出力するページにさまざまな属性を与えることができます。応用方法は無限です。

ちょっと長くなったので今回はここまでとします。次回は、ここで作ったスクリプトを利用してWebページを作ってみます。

コメント

タイトルとURLをコピーしました