重定向3XX

 

302 Found 我理解的大致意思:客户端让服务器去一个地方(URI)找一份东西。服务器找到之后(Found),会告诉客户端,你要找的东西我找到了,但是它没有放在以前的地方,它已经换了一个地方(换了URI),它现在呆的那个地方也只是暂时的,可能以后还会更换。

302 Found相近的是301 Moved Permanently (永久的移动)就可以理解成,客户端让服务器去一个地方找一份东西,服务器找到了,并且告诉客户端,这份东西的位置已经永久变更了,并且如果你在之前有将那个地址存为书签的话,服务器会自动帮你把那个地址改为当前那份东西的地址。

另外,还有一个与302相近的是303 See Other(查看其它)。服务器告诉客户端,你请求的资源在另外一个地址上可以找到,所以同样可以理解成,303表示的也是请求对应的地址发生了改变。但是不一样的是,303向客户端提出了客户端应当采用GET方法获取资源。而301和302在标准里是禁止将Post方法修改为Get方法的,但是有的浏览会不按照标准来,会修改请求方法。

然后就是304 Not Modified(没有修改过)。情景:客户端向浏览器请求一个文件,并且告诉服务器,这个文件客户端的缓存里面有,所以客户端在发送这个请求的时候会包含If Modified Since(如果它被修改了....你就发一份新的给我),这个时候,如果服务器发现这个文件在服务器最后一次更新的时间在客户端的Last Modified之前,那么就会返回一个304,如果这个文件已经修改了,就会发一份最新的给客户端,同时返回200。

“对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。”

 

同时,301和302还有两个卵生兄弟,307 Temporary Redirect(临时重定向)和308 Permanent Redirect(永久重定向),

在功能上307和302,308和301是一样的,但是由于在部分浏览器301和302依然会修改请求方法。所以才有了307和308,规定不允许修改请求方法。

 

 

你可能感兴趣的:(Http协议,学习心得)