你所知道的3xx状态码

Jan 25, 2016

1239

众所周知,我们都知道300-399这一系列的状态码代表的是重定向状态码。重定向状态码要么告知客户端使用替代位置来访问她们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容。如果资源已被移动,可发送一个重定向状态码和一个可选的Location首部来告知客户端已被移走,以及现在可以在哪里找到它。这样子,浏览器就可以在不打扰用户的情况下,透明地转到新的位置。

那么,接下来,我们从状态码出发,梳理一下3xx状态码(300-307),以及缓存一系列相关的东西。(注:HTTP/1.1版本的内容)

300 Multiple Choices

客户端请求一个实际指向多个资源的URL时会返回这个状态码。

比如说,一个站点提供了中文和英文两个版本,理想情况下,服务器应当向中文用户发送中文版,向英文用户发送英文版。HTTP提供了内容协商方法,允许客户端和服务器作这样的决定。内容协商包含客户端驱动的协商、服务器驱动的协商以及透明协商。

客户端驱动由客户端发起请求,服务器发送可选项的列表,客户端进行选择;服务器驱动是由服务器来检查客户端的请求首部集并决定提供提供哪个版本的页面(q值机制,Vary首部);透明协商是由某个中间设备(通常是缓存代理)代表客户端进行请求协商。

而300 Multiple Choices属于客户端驱动的协商。服务器发送回HTTP/1.1响应时,使用300 Multiple Choices响应代码。客户端浏览器收到这种响应时,可能会弹出对话窗口,让用户选择。其流程如下:

HTTP缓存相关的回顾

June 6, 2015

272

最近,对HTTP缓存一些相关知识有些遗忘,对Cache-Control、Expires、If-Modified-Since等首部有些混淆等,重新查阅了相关知识并记录如下。

对一条HTTP GET报文的缓存处理主要为一下7个步骤:

  1. 接收——缓存从网络中读取抵达的请求报文。
  2. 解析——缓存对报文进行解析,提取出URL和各种首部。
  3. 查询——缓存查看是否有本地副本可用,如果没有,就获取一份副本并将其保存在本地。
  4. 新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。
  5. 创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文。
  6. 发送——缓存通过网络将响应发送给客户端。
  7. 日志——缓存可选地创建一个日志文件条目来描述这个事务。

【文档过期】通过Cache-Control首部和Expires首部,HTTP让原始服务器向每个文档附加了一个“过期日期”。在缓存文档过期之前,缓存可以以任何频率使用这些副本,而无须与服务器联系。Expires首部和Cache-Control:max-age首部所做的事情本质上是一样的,那么为啥HTTP会有这两个头部?

Wen's Blog

文章归档 » 文章标签 » 博主:吴文伟,Web开发爱好者,专注于前端开发,该博客用于记录和分享平时遇到的一些问题以及知识。

订阅

联系方式

链接