検索
ホームページバックエンド開発PHPチュートリアルPHP は Apache 環境で HTTP キャッシュ プロトコルの原理分析とアプリケーション分析を使用します_PHP チュートリアル

静的ページ用の Etag もあります。

1. 最初のケースを見てみましょう: apache 静的ページ

Apache によってクライアントに送信される静的ページには、通常、Last-Modified タグと Etag が含まれており、これら 2 つのタグの値は、変更時刻と i ノードから取得されます。静的ファイルの。

以下は、Apache からインターセプトされてクライアントに返されるヘッダー

XML/HTML コードです
​​

コードをコピーします コードは次のとおりです:

最終更新日: Fri, 26 Jan 2007 01:53:34 GMT
ETag: " 3f9f640-318-cb9f8380"

検索エンジンが静的ファイルを好む理由は、これら 2 つの識別子により、ファイルが更新されたかどうかを判断できるためです

2 つ目は、PHP とその他の動的ページ

PHP は動的に生成されるため、PHP プログラムの時間に基づいてコンテンツを決定することができません。そのため、PHP は、クライアントに返すときにキャッシュ制御を含めません。キャッシュを使用すると、キャッシュのメカニズムを理解する必要があり、b と s の間の相互作用が減少し、帯域幅が減少し、サーバーの負荷が軽減されます...多くの利点があります。

3. キャッシュ制御の具体的な意味

まず、私がテストして理解したこれらのタグの意味を説明します

Cache-Control: リクエストと応答が続くキャッシュ メカニズムを指定します。要求メッセージまたは応答メッセージで Cache-Control を設定しても、別のメッセージの処理中のキャッシュ プロセスは変更されません。リクエスト中のキャッシュ命令には、no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached が含まれ、応答メッセージ内の命令には、public、private、no-cache、no が含まれます。 -store、no-transform、must-revalidate、proxy-revalidate、max-age。

各メッセージの指示の意味は次のとおりです:

Public は、応答を任意のキャッシュ領域にキャッシュできることを示します。

プライベートは、単一ユーザーの応答メッセージの全部または一部を共有キャッシュで処理できないことを示します。これにより、サーバーは、他のユーザーのリクエストには無効なユーザーからの部分的な応答のみを記述することができます。

no-cache は、リクエストまたは応答メッセージをキャッシュできないことを示します。

no-store は、重要な情報が意図せずに公開されるのを防ぐために使用されます。リクエスト メッセージで送信すると、リクエスト メッセージと応答メッセージの両方でキャッシュが使用されます。

max-age は、クライアントが指定された時間 (秒) を超えない存続期間を持つ応答を受信できることを示します。

min-fresh は、クライアントが現在の時間に指定された時間を加えた時間よりも短い応答時間で応答を受信できることを示します。

max-stale は、クライアントがタイムアウト期間を超えて応答メッセージを受信できることを示します。 max-stale メッセージの値を指定すると、クライアントはタイムアウト期間の指定された値を超える応答メッセージを受信する可能性があります。

phpの使用法:

出力前にheader()を使用します(ob_start()を使用する場合、ヘッダーをプログラム内のどこにでも配置できます)

PHPコード
コードをコピーします コードは次のとおりです:

header( 'Cache-Control: max-age=8');

max-age=8 は、最大有効期間が 8 秒であることを意味します。8 秒を超える場合、ブラウザはサーバーにアクセスして読み取る必要があります。この時間はユーザーの読み取りページから始まりますが、Expires は絶対時間です。

Expires: キャッシュの有効期限が切れる絶対時間。指定された時点を過ぎると、ブラウザはキャッシュを認識せず、サーバーにアクセスして最新のキャッシュを再度リクエストします。

Last-Modified: ドキュメントの最終変更時刻。その素晴らしい用途は次のとおりです。 1

静的ファイルの場合、クライアントはキャッシュ内の時刻を送信し、そこにあることが判明すると、Apache がそれを比較します。は変更はなく、ヘッダーを直接返します。ステータス コードは 304 で、バイト数は非常に小さいです (上級バージョンでは、ファイルが変更されたかどうかを判断するための比較 Etag も追加されます)

