ホームページ >バックエンド開発 >PHPチュートリアル >PHPのヘッダーの使い方を詳しく解説
Web サイト開発言語として PHP スクリプトを使用する場合、HTTP ファイルのヘッダーを設定するために header 関数が使用されます。同様に、header 関数の前に HTML コンテンツを出力することはできません。この関数は、メッセージ ヘッダー情報を出力ストリームに追加する必要があります。 header() が実行される前に echo などのステートメントがある場合、後で header() が発生したときに、「警告: ヘッダー情報を変更できません - ヘッダーは既に .... によって送信されました。」エラーが報告されます。つまり、これらの関数の前にテキスト、空白行、復帰などを含めることはできません。exit() 関数を header() 関数の後に追加するのが最善です。
たとえば、jump
<?PHP<br />Header("Location: http://www.scutephp.com";); <br />exit;//在每个重定向之后都必须加上“exit",避免发生错误后,继续执行。<br />?>
HTTP (HyperTextTransferProtocol) はハイパーテキスト転送プロトコルであり、現在 Web ページの一般的なプロトコルです。伝染 ; 感染。 HTTP プロトコルはリクエスト/レスポンス モデルを採用しており、ブラウザまたは他のクライアントがリクエストを発行し、サーバーが応答します。ネットワーク リソースの送信全体に関する限り、メッセージ ヘッダーとメッセージ本文が含まれます。最初にメッセージ - ヘッダー、つまり http ヘッダーメッセージ を渡します。 http ヘッダー メッセージは通常、一般ヘッダー、リクエスト ヘッダー、応答ヘッダー、エンティティ ヘッダーの 4 つの部分に分かれています。しかし、理解という点では、この区分の境界はあまり明確ではありません。 Wikipedia の http ヘッダーの内容の構成形式によれば、リクエストとレスポンスの 2 つの部分に大別されます。
Header | 解释 | 示例 |
---|---|---|
Accept | 指定客户端能够接收的内容类型 | Accept: text/plain, text/html |
Accept-Charset | 浏览器可以接受的字符编码集。 | Accept-Charset: iso-8859-5 |
Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型。 | Accept-Encoding: compress, gzip |
Accept-Language | 浏览器可接受的语言 | Accept-Language: en,zh |
Accept-Ranges | 可以请求网页实体的一个或者多个子范围字段 | Accept-Ranges: bytes |
Authorization | HTTP授权的授权证书 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | 指定请求和响应遵循的缓存机制 | Cache-Control: no-cache |
Connection | 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) | Connection: close |
Cookie | HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 | Cookie: $Version=1; Skin=new; |
Content-Length | 请求的内容长度 | Content-Length: 348 |
Content-Type | 请求的与实体对应的MIME信息 | Content-Type: application/x-www-form-urlencoded |
Date | 请求发送的日期和时间 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
Expect | 请求的特定的服务器行为 | Expect: 100-continue |
From | 发出请求的用户的Email | From: user@email.com |
Host | 指定请求的服务器的域名和端口号 | Host: www.scutephp.com |
If-Match | 只有请求内容与实体相匹配才有效 | If-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Modified-Since | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 | If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
If-None-Match | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 | If-None-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Range | 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag | If-Range: “737060cd8c284d8af7ad3082f209582d” |
If-Unmodified-Since | 只在实体在指定时间之后未被修改才请求成功 | If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
Max-Forwards | 限制信息通过代理和网关传送的时间 | Max-Forwards: 10 |
Pragma | 用来包含实现特定的指令 | Pragma: no-cache |
Proxy-Authorization | 连接到代理的授权证书 | Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range | 只请求实体的一部分,指定范围 | Range: bytes=500-999 |
Referer | 先前网页的地址,当前请求网页紧随其后,即来路 | Referer: http://www.scutephp.com/topic-post241.html |
TE | 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 | TE: trailers,deflate;q=0.5 |
Upgrade | 向服务器指定某种传输协议以便服务器进行转换(如果支持) | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
User-Agent | User-Agent的内容包含发出请求的用户信息 | User-Agent: Mozilla/5.0 (Linux; X11) |
Via | 通知中间网关或代理服务器地址,通信协议 | Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning | 关于消息实体的警告信息 | Warn: 199 Miscellaneous warning |
ヘッダー | 説明 | 例 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
許容範囲 | サーバーが指定された範囲リクエストをサポートしているかどうか、およびセグメント化されたリクエストのタイプを示します | Accept-Ranges: バイト | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
年齢 | オリジン サーバーからプロキシ キャッシュが形成されるまでの推定時間 (秒単位、非負) | 年齢: 12 / td> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
許可 | 特定のネットワーク リソースに対する有効なリクエスト動作が許可されていない場合、405 が返されます。 | 許可: GET、HEAD | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
キャッシュ制御 | すべてのキャッシュ メカニズムに、タイプ | キャッシュ制御: no-cache | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
コンテンツ エンコーディング | Web サーバーでサポートされている、返されたコンテンツの圧縮エンコード タイプ。 | Content-Encoding: gzip | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Content-Language | レスポンスボディ言語 | Content-Language: en,zh | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Content-Length | レスポンス本文の長さ | Content-Length: 348 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Content-Location | リソースの代替アドレスをリクエストします | Content-Location: /index.htm | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
コンテンツ - MD5 | リソースの MD5 チェック値を返します | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Content-Range | 戻り本文全体におけるこの部分のバイト位置 | Content-Range: bytes 21010-47021/47022 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Content-Type | コンテンツの MIME タイプを返します | Content-Type: text/html; charset=utf-8 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
日付 | 送信者元のサーバー メッセージ 時刻 | 日付: 火曜日、2010 年 11 月 15 日 08:12:31 GMT | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ETag | リクエスト変数のエンティティタグの現在の値ETag: "737060cd8c284d8af7ad3082f209582d" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
有効期限 | 応答の有効期限日時 | 有効期限: 2010 年 12 月 1 日木曜日 16:00:00 GMT | Last-Modified | リクエストされたリソースの最終変更時刻 | Last-Modified : 火曜日、15 11 月 2010 12 :45:26 GMT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
場所 | は、受信者を他の場所にリダイレクトするために使用されます。リクエストを完了するか、新しいリソースを特定するには、リクエストされた URL よりも重要です。 | 場所: http://www.scutephp.com/topic-post241.html | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プラグマ td> | 応答チェーン内の任意の受信者に適用できる実装固有のディレクティブが含まれます | プラグマ: no-cache | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Proxy-Authenticate | この URL で適用できる認証スキームとパラメータを示します。プロキシ | プロキシ認証: 基本 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
更新 | 適用先リダイレクトまたは新しいリソースが作成されます。「5 秒後のリダイレクト」(Netscape によって提案され、ほとんどのブラウザでサポートされています) |
Refresh: 5; url= http://www.scutephp.com/topic-id97.html
更新: 5; url= http://www.scutephp.com/topic-id97.html |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
再試行-後 | エンティティが一時的に利用できない場合は、指定された時間の後に再試行するようクライアントに通知します。 | 再試行後: 120 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
サーバー | Web サーバー ソフトウェア名 | サーバー: Apache/1.3。 27 (Unix) (Red Hat/Linux) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Set-Cookie | HTTP Cookie を設定 | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
トレーラー | ヘッダー フィールドが次のように分割されていることを示します。ブロック転送エンコーディングの末尾が存在します。 | トレーラー: Max-Forwards | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Transfer-Encoding | ファイル転送エンコーディング | Transfer-Encoding:chunked | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Vary | ダウンストリーム プロキシに、キャッシュされた応答を使用するか、オリジン サーバーからのリクエストを使用するかを指示します。 | 可変: * | tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
経由 | クライアント応答の送信先をプロキシに通知します | 経由: 1.0 fred、1.1 nowhere.com (Apache/1.1) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
警告 | エンティティに関する問題の可能性に関する警告 | 警告: 199 その他の警告 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WWW-Authenticate | クライアント要求エンティティが必要とする認可スキームを示しますuse | WWW- 認証: 基本 |
下面举一些比较常见的header用法示例:
(1)使用header实现重定向(等价于代替用户在地址栏输入url)。
<?php<br />header("Location:http://www.scutephp.com/";); <br />exit;//注意务必在每个重定向之后都必须加上exit,避免发生错误后,代码会继续向下执行<br />?>
<?php <br />/** <br />@title:PHP实现定时跳转 <br />@功能:等待指定的时间,然后再跳转到指定页面(代替html meta方式) <br />*/ <br />header("refresh:3;url=http://www.scutephp.com/"); <br />echo '正在加载,请稍等...<br>三秒后自动跳转';<br />/* <br />说明:若等待时间为0,则与header("location:")等效。 <br />*/<br />?>
(2)禁止页面在浏览器中被缓存。如果因业务需要访问者每次都浏览页面都是得到最新的资料,而不是 Proxy 或 cache 中的资料,可以使用下列的标头:
<?php<br />header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');<br />header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');<br />header('Cache-Control: no-store, no-cache, must-revalidate');<br />header('Cache-Control: post-check=0, pre-check=0', false );<br />header('Pragma: no-cache'); //兼容http1.0和https<br />?>
其实这里主要就是设置下面几个选项的值:
CacheControl = no-cache
Pragma=no-cache
Expires = -1
当HTTP1.1服务器指定CacheControl = no-cache时,浏览器就不会缓存该网页。旧式 HTTP 1.0 服务器不能使用 Cache-Control 标题。
所以为了向后兼容 HTTP 1.0 服务器,IE使用Pragma:no-cache 标题对 HTTP 提供特殊支持。有关Cache-control的具体介绍请参考本站文章:网页缓存控制 Cache-control 常见的取值有private、no-cache、max-age、must-revalidate 介绍如果客户端通过安全连接 (https://) 与服务器通讯,且服务器在响应中返回 Pragma:no-cache 标题,则 Internet Explorer 不会缓存此响应。
注意:Pragma:no-cache 仅当在安全连接中使用时才防止缓存,如果在非安全页中使用,处理方式与 Expires:-1 相同,该页将被缓存,但被标记为立即过期。Expires是个好东东,如果服务器上的网页经常变化,就把它设置为-1,表示立即过期。如果一个网页每天凌晨1点更新,可以把Expires设置为第二天的凌晨1点。
(3)让使用者的浏览器出现找不到档案的信息。
网上很多资料这样写:php的函数header()可以向浏览器发送Status标头,如
header(”Status: 404 Not Found”)。
但是我发现实际上浏览器返回的响应却是:
HTTP/1.x 200 OK
Date: Thu, 03 Aug 2006 07:49:11 GMT
Server: Apache/2.0.55 (Win32) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Status: 404 Not Found
Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html
查了一些资料,
正确的写法是:
header(”http/1.1 404 Not Found”);
第一部分为HTTP协议的版本(HTTP-Version);第二部分为状态代码(Status);第三部分为原因短语(Reason-Phrase)。
(4)让访问者下载档案(隐藏文件的位置)。我们都知道通过原始的url就可以实现普通文件下载,但是如果我们需要保密文件在服务器上的存储位置,就不能直接把文件链接显示出来,这里我们就可以通过header函数隐藏文件地址同时又实现文件的下载,具体代码如下:
<?php<br />header("Content-type: application/x-gzip"); <br />header("Content-Disposition: attachment; filename=phpernote.zip"); <br />header("Content-Description: PHP3 Generated Data"); <br />?>
另外,关于使用php进行文件下载,可以参照本站文章:PHP文件下载函数(代码)下面列举一些并不是非常常见的header的用法示例:
<?php<br /><br />// ok 200<br />header('HTTP/1.1 200 OK');<br /><br />//设置一个404头:<br />header('HTTP/1.1 404 Not Found');<br /><br />//设置地址被永久的重定向<br />header('HTTP/1.1 301 Moved Permanently');<br /><br />//文档语言<br />header('Content-language: en');<br /><br />//告诉浏览器最后一次修改时间<br />$time = time() - 60; // or filemtime($fn), etc<br />header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');<br /><br />//告诉浏览器文档内容没有发生改变<br />header('HTTP/1.1 304 Not Modified');<br /><br />//设置内容长度<br />header('Content-Length: 1234');<br /><br />//设置内容类型:<br />header('Content-Type: text/html; charset=iso-8859-1');<br />header('Content-Type: text/html; charset=utf-8');<br />header('Content-Type: text/plain'); //纯文本格式<br />header('Content-Type: image/jpeg'); //JPG图片<br />header('Content-Type: application/zip'); // ZIP文件<br />header('Content-Type: application/pdf'); // PDF文件<br />header('Content-Type: audio/mpeg'); // 音频文件<br />header('Content-Type: application/x-shockwave-flash'); //Flash动画<br />?>