Cake PHP:由于浏览器缓存问题,站点在我的本地系统中正常工作,但是当移动到远程服务器时它不是
Cake PHP : Issue due to browser cache, site working properly in my local system, but when moved to remote server its not
我正在使用 cake php 2.x 开发网站。我的问题是当调试 2 站点中的站点运行正常时,如果它的调试 0 其 not.I 甚至在我的 core.php
中禁用了我的应用程序中的缓存
Configure::write('Cache.disable', true);
例如:
我在登录前看到一些页面 - 它显示 link1,link2 ...,登录(link),登录后转到同一页面时它应该显示 link1, link2 ..., myaccount(link) 但它仍然显示登录。仅在刷新页面 2 或 3 次 links 或更改后。
但是,如果我在登录之前访问了一个我没有访问过的页面,它会正确定位。
响应 header 是
array(11) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(35) "Date: Tue, 22 Mar 2016 07:30:43 GMT"
[2]=>
string(14) "Server: Apache"
[3]=>
string(24) "X-Powered-By: PHP/5.5.33"
[4]=>
string(124) "Set-Cookie: CAKEPHP=f86bc010f3cc0cafb417ee8651372aa3; expires=Tue, 22-Mar-2016 11:30:43 GMT; Max-Age=14400; path=/; HttpOnly"
[5]=>
string(21) "Content-Length: 18892"
[6]=>
string(30) "Cache-Control: max-age=2592000"
[7]=>
string(38) "Expires: Thu, 21 Apr 2016 07:30:43 GMT"
[8]=>
string(32) "Vary: Accept-Encoding,User-Agent"
[9]=>
string(17) "Connection: close"
[10]=>
string(38) "Content-Type: text/html; charset=UTF-8"
}
这两个 header 字段控制浏览器缓存:
Cache-Control: max-age=2592000
Expires: Thu, 21 Apr 2016 07:30:43 GMT
第一个告诉浏览器,它可能会将此响应在其缓存中保留最多 30 天 (30 * 24 * 60 * 60 = 2592000)。第二个定义了一个时间,缓存的响应应该在什么时候过期。这是请求本身后 30 天,正如您从 header 行中看到的那样:
Date: Tue, 22 Mar 2016 07:30:43 GMT
您必须更改 "Cache_Control" 和 "Expires" header,以防止浏览器缓存响应:
Cache-Control: max-age=0
Expires: Tue, 22 Mar 2016 07:30:43 GMT
过期时间戳与现在的请求时间戳相同,浏览器被告知将响应缓存最多零秒。有了这些信息,浏览器将不得不发送一个新的请求。
您提供的响应 headers 执行以下操作,它们会将您的请求结果缓存 30 天
Cache-Control: max-age=2592000
Expires: Thu, 21 Apr 2016 07:30:43 GMT
这两个headers本质上是等价的,你可以单独使用其中的任何一个,但是注意如果你同时使用,那么max-age的优先级更高。
如果您的目标是实现缓存和适当的资源重新验证,那么我建议您使用以下 headers:
Cache-Control: max-age=0, must-revalidate
ETag: 'some generated value based on the content'
在这种情况下,浏览器将始终发送请求以检查 ETag 值,如果 ETag 已更改,则服务器将发送新内容,如果没有则将响应 状态 Code:304 未修改
我正在使用 cake php 2.x 开发网站。我的问题是当调试 2 站点中的站点运行正常时,如果它的调试 0 其 not.I 甚至在我的 core.php
中禁用了我的应用程序中的缓存 Configure::write('Cache.disable', true);
例如: 我在登录前看到一些页面 - 它显示 link1,link2 ...,登录(link),登录后转到同一页面时它应该显示 link1, link2 ..., myaccount(link) 但它仍然显示登录。仅在刷新页面 2 或 3 次 links 或更改后。 但是,如果我在登录之前访问了一个我没有访问过的页面,它会正确定位。
响应 header 是
array(11) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(35) "Date: Tue, 22 Mar 2016 07:30:43 GMT"
[2]=>
string(14) "Server: Apache"
[3]=>
string(24) "X-Powered-By: PHP/5.5.33"
[4]=>
string(124) "Set-Cookie: CAKEPHP=f86bc010f3cc0cafb417ee8651372aa3; expires=Tue, 22-Mar-2016 11:30:43 GMT; Max-Age=14400; path=/; HttpOnly"
[5]=>
string(21) "Content-Length: 18892"
[6]=>
string(30) "Cache-Control: max-age=2592000"
[7]=>
string(38) "Expires: Thu, 21 Apr 2016 07:30:43 GMT"
[8]=>
string(32) "Vary: Accept-Encoding,User-Agent"
[9]=>
string(17) "Connection: close"
[10]=>
string(38) "Content-Type: text/html; charset=UTF-8"
}
这两个 header 字段控制浏览器缓存:
Cache-Control: max-age=2592000
Expires: Thu, 21 Apr 2016 07:30:43 GMT
第一个告诉浏览器,它可能会将此响应在其缓存中保留最多 30 天 (30 * 24 * 60 * 60 = 2592000)。第二个定义了一个时间,缓存的响应应该在什么时候过期。这是请求本身后 30 天,正如您从 header 行中看到的那样:
Date: Tue, 22 Mar 2016 07:30:43 GMT
您必须更改 "Cache_Control" 和 "Expires" header,以防止浏览器缓存响应:
Cache-Control: max-age=0
Expires: Tue, 22 Mar 2016 07:30:43 GMT
过期时间戳与现在的请求时间戳相同,浏览器被告知将响应缓存最多零秒。有了这些信息,浏览器将不得不发送一个新的请求。
您提供的响应 headers 执行以下操作,它们会将您的请求结果缓存 30 天
Cache-Control: max-age=2592000
Expires: Thu, 21 Apr 2016 07:30:43 GMT
这两个headers本质上是等价的,你可以单独使用其中的任何一个,但是注意如果你同时使用,那么max-age的优先级更高。
如果您的目标是实现缓存和适当的资源重新验证,那么我建议您使用以下 headers:
Cache-Control: max-age=0, must-revalidate
ETag: 'some generated value based on the content'
在这种情况下,浏览器将始终发送请求以检查 ETag 值,如果 ETag 已更改,则服务器将发送新内容,如果没有则将响应 状态 Code:304 未修改