2 php 動的ファイル:

クライアントは比較時間を送信し、変更されたかどうかをphpが判断します。なぜ1024バイトが返されるかは不明です。あなたのphpは非常に大きいので、1024のみを返すため、クライアントはサーバーに応じて変更時間を自動的に表示します。

注: Last-Modified ヘッダーがない場合、Cache-Control と Expires も機能しますが、各リクエストは 1024

4 ではなく、実際のファイル バイト数を返す必要があります。どうですか?

静的ページ ドン'心配する必要はありません。静的ページのキャッシュをより適切に制御したい場合、Apache には適切に制御できるモジュールがいくつかあります。

2 つのタイプがあります:

1.このタイプのページの特徴は、最初のリリース後にいくつかの変更があり、時間が経っても基本的に変更されないことです。制御戦略は次のとおりです。 1. 最初のリリースに対して Last-Modified を送信し、max-age を 1 日に設定し、変更後に Last-Modified を更新します。max-age 時間は変更の数に応じて通常になります。これはさらに面倒に思えますが、次に変更される可能性のある時刻を予測し、Expires を使用して有効期限が切れるおおよその時刻を指定することもできます。

コードをコピーします

。は次のとおりです:

//header('Cache-Control: max-age=86400');// 1 日分のキャッシュ
header('Expires: Mon, 29 Jan 2007 08:56:01 GMT');// 有効期限を指定する
header ('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).'GMT');//グリニッジ時間、$time はファイル追加時のタイムスタンプです

2 頻繁に変更されるページ

は、BBS やフォーラム プログラムと似ており、キャッシュの主な機能は、ユーザーが頻繁にリストを更新することを防ぐことであり、サーバー データベースに負担がかかります。更新の適時性を確保し、キャッシュを確実に利用できるようにするために必要です。

ここでは一般に Cache-Control を使用して制御し、max-age はフォーラムへの投稿頻度に応じて柔軟に制御できます。

PHPコード
コードをコピー コードは次のとおりです:

header('Cache-Control: max-age=60');//1分間キャッシュします
header('Last-Modified: '.gmdate( 'D, d M Y 01:01:01',$time).'GMT');//グリニッジ時間、$time は投稿の最終更新タイムスタンプです

さらに 5 つ

1更新、移動、強制更新の違い

一部のブラウザでは、Ctrl+F5 によるページの強制更新がサポートされています。

Go to: ユーザーがリンクをクリックすると、そのリンクに移動します。Last-Modified がある場合は、サーバーと通信しません。パケット キャプチャ ツールを使用して確認できます。送信されたバイトが 0 バイトであることを確認します。キャッシュの有効期限が切れると、F5 リフレッシュ アクションが実行されます。

更新 (F5): この更新も、キャッシュに Last-Modified があるかどうかに基づいて決定され、最終更新時刻がない場合は 304 または 1024 (php) に転送されます。サーバーに送信して実際のドキュメント サイズを読み取って返します

強制更新: キャッシュ メカニズムを完全に放棄し、サーバーにアクセスして最新のドキュメントを読み取り、次のようにヘッダーをサーバーに送信します

XML/HTML コード
コードをコピーします コードは次のとおりです:

キャッシュ制御: キャッシュなし

2 デバッグツール

ブラウザとサーバー間の対話を表示するためのより良いツールは、httpwatch pro (現在のバージョン) です。 4.1、IE7 をサポート

分析できる他のプロキシ パケット キャプチャ ツール、http デバッグがあります。これまで使用したことはありませんでしたが、2000 に付属のネットワークである tcp パケット キャプチャ ツールもあります。 2000 に付属のネットワーク モニタは http 専用ではありませんが、使い方が難しいです。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321283.html技術記事静的ページ用の Etag もあります。 1. 最初の状況を見てみましょう: Apache の静的ページ。Apache によってクライアントに送信される静的ページには、通常、Last-Modified タグと Etag が含まれています。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Linux apache怎么限制并发连接和下载速度Linux apache怎么限制并发连接和下载速度May 12, 2023 am 10:49 AM

mod_limitipconn,这个是apache的一个非官方模块,根据同一个来源ip进行并发连接控制,bw_mod,它可以根据来源ip进行带宽限制,它们都是apache的第三方模块。1.下载:wgetwget2.安装#tar-zxvfmod_limitipconn-0.22.tar.gz#cdmod_limitipconn-0.22#vimakefile修改:apxs=“/usr/local/apache2/bin/apxs”#这里是自己apache的apxs路径,加载模块或者#/usr/lo

图文详解apache2.4+php8.0的安装配置方法图文详解apache2.4+php8.0的安装配置方法Dec 06, 2022 pm 04:53 PM

本文给大家介绍如何安装apache2.4,以及如何配置php8.0,文中附有图文详细步骤,下面就带大家一起看看怎么安装配置apache2.4+php8.0吧~

apache版本怎么查看?apache版本怎么查看?Jun 14, 2019 pm 02:40 PM

查看​apache版本的步骤:1、进入cmd命令窗口;2、使用cd命令切换到Apache的bin目录下,语法“cd bin目录路径”;3、执行“httpd -v”命令来查询版本信息,在输出结果中即可查看apache版本号。

超细!Ubuntu20.04安装Apache+PHP8环境超细!Ubuntu20.04安装Apache+PHP8环境Mar 21, 2023 pm 03:26 PM

本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家分享在Ubuntu20.04 LTS环境下安装Apache的全过程,并且针对其中可能出现的一些坑也会提供解决方案,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

nginx,tomcat,apache的区别是什么nginx,tomcat,apache的区别是什么May 15, 2023 pm 01:40 PM

1.Nginx和tomcat的区别nginx常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django等),tomcat更多用来做一个应用容器,让javawebapp泡在里面的东西。严格意义上来讲,Apache和nginx应该叫做HTTPServer,而tomcat是一个ApplicationServer是一个Servlet/JSO应用的容器。客户端通过HTTPServer访问服务器上存储的资源(HTML文件,图片文件等),HTTPServer是中只是把服务器

php站用iis乱码而apache没事怎么解决php站用iis乱码而apache没事怎么解决Mar 23, 2023 pm 02:48 PM

​在使用 PHP 进行网站开发时,你可能会遇到字符编码问题。特别是在使用不同的 Web 服务器时,会发现 IIS 和 Apache 处理字符编码的方法不同。当你使用 IIS 时,可能会发现在使用 UTF-8 编码时出现了乱码现象;而在使用 Apache 时,一切正常,没有出现任何问题。这种情况应该怎么解决呢?

如何在 RHEL 9/8 上设置高可用性 Apache(HTTP)集群如何在 RHEL 9/8 上设置高可用性 Apache(HTTP)集群Jun 09, 2023 pm 06:20 PM

Pacemaker是适用于类Linux操作系统的高可用性集群软件。Pacemaker被称为“集群资源管理器”,它通过在集群节点之间进行资源故障转移来提供集群资源的最大可用性。Pacemaker使用Corosync进行集群组件之间的心跳和内部通信,Corosync还负责集群中的投票选举(Quorum)。先决条件在我们开始之前,请确保你拥有以下内容:两台RHEL9/8服务器RedHat订阅或本地配置的仓库通过SSH访问两台服务器root或sudo权限互联网连接实验室详情:服务器1:node1.exa

Linux下如何查看nginx、apache、mysql和php的编译参数Linux下如何查看nginx、apache、mysql和php的编译参数May 14, 2023 pm 10:22 PM

快速查看服务器软件的编译参数:1、nginx编译参数:your_nginx_dir/sbin/nginx-v2、apache编译参数:catyour_apache_dir/build/config.nice3、php编译参数:your_php_dir/bin/php-i|grepconfigure4、mysql编译参数:catyour_mysql_dir/bin/mysqlbug|grepconfigure以下是完整的实操例子:查看获取nginx的编译参数:[root@www~]#/usr/lo

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール