Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force the browser to cache a .php

I need the browser to cache a large, mostly static .php file. I open it via ajax and want to add it to the current page.

After some research if found this

$seconds_to_cache = 3600;
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
header("Expires: $ts");
header("Pragma: cache");
header("Cache-Control: max-age=$seconds_to_cache");

This works for IE, but not for chrome and firefox.

Here is the request

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Cache-Control   max-age=0
Connection  keep-alive
Content-Type    application/x-www-form-urlencoded
Cookie  PHPSESSID=5dkvr42f4it8pnnnqpesj6l413
Host    localhost
Referer http://localhost/mifa/Suche.php
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
charset utf-8

and here the response header

Cache-Control   max-age=3600
Connection  Keep-Alive
Content-Type    text/html
Date    Thu, 05 Jul 2012 15:28:22 GMT
Expires Thu, 05 Jul 2012 16:28:22 GMT
Keep-Alive  timeout=5, max=91
Pragma  cache
Server  Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
Transfer-Encoding   chunked
X-Powered-By    PHP/5.3.8

What do i need to change?

EDIT

Apparently, only IE does not append the Cache-Control max-age=0 to the request.

Here is the JS Function of the request

url = "includes/Orte.php";
obj.onreadystatechange = rState;
obj.open("GET", url, true);
obj.setRequestHeader("Pragma", "");
obj.setRequestHeader("Cache-Control", "");
obj.setRequestHeader("charset", "utf-8");
obj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
obj.setRequestHeader("Connection", "close");
obj.send();

function rState(){
    if(obj.readyState == 4){
        if (obj.status == 200){
            //alert("Response Text Ajax:\n" + obj.responseText + "\nEnd Response Text");
        }
    }
}
like image 240
ellow7 Avatar asked Jun 06 '26 04:06

ellow7


1 Answers

The Cache-Control: max-age=0 header in the request means that you asked your browser to refresh the page, so he just ignores the cache.

Access the page without hitting refresh (e.g. focus the address bar and hit enter) to avoid this.

Also, if the page is on an HTTPS URL, you may have to add public to the Cache-Control header, else some browsers won't cache it.

like image 59
Arnaud Le Blanc Avatar answered Jun 08 '26 22:06

Arnaud Le Blanc



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!