面试常问有关响应状态码3XX

3,312 阅读3分钟

前端开发的小伙伴们是不经常被问到3xx响应状态码

一般咱们前端小伙子知道的 3xx属于的是重定向范围,

但是面试官一般会问到这几个常用的301、302、303、304、307这几个状态码的作用和区别。

那么301代表什么

301的英文是 moved permanently (永久性重定向)看下图

永久性重定向。服务器对你客户端说:‘你现在请求的资源不在我这,我没法给你,但是我可以告诉你,你可以去这个某个地址拿到这个资源,并且以后这个资源都会在我给你的地址那,你保存一下这地址,以后不要在找我要这个资源了’。

实际上服务器和客户端是这么交流的,请求的资源已被分配到新的URI(统一资源标识符),以后应使用资源现在所指的URI。


302 代表什么呢?

302 的英文表示是 Found,临时性重定向,看下图


服务器告诉你:‘你现在所请求的资源目前不在我这,被临时放到某个地址的服务器了,但是以后可能还会从某个服务器那拿过来,这次我给你一个临时的地址你去请求吧。

303代表什么呢?

303 SeeOther  也是临时重定向的一种,是不是很多小伙伴都懵逼了。什么鬼啊,来看图


服务器告诉你:‘你现在所请求的资源目前不在我这,被临时放到某个地址的服务器了,但是以后可能还有从某个服务器那拿过来,这次我给你一个临时的地址你去请求吧,不过你去哪请求的时候必须使用GET方法,这点与302状态码有区别。

比如,当时使用post方法访问CGI程序,其执行后的处理结果是希望处理结果是希望客户端能以get方法重定向另一个uri上去时,返回303状态码。虽然302Found状态码也可以实现相同的功能,但是303是最合理的。

当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送

307代表什么呢?

307 Temporary Rediract临时性重定向

临时重定向。该状态码与302Found有着相同的含义。尽管302标准禁止POST变成GET,但实际使用时大家并不遵守。

307 会遵照浏览器标准,不会从post变成get。但是对于处理响应时的行为,每种浏览器有可能出现不同的情况

304 Not Modidied 英文直译 没有发生改变

304虽然属于3xx类别中但是和重定向没有关系,304 是一个非常好玩的状态,当浏览器拿到状态码是304 的时候,就会从本地资源中拿请求的资源或者代理服务器直接返回本地的资源,304属于走缓存,这个交互机制会在以后的文章写出来,请大家多多关顾