HTTP 3XX 缓存 Cache
http://www.cnblogs.com/yuyii/archive/2008/10/16/1312238.html
http://www.cnblogs.com/rubylouvre/archive/2012/05/24/2516606.html
HTTP协议定义了四个可以用来控制浏览器缓存的HTTP头,它们是:
Last-Modified
Expires
Pragma: no-cache
Cache-Control
在HTTP/1.0协议中,Last-Modified是控制缓存的一个非常重要的HTTP头。如果需要控制浏览器的缓存,服务器首先必须发送一个以 UTC时间为值的Last-Modifeid头,当第二次访问这个页面时,浏览器会发送一个If-Modified-Since头给服务器,让服务器判断 是否有必要更新内容,这个If-Modified-Since头的值就是上次访问页面时,浏览器发送的Last-Modifeid头的值。
Expires是HTTP/1.0中另外一个很重要的HTTP头,它表示缓存的存在时间,告诉客户端浏览器在这个时间之前不对服务器发送请求,而直接使用浏览器的缓存。
在HTTP/1.0中,可以使用Pragma: no-cache头来告诉浏览器不要缓存内容,它相当于HTTP/1.1中的Cache-Control:no-cache。
如果要让数据不被任何客户端缓存:
- function cache_none($interval = 60)
- {
- // 向后兼容HTTP/1.0
- header("Expires: 0");
- header("Pragma: no-cache");
- // 支持HTTP/1.1
- header("Cache-Control: no-cache,no-store,max-age=0,s-maxage=0,must-revalidate");
- }
301和302 Http状态有啥区别?
301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved),
302 redirect: 302 代表暂时性转移(Temporarily Moved ),
当然 Http 状态 200 标示没有任何问题发生。
这两种转移在使用的时候有啥好处或者问题?
301 重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。
302 重定向是临时性转移。
服务器在返回303
- 服务器在返回303的同时,应该(SHOULD)返回一个不同的URI,并放到Location字段中。
- 客户端收到303后,可以使用这个URI获取新的资源(必须使用GET获取新资源)
- 303的响应不能被缓存,但是Get到的新资源是可以被缓存的
-
1.302 Found。302返回码指示资源临时在另一个位置,该位置通过Location指定。如果302响应对应的请求方法不是GET或者HEAD,那么客户端在获得用户许可之前是不能自动进行重定向的,因为这有可能会改变请求的条件。在RFC1045和RFC2068中指明客户端在响应重定向时是不可以改变请求的方法的。但是在多数实现中,总是使用GET方法来获取新位置的资源。这样就将其实现为303的要求了。
2.303 See Other。请求的资源可以在另一个URI处找到,客户端必须使用GET方法来获取新位置的资源。不能缓存303响应,但是可以缓存第二次请求的响应。This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource.很多客户端识别303状态码,302状态码的实现其实就是对303状态码的响应。
3.307 Temporary Redirect。同303一样,对于非GET和HEAD请求不能自动重定向。与302的区别是: The Web client issues a request to the new location of the resource using the same request method it used in the current transaction (rather than always using GET).也就是说307相较于302来说,后续请求资源的方法是使用与当前交互相同的方法而不是全部使用GET。
由此可见:303和307的出现是明确了302中的混乱状态。建议以后使用303和307,302在以后将会被淘汰掉。