开发者

Insomnia headaches on a simple javascript Cache, while If-Modified-Since headers are in place!

开发者 https://www.devze.com 2023-02-10 12:07 出处:网络
Hello fellow earthlings! For some time I\'m fantasizing possible solutions, but i\'m out of clues for this strange problem. Let me describe the reason, then the problem:

Hello fellow earthlings! For some time I'm fantasizing possible solutions, but i'm out of clues for this strange problem. Let me describe the reason, then the problem:

In order to combine the javascripts files to reduce http request, I put them into php, a headache-less simple little ye开发者_如何学JAVAt happy solution that will cache for half a year. (Would life be lot nicer if more things would work like that?) A fire and forget solution. So I tought...

The website works fine and all, except, that when viewing the headers on the php-generated js file, it seems that this showstopper appeared:

An If-Modified-Since conditional request returned the full content unchanged.

What's wrong here in the php generated file combined.js? Any suggestive answers are much appreciated!

below file < allcombined.js >

<?php
header("Content-type: text/javascript; charset=UTF-8");
header("Expires: " . gmdate ("D, d M Y H:i:s", time() + 2419200) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time() - 604800) . " GMT");

ob_start("compress");

include('script1.js');
include('script2.js');
include('script3.js');

ob_end_flush(); 
?>


To handle "If-Modified-Since" headers, you need to parse that header and compare it to your last modification date. This isn't done automatically unless you have a HTTP cache like Varnish in front of your web server. In PHP, if the date is satisfactory, then do not render a body, instead return a 304 Not Modified response. Here is a good example of this being done. [php.net]

The reason you're getting more requests for your asset than you expect is because you haven't set Cache-Control or Pragma headers. You probably want to do:

header("Cache-Control: public, max-age=2419200");
header("Pragma: public");

You may not want to set a max-age this long if you want the client to check in for updates now and again...

0

精彩评论

暂无评论...
验证码 换一张
取 消