`
jinnianshilongnian
  • 浏览: 21435974 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2405365
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2997971
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5631665
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257613
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593281
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:249002
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5847801
Group-logo
跟我学Nginx+Lua开...
浏览量:698233
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780585
社区版块
存档分类
最新评论

错误的日期格式可能导致走nginx proxy cache时不能进行304响应

 
阅读更多
昨天在整合某些系统的nginx配置时,出现了当使用nginx cache时无法返回304响应的情况,出问题的响应头:
Content-Type:text/html; charset=gb2312
Date:Mon, 05 Jan 2015 01:58:05 GMT
Expires:Mon, 05 Jan 15 02:03:00 GMT
Last-Modified:Mon, 05 Jan 15 01:58:00 GMT
 
对于这个日期格式 nginx是不认识的,nginx能识别的日期格式:
no = 0,
rfc822, /* Tue, 10 Nov 2002 23:50:13 */
rfc850, /* Tuesday, 10-Dec-02 23:50:13 */
isoc /* Tue Dec 10 23:50:13 2002 */
 
这是因为Expires和Last-Modified是通过如下方式设置的:

 

header('Last-Modified: ' . gmdate('D, d M y H:i:s', $now_time) . ' GMT');
header('Expires: ' . gmdate('D, d M y H:i:s', $now_time + $max_age) . ' GMT');
 
这样生成的年是两位而不是四位,把小写y改成大写Y即可。
 
不过对于如上内容,浏览器和CDN端能正常识别该日期,并能正确的返回304。
 
 
另外在测试时发现,在使用Chrome浏览器时:
【1】假设第一次请求时响应内容是:
Status Code:200 OK
Age:20
Cache-Control:max-age=300
Connection:keep-alive
Content-Encoding:gzip
Content-Length:14412
Content-Type:text/html; charset=gbk
Date:Mon, 05 Jan 2015 02:10:56 GMT
Expires:Mon, 05 Jan 2015 02:15:55 GMT
Last-Modified:Mon, 05 Jan 2015 02:10:55 GMT
Vary:Accept-Encoding
 
【2】当按F5时,会发现返回了304:
Status Code:304 Not Modified
Cache-Control:max-age=300
Connection:keep-alive
Date:Mon, 05 Jan 2015 02:12:11 GMT
Expires:Mon, 05 Jan 2015 02:15:55 GMT
Vary:Accept-Encoding
【3】如果再次按F5时,会发现
Status Code:200 OK
Age:4
Cache-Control:max-age=300
Connection:keep-alive
Content-Encoding:gzip
Content-Length:14412
Content-Type:text/html; charset=gbk
Date:Mon, 05 Jan 2015 02:10:56 GMT
Expires:Mon, 05 Jan 2015 02:15:55 GMT
Last-Modified:Mon, 05 Jan 2015 02:10:55 GMT
Vary:Accept-Encoding
如果【2】时再带上Last-Modified,那么【3】还是304, 目前测试几个浏览器中只有Chrome是这种情况。
 
如果那种预售秒杀商品,是会频繁刷新的。
 
3
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics