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。 

如果要让数据不被任何客户端缓存: 

Php代码
  1. function cache_none($interval = 60)   
  2. {   
  3.   // 向后兼容HTTP/1.0   
  4.    header("Expires: 0");   
  5.    header("Pragma: no-cache");   
  6.   // 支持HTTP/1.1   
  7.    header("Cache-Control: no-cache,no-store,max-age=0,s-maxage=0,must-revalidate");   
  8. }  

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在以后将会被淘汰掉。

 

posted @ 2012-03-19 11:06  cornellbox  阅读(1647)  评论(0编辑  收藏  举报