关于HTTP状态码之301 302 304

301、302、304

  1. 301 Moved Permanently 永久移动。是指请求的资源已被永久的移动到新的URL,返回信息会包括新的URL,浏览器还会自动定向到新的URL。今后任何新的请求都应该使用新的URL来代替。
  2. 302 Found 临时移动。与301类似。但是资源只是临时被移动。客户端应该继续使用原有的URI
  3. 304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存所访问过的资源。通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。

什么时候会出现304
如果客户端发送了一个带条件的GET请求已被允许,而文档中的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。即客户端和服务器端只需要传输很少的数据量来做文件的校验,如果文件没有修改过,则不需要返回全量的数据。

304的缓存原理
1.服务器首先产生Etag,服务器可在稍后使用它来判断页面是否被修改。本质上客户端通过该记号传回服务器要求服务器验证(客户端)缓存。
2.304是HTTP的状态码,服务器用来标识这个文件没有被修改,不返回内容,浏览器接受到这个状态码会去去找浏览器缓存的文件。
3.流程:

  • 客户端请求一个页面A。服务器返回页面A,并在A上加一个Tage客服端渲染该页面,并把Tage也存储在缓存中。客户端再次请求页面A。
  • 并将上次请求的资源和ETage一起传递给服务器。服务器检查Tage.并且判断出该页面自上次客户端请求之后未被修改。直接返回304。
  • last-modified: 客服端请求资源,同时有一个last-modified的属性标记此文件在服务器最后修改的时间
    客服端第二次请求此url时,根据http协议。浏览器会向服务器发送一个If-Modified-Since报头,
    询问该事件之后文件是否被修改,没修改返回304。

有了Last-Modified,为什么还要用ETag?
1、因为如果在一秒钟之内对一个文件进行两次更改,Last-Modified就会不正确(Last—Modified不能识别秒单位的修改)
2、某些服务器不能精确的得到文件的最后修改时间
3、一些文件也行会周期新的更改,但是他的内容并不改变(仅仅改变修改的事件),这个时候我们并不希望客户端认为文件被修改,而重新Get。

 ETag,为什么还要用Last-Modified?
 1、两者互补,ETag的判断的缺陷,比如一些图片等静态文件的修改
 2、如果每次扫描内容都生成ETag比较,显然要比直接比较修改时间慢的多。

ETag是被请求变量的实体值(文件的索引节,大小和最后修改的时间的Hash值)
 1、ETag的值服务器端对文件的索引节,大小和最后的修改的事件进行Hash后得到的。

301和302的区别
(1)字面上区别:301永久重定向 302临时重定向。
(2)301比较常用的场景是使用域名跳转。302用来做临时跳转 (例如:未登录的用户访问用户中心重定向到登录页面)


HTTP常见状态码总结

2XX (成功处理了请求状态)

  • 200 : OK 请求成功。一般用于GET与POST请求。(服务器已经成功处理请求,并提供了请求的网页)
  • 201:Created 已创建。成功请求并创建了新的资源。(用户新建或修改数据成功)
  • 202:Accepted 已接受。已经接受请求,单未处理完成。(一个请求已经进入后台)
  • 204 :No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档。(用户删除成功)

3XX (每次请求使用的重定向不要超过5次)

  • 303:See Other 查看其他地址。与301类似,使用GET和POST请求查看。

4XX (表示请求可能出错,妨碍了服务器的处理)

  • 400:Bad Request 客户端请求的语法错误,服务器无法理解。(服务器不理解请求的语法)
  • 401:Unauthorized 请求要求用户的身份认证(用户没有权限(用户名,密码输入错误))
  • 403:Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求。(用户得到授权(与401相反),但是访问被禁止)
  • 404:Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面(服务器找不到请求的网页)

5XX (表示服务器在处理请求的时候发生内部错误)
500:Internal Server Error 服务器遇到错误,无法完成请求。
503:Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 (服务器目前无法使用(超载或停止维修 ))

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值