HTTP は「ハイパーテキスト転送プロトコル」によって記述されています。このプロトコルは、この記事など、ブラウザーで表示されるほとんどのコンテンツが http プロトコルを介して送信されます。
HTTP ヘッダーは、HTTP リクエストとレスポンスの中核であり、クライアントのブラウザ、リクエストされたページ、サーバーなどに関する情報を伝達します。
ブラウザのアドレス バーに URL を入力すると、ブラウザは次のような http リクエストを作成します。 GET /tutorials/other/top-20-mysql-best- practices / HTTP/1.1<code>GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com<br>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120<br>Pragma: no-cache<br>Cache-Control: no-cache<br>
ホスト: net.tutsplus.com
ユーザーエージェント: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5 。 5 (.NET CLR 3.5.30729)Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300<font face="NSimsun">HTTP/1.x 200 OK<br>Transfer-Encoding: chunked<br>Date: Sat, 28 Nov 2009 04:36:25 GMT<br>Server: LiteSpeed<br>Connection: close<br>X-Powered-By: W3 Total Cache/0.8<br>Pragma: public<br>Expires: Sat, 28 Nov 2009 05:36:25 GMT<br>Etag: "pub1259380237;gz"<br>Cache-Control: max-age=3600, public<br>Content-Type: text/html; charset=UTF-8<br>Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT<br>X-Pingback: http://net.tutsplus.com/xmlrpc.php<br>Content-Encoding: gzip<br>Vary: Accept-Encoding, Cookie, User-Agent<br><!-- ... rest of the html ... --></font>
接続: キープアライブ
プラグマ: no-cache
キャッシュ制御: no-cache最初の行は Called 「リクエストライン」にはリクエストの基本情報が記述され、残りはHTTPヘッダーです。
リクエストが完了すると、ブラウザは次の HTTP レスポンスを受信する場合があります:
転送エンコーディング: チャンク
日付: Sat, 28 Nov 2009 04:36:25 GMTサーバー: LiteSpeed接続: closeX-Powered-By: W3 Total Cache/0.8プラグマ: public有効期限: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"キャッシュ制御: max-age=3600、publicContent-Type: text/html; charset=UTF-8最終更新日: Sat, 28 Nov 2009 03:50:37 GMTX -ピンバック: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzipVary: Accept-Encoding、Cookie、User-Agent 最初の行は「ステータス行」と呼ばれ、空白行の後にコンテンツが出力されます (この場合は HTML 出力)。
しかし、ページのソース コードを表示すると、表示されるものと一緒に HTTP ヘッダーがブラウザに送信されますが、HTTP ヘッダーは表示されません。 この HTTP リクエストは、画像、CSS ファイル、JS ファイルなどの他のリソースを受信するリクエストも送信します。
詳細を見てみましょう。HTTP ヘッダーを確認する方法
2.
3. PHP の場合: getallheaders() は、$_SERVER 配列 を使用することもできます。 headers_list() は、応答ヘッダーを取得するために使用されます。 記事の下に php のデモンストレーションの使用例がいくつか表示されます。 HTTPリクエストの構造 「最初の行」と呼ばれる最初の行には、次の 3 つの部分が含まれています。
残りの各行は「名前:値」のペアです。これらには、リクエストとブラウザに関するさまざまな情報が含まれています。たとえば、「User-Agent」は、ブラウザのバージョンと使用しているオペレーティング システムを示します。 「Accept-Encoding」は、ブラウザーが gzip などの圧縮出力を受け入れることができることをサーバーに伝えます。
これらのヘッダーのほとんどはオプションです。 HTTP リクエストは次のように合理化することもできます:
<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com</font>
そして、サーバーから有効な応答を受け取ります。
最も一般的な 3 つのリクエスト タイプは、GET、POST、HEAD です。最初の 2 つは、HTML の作成プロセスでよく知られているかもしれません。
ブラウザに送信される html、画像、js、css などのほとんどは、GET メソッドを通じてリクエストされます。これはデータを取得する主な方法です。
たとえば、Nettuts の記事を取得するには、http リクエストの最初の行は通常次のようになります:
<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1</font>
HTML がロードされると、ブラウザは次のように GET リクエストを送信して画像を取得します。
<font face="NSimsun">GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1</font>
フォームは GET メソッドを通じて送信することもできます。例を次に示します。
<font face="NSimsun"><form action="foo.php" method="GET">
<br>First Name: <input name="first_name" type="text"><br>Last Name: <input name="last_name" type="text"><br><input name="action" type="submit" value="Submit"><br>
</form></font>
このフォームが送信されると、HTTP リクエストは次のようになります:
<font face="NSimsun">GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1<br>...</font>
フォーム入力をクエリ文字列に追加することで、サーバーに送信できます。
データを URL に追加し、GET メソッドを通じてサーバーに送信することもできますが、多くの場合、POST を使用してサーバーにデータを送信する方が適切です。 GET 経由で大量のデータを送信するのは非現実的であり、一定の制限があります。
POST リクエストを使用してフォーム データを送信するのが一般的です。 POST メソッドを使用するように上記の例を変更しましょう:
<font face="NSimsun"><form action="foo.php" method="POST">
<br>First Name: <input name="first_name" type="text"><br>Last Name: <input name="last_name" type="text"><br><input name="action" type="submit" value="Submit"><br>
</form></font>
このフォームを送信すると、次のような HTTP リクエストが作成されます:
<font face="NSimsun">POST /foo.php HTTP/1.1<br>Host: localhost<br>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Referer: http://localhost/test.php<br>Content-Type: application/x-www-form-urlencoded<br>Content-Length: 43<br>first_name=John&last_name=Doe&action=Submit</font>
ここで注意すべき点が 3 つあります:
POST リクエストは、AJAX、アプリケーション、cURL などでも使用できます...また、すべてのファイル アップロード フォームは POST を使用する必要があります。
HEAD は GET とよく似ていますが、HEAD が HTTP 応答のコンテンツ部分を受け入れない点が異なります。 HEAD リクエストを送信するということは、ドキュメント自体ではなく、HTTP ヘッダーのみに関心があることを意味します。
このメソッドを使用すると、ブラウザーはページが変更されたかどうかを判断し、キャッシュを制御できます。また、要求されたドキュメントが存在するかどうかを判断することもできます。
たとえば、Web サイトに多数のリンクがある場合、それぞれに HEAD リクエストを送信するだけで、無効なリンクがあるかどうかを判断できます。これは、GET を使用するよりもはるかに高速です。
ブラウザが HTTP リクエストを送信すると、サーバーは HTTP レスポンスでリクエストに応答します。コンテンツを気にしない場合、リクエストは次のようになります:
最初の貴重な情報は契約です。現在、サーバーは HTTP/1.x または HTTP/1.1 を使用します。
次の短いメッセージはステータスを表します。コード 200 は、リクエストが正常に送信され、サーバーがヘッダー情報の後にリクエストしたドキュメントを返すことを意味します。
誰もが「HTTP ヘッダーのすべての側面を理解する 画像とテキストの説明_HTML/Xhtml_Web ページの制作」ページを見たことがあるでしょう。存在しないパスをサーバーに要求すると、サーバーは 200 ではなく HTTP ヘッダーのすべての側面を理解する 画像とテキストの説明_HTML/Xhtml_Web ページの制作 で応答します。
残りの応答内容は HTTP リクエストと同様です。これらは、サーバー ソフトウェア、ページ/ファイルがいつ変更されたか、MIME タイプなどに関するものです...
繰り返しますが、これらのヘッダーはオプションです。
前述したように、200 はリクエストが成功したことを示すために使用されます。
206 内容の一部アプリケーションが特定の範囲内のファイルのみを要求した場合、206 が返されます。
これは通常、ダウンロード管理、ダウンロードの再開、またはファイルを分割してダウンロードするために使用されます。
HTTP ヘッダーのすべての側面を理解する 画像とテキストの説明_HTML/Xhtml_Web ページの制作 が見つかりません
わかりやすい
HTTP ヘッダーのすべての側面を理解する 画像とテキストの説明_HTML/Xhtml_Web ページの制作 不正パスワードで保護されたページはこのステータスを返します。正しいパスワードを入力しないと、ブラウザに次のメッセージが表示されます:
これはパスワードで保護されたページのみであることに注意してください。パスワードを要求するポップアップ ボックスは次のようになります。
403 禁止
ページにアクセスする権限がない場合は、403 ステータスが返されます。これは通常、インデックス ページのないフォルダーを開こうとしたときに発生します。サーバー設定でディレクトリの内容の表示が許可されていない場合は、403 エラーが表示されます。
他の方法でもアクセス許可制限を送信することがあります。たとえば、IP アドレスでブロックすることができますが、これには htaccess の助けが必要です。
<font face="NSimsun">order allow,deny<br>deny from 192.168.44.201<br>deny from 224.39.163.12<br>deny from 172.16.7.92<br>allow from all</font>
ブラウザがリダイレクトすると、これら 2 つの状態が表示されます。たとえば、bit.ly のような URL 短縮サービスを使用するとします。このようにして、誰がリンクをクリックしたかを知ることができます。
302 と 301 はブラウザーでは非常によく似ていますが、検索エンジン クローラーではいくつかの違いがあります。たとえば、Web サイトがメンテナンス中の場合、クライアント ブラウザを 302 を使用して別のアドレスにリダイレクトします。将来、検索エンジンのクローラーによってページのインデックスが再作成されます。ただし、301 リダイレクトを使用すると、Web サイトが新しいアドレスに永久に移動されたことを検索エンジン クローラーに伝えることになります。
500 内部サーバー エラー
このコードは通常、ページ スクリプトがクラッシュしたときに表示されます。ほとんどの CGI スクリプトは、PHP のようにブラウザにエラー メッセージを出力しません。致命的なエラーが発生した場合、単に 500 ステータス コードが送信されます。現時点では、サーバー エラー ログを確認してトラブルシューティングを行う必要があります。
全リストここ
で HTTP ステータス コードの完全な説明を見つけることができます 。 HTTP ヘッダー内の HTTP リクエスト
これらのヘッダー情報はすべて、PHP の $_SERVER 配列にあります。 getallheaders() 関数を使用して、すべてのヘッダー情報を一度に取得することもできます。
HTTP リクエストは特定の IP アドレスに送信されますが、ほとんどのサーバーは同じ IP アドレスで複数の Web サイトをホストできるため、サーバーはブラウザがリソースを要求しているドメイン名を認識している必要があります。
<font face="NSimsun">ホスト: rlog.cn<code><font face="NSimsun">Host: rlog.cn</font>
これは、ドメインとサブドメインを含む単なる基本ホスト名です。
PHP では、$_SERVER['HTTP_HOST'] または $_SERVER['SERVER_NAME'] を通じて表示できます。
<font face="NSimsun">ユーザー エージェント: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (. NET CLR 3.5.30729)<code><font face="NSimsun">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)</font>
このヘッダーには次の情報を含めることができます:
これは、一部の Web サイトが訪問者情報を収集するために使用する一般的な方法です。たとえば、訪問者が携帯電話からサイトにアクセスしているかどうかを判断し、低解像度でもパフォーマンスが高いモバイル サイトに訪問者を誘導するかどうかを決定できます。
PHP では、$_SERVER['HTTP_USER_AGENT'] を通じてユーザー エージェントを取得できます
<font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>echo "IE6 の使用をやめてください!";<br> }<code><font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>echo "Please stop using IE6!";<br>}</font>
<font face="NSimsun">受け入れ言語: en-us,en;q=0.5<code><font face="NSimsun">Accept-Language: en-us,en;q=0.5</font>
この情報は、ユーザーのデフォルトの言語設定について説明します。 Web サイトに異なる言語バージョンがある場合、この情報を使用してユーザーのブラウザをリダイレクトできます。
カンマ区切りで複数の言語を表示できます。最初の言語が優先言語となり、他の言語にはユーザーの言語の優先順位を示す「q」値 (0 ~ 1) が付きます。
この情報を取得するには、PHP で $_SERVER["HTTP_ACCEPT_LANGUAGE"] を使用します。
<font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('場所: http:// french.mydomain.com');<br>}<code><font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('Location: http://french.mydomain.com');<br>}</font>
<font face="NSimsun">Accept-Encoding: gzip,deflate<code><font face="NSimsun">Accept-Encoding: gzip,deflate</font>
最新のブラウザのほとんどは gzip 圧縮をサポートしており、この情報をサーバーに報告します。このとき、サーバーは圧縮された HTML をブラウザに送信します。これにより、ファイル サイズが 80% 近く削減され、ダウンロード時間と帯域幅が節約されます。
PHP では、$_SERVER["HTTP_ACCEPT_ENCODING"] を使用してこの情報を取得できます。 ob_gzhandler() メソッドを呼び出すと、この値が自動的に検出されるため、手動で検出する必要はありません。
<font face="NSimsun">// 出力バッファリングを有効にします<br>// ブラウザがサポートしている場合、すべての出力が圧縮されます<br>ob_start('ob_gzhandler');<code><font face="NSimsun">// enables output buffering<br>// and all output is compressed if the browser supports it<br>ob_start('ob_gzhandler');</font>
ページがブラウザにキャッシュされている場合、次回閲覧するときにブラウザはドキュメントが変更されたかどうかを検出し、次のようなヘッダーを送信します。
<font face="NSimsun">変更日: 土曜日、2009 年 11 月 28 日 06:38:19 GMT<code><font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>
今回以降変更されていない場合、サーバーは「304 Not Modified」を返し、それ以上のコンテンツは返されません。ブラウザはキャッシュからコンテンツを自動的に読み取ります
PHP では、$_SERVER['HTTP_IF_MODIFIED_SINCE'] を使用して検出できます。
<font face="NSimsun">// $last_modify_time が最後に出力が更新されたと仮定します<br>// ブラウザは If-Modified-Since ヘッダーを送信しましたか?<br>if(isset ($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// ブラウザーのキャッシュが変更時刻と一致するかどうか<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// 304 ヘッダーを送信し、コンテンツは送信しません<br>header("HTTP/1.1 304 Not Modified");<br>exit;<br>}<br>}<code><font face="NSimsun">// assume $last_modify_time was the last the output was updated<br>// did the browser send If-Modified-Since header?<br>if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// if the browser cache matches the modify time<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// send a 304 header, and no content<br>header("HTTP/1.1 304 Not Modified");<br>exit;<br>}<br>}</font>
キャッシュされた情報が正しいかどうかを判断するために使用される Etag と呼ばれる HTTP ヘッダーもあります。これについては後ほど説明します。
名前が示すように、ブラウザに保存されている Cookie 情報をサーバーに送信します。
<font face="NSimsun">クッキー: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar<code><font face="NSimsun">Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar</font>
これは、セミコロンで区切られた名前と値のペアのセットです。 Cookie にはセッション ID を含めることもできます。
PHP では、$_COOKIE 配列にアクセスすることで 1 つの Cookie を取得できます。 $_SESSION 配列を直接使用してセッション変数を取得できます。セッション ID が必要な場合は、Cookie の代わりに session_id() 関数を使用できます。
<font face="NSimsun">echo $_COOKIE['foo'];<br>// output: bar<br>echo $_COOKIE['PHPSESSID'];<br>// output: r2t5uvjq435r4q7ib3vtdjq120<br>session_start();<br>echo session_id();<br>// output: r2t5uvjq435r4q7ib3vtdjq120</font>
名前が示すように、ヘッダーには参照 URL 情報が含まれます。
たとえば、Nettuts ホームページにアクセスしてリンクをクリックすると、次のヘッダー情報がブラウザに送信されます: <font face="NSimsun">Referer: http://net.tutsplus.com/ </font>
PHP では、この値は $_SERVER['HTTP_REFERER'] 経由で取得できます。
<font face="NSimsun">if (isset($_SERVER['HTTP_REFERER'])) {<code><font face="NSimsun">if (isset($_SERVER['HTTP_REFERER'])) {<br>$url_info = parse_url($_SERVER['HTTP_REFERER']);<br>// is the surfer coming from Google?<br>if ($url_info['host'] == 'www.google.com') {<br>parse_str($url_info['query'], $vars);<br>echo "You searched on Google for this keyword: ". $vars['q'];<br>}<br>}<br>// if the referring url was:<br>// http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http headers&aq=f&oq=&aqi=g-p1g9<br>// the output will be:<br>// You searched on Google for this keyword: http headers</font>
$url_info = parse_url($_SERVER['HTTP_REFERER']);
if ($url_info['host'] == 'www.google.com') {
parse_str($url_info['query'], $vars);}
// 参照 URL が次の場合:// http://www. google.com/search?source=ig&hl=en&rlz=&=&q=http headers&aq=f&oq=&aqi=g-p1g9<font face="NSimsun">Authorization: Basic bXl1c2VyOm15cGFzcw==</font>
// 出力は次のようになります:
「referrer」という単語のスペルが「referer」と間違っていることに気づいたかもしれませんが、残念なことに、このように公式の HTTP 仕様に組み込まれてしまい、行き詰まってしまいました。
承認
ヘッダーに含まれる情報のこの部分は、base64 でエンコードされています。たとえば、base64_decode(‘bXl1c2VyOm15cGFzcw==’) は「myuser:mypass」に変換されます。 PHP では、この値は $_SERVER['PHP_AUTH_USER'] と $_SERVER['PHP_AUTH_PW'] を使用して取得できます。 WWW 認証セクションで詳細を説明します。 HTTP ヘッダーの HTTP 応答 ここで、いくつかの一般的な HTTP ヘッダーに含まれる HTTP 応答情報を理解しましょう。 PHP では、header()
headers_list()
を通じて、何が送信され、何が送信されるかを確認できます。関数のヘッダー情報。
headers_sent()<font face="NSimsun">Cache-Control: max-age=3600, public</font>
キャッシュ制御
w3.org の定義は次のとおりです。「Cache-Control 一般ヘッダー フィールドは、要求/応答チェーンに沿ったすべてのキャッシュ メカニズムが従わなければならないディレクティブを指定するために使用されます。」 ここで、「キャッシュ メカニズム」には、ユーザーの情報の一部が含まれます。 ISP のゲートウェイおよびプロキシ情報が使用される場合があります。
<font face="NSimsun">Cache-Control: no-cache </font>
例:
<font face="NSimsun">キャッシュ制御: max-age=3600、パブリック<a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.w3.org');" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9" target="_blank"></a></font>
「パブリック」は、この応答を誰でもキャッシュできることを意味し、「max-age」はキャッシュが有効になる秒数を示します。 Web サイトのキャッシュを許可すると、ダウンロード時間と帯域幅が大幅に削減され、ブラウザの読み込み速度も向上します。
<font face="NSimsun">キャッシュ制御: キャッシュなし <p></p></font>
詳細については、<font face="NSimsun">Content-Type: text/html; charset=UTF-8</font>
をご覧ください。 コンテンツタイプ
このヘッダーには、ドキュメントの「MIME タイプ」が含まれています。ブラウザはこのパラメータを使用してドキュメントを解析する方法を決定します。たとえば、HTML ページ (または HTML 出力を含む php ページ) は次のようなものを返します:
<font face="NSimsun">コンテンツ タイプ: text/html-8<span></span></font>
「text」はドキュメントタイプで、「html」はドキュメントのサブタイプです。 このヘッダーには、文字セットなどの詳細情報も含まれています。 <font face="NSimsun">Content-Type: image/gif</font>
画像の場合、次の応答が送信されます:
<font face="NSimsun">Content-Type: image/gif</font>
ブラウザは、外部プログラムまたは独自の拡張機能を使用して、MIME タイプを通じてドキュメントを開くことを決定できます。次の例では、Adobe Reader を呼び出します: <font face="NSimsun">Content-Type: application/pdf</font>
直接ロードでは、Apache は通常、ドキュメントの MIME タイプを自動的に決定し、ヘッダーに適切な情報を追加します。また、ほとんどのブラウザにはある程度のフォールト トレランスが備わっており、情報がヘッダーに提供されていないか、正しく提供されていない場合に、MIME タイプを自動的に検出します。
一般的に使用される MIME タイプのリストは ここで見つけることができます。
PHP では、finfo_file() を使用してファイルの ime タイプを検出できます。
このヘッダーは、応答の内容を解析する代わりに、ファイルのダウンロード ウィンドウを開くようにブラウザーに指示します。例:
<font face="NSimsun">コンテンツの配置: 添付ファイル名="download.zip"<code><font face="NSimsun">Content-Disposition: attachment; filename="download.zip"</font>
ブラウザに次のようなダイアログ ボックスが表示されます:
適切な Content-Type ヘッダーも送信されることに注意してください
<font face="NSimsun">Content-Type: application/zip<br>Content-Disposition:attachment; filename="download.zip"<code><font face="NSimsun">Content-Type: application/zip<br>Content-Disposition: attachment; filename="download.zip"</font>
コンテンツがブラウザに送信される場合、サーバーはこのヘッダーを使用して、送信されるファイルのサイズ (バイト) をブラウザに通知できます。
<font face="NSimsun">コンテンツの長さ: 89123<code><font face="NSimsun">Content-Length: 89123</font>
この情報は、ファイルのダウンロードに非常に役立ちます。これが、ブラウザがダウンロードの進行状況を認識する理由です。
たとえば、ここでは遅いダウンロードをシミュレートするダミー スクリプトを作成しました。
<font face="NSimsun">// zip ファイルです<br>header('Content-Type: application/zip');<br>// 100 万バイト (約 1 メガバイト) <br>header('Content-Length: 1000000');<br>// ダウンロード ダイアログをロードし、download.zip として保存します<br>header('Content-Disposition:attachment; filename="download .zip"');<br>// 1000 バイトのデータを 1000 倍<br>for ($i = 0; $i <span style="WHITE- SPACE: pre"><code><font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// 1 million bytes (about 1megabyte)<br>header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>
echo str_repeat(".",1000);
usleep(50000);
}
結果は次のようになります:
<font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// the browser won't know the size<br>// header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>
次に、Content-Length ヘッダーをコメントアウトします。
<font face="NSimsun">// これは zip ファイルです<br>header('Content-Type: application/zip');<br>// ブラウザはそれを認識しませんサイズ<br>// header('Content-Length: 1000000');<br>// ダウンロード ダイアログをロードし、download.zip として保存します<br>header('Content-Disposition:attachment; filename ="download.zip"');<br>// 1000 バイトのデータを 1000 倍<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span></font>
// ダウンロードを遅くするためにスリープします
/> />usleep(50000);
}
結果は次のようになります:
このブラウザでは、ダウンロードされた量のみが表示され、合計でどれくらいダウンロードする必要があるかは表示されません。また、プログレスバーには進行状況が表示されません。 <font face="NSimsun">Etag: "pub1259380237;gz"</font>
これは、キャッシュ用に生成された別のヘッダーです。次のようになります:
<font face="NSimsun">Etag: "pub1259380237;gz"</font>
<font face="NSimsun">If-None-Match: "pub1259380237;gz"</font>
<font face="NSimsun">一致しない場合: "pub1259380237;gz"<p></p></font>
要求されたドキュメントの Etag 値が一致する場合、サーバーは 2oo の代わりに 304 ステータス コードを送信します。コンテンツは返されません。ブラウザはキャッシュからファイルをロードします。 <font face="NSimsun">Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT</font>
<font face="NSimsun">$modify_time = filemtime($file);<br>header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");</font>
名前が示すように、このヘッダー情報はドキュメントの最終変更時刻を GMT 形式で示します:
<font face="NSimsun">最終更新日: Sat, 28 Nov 2009 03:50:37 GMT</font>
<font face="NSimsun">$modify_time = filemtime($file);<br>header("Last-Modified: " . gmdate("D, d M Y H:i:s", $修正時間) . "GMT");</font>
代替のキャッシュ メカニズムを提供します。ブラウザは次のようなリクエストを送信する場合があります: <font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>
これについては、If-Modified-Since セクションですでに説明しました。
このヘッダーはリダイレクトに使用されます。応答コードが 301 または 302 の場合、サーバーはこのヘッダーを送信する必要があります。たとえば、http://www.nettuts.com にアクセスすると、ブラウザは次の応答を受け取ります:
<font face="NSimsun">HTTP/1.x 301 Moved Permanently<br>...<br>Location: http://net.tutsplus.com/<br>...</font>
PHP では、次の方法で訪問者をリダイレクトできます: <font face="NSimsun">header('Location: http://net.tutsplus.com/');</font>
デフォルトでは、302 ステータス コードが送信されます。301 を送信したい場合は、次のように記述します:
<font face="NSimsun">header('Location: http://net.tutsplus.com/', true, 301);</font>
Web サイトは、閲覧する Cookie 情報を設定または更新する必要がある場合、次のようなヘッダーを使用します:
<font face="NSimsun">Set-Cookie: スキン=noskin パス=/; 有効期限=2009 年 11 月 29 日(日) 21:42:28 GMT<code><font face="NSimsun">Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT<br>Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT</font>
Set-Cookie: セッション ID=120-7333518-8165026; ドメイン=.amazon.com; 期限切れ=2010 年 2 月 27 日土曜日 08:00:00 GMT
各 Cookie は個別のヘッダー情報として使用されます。 js を介して Cookie を設定しても、HTTP ヘッダーには反映されないことに注意してください。 関数を通じて Cookie を設定でき、PHP は適切な HTTP ヘッダーを送信します。
<font face="NSimsun">setcookie("TestCookie", "foobar");</font>
<font face="NSimsun">setcookie("TestCookie", "foobar");</font>
次のようなヘッダー情報が送信されます:
<font face="NSimsun">Set-Cookie: TestCookie=foobar</font>
<font face="NSimsun">Set-Cookie: TestCookie=foobar</font>
有効期限が指定されていない場合、Cookie はブラウザを閉じた後に削除されます。
Web サイトは、ユーザーを認証するためにこのヘッダーを HTTP 経由で送信することがあります。ブラウザはヘッダーでこの応答を見つけると、ポップアップ ウィンドウを開きます。
<font face="NSimsun">WWW-Authenticate: Basic realm="Restricted Area"</font>
<font face="NSimsun">WWW 認証: 基本レルム="制限エリア"</font>
次のようになります:
には、PHP でそのようなことを行う方法を示す簡単なコードがあります。
<font face="NSimsun">if (!isset($_SERVER['PHP_AUTH_USER'])) {<code><font face="NSimsun">if (!isset($_SERVER['PHP_AUTH_USER'])) {<br>header('WWW-Authenticate: Basic realm="My Realm"');<br>header('HTTP/1.0 HTTP ヘッダーのすべての側面を理解する 画像とテキストの説明_HTML/Xhtml_Web ページの制作 Unauthorized');<br>echo 'Text to send if user hits Cancel button';<br>exit;<br>} else {<br>echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";<br>echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";<br>}</font>
header('WWW-Authenticate: Basic realm="My Realm"');
} else {
echo "Hello { $_SERVER['PHP_AUTH_USER']}.
";echo "
gt;パスワードとして {$_SERVER['PHP_AUTH_PW']} を入力しました。
";<font face="NSimsun">Content-Encoding: gzip</font>
}コンテンツエンコーディング このヘッダーは通常、返されるコンテンツが圧縮されるときに設定されます。
<font face="NSimsun">コンテンツ エンコーディング: gzip<p></p></font>
PHP では、
ob_gzhandler() 関数を呼び出すと、このヘッダーは自動的に設定されます。
元のアドレス: http://css9.net/all-about-http-headers/