状态码类别

状态码 类别 原因短语
1xx 信息状态码 接收的请求正在处理
2xx 成功状态码 请求正常处理完毕
3xx 重定向状态码 需要进行附加操作以完成请求
4xx 客户端错误状态码 服务器无法处理请求
5xx 服务器错误状态码 服务器处理请求出错

HTTP 304状态码的详细讲解

304 状态码或许不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应。

整个请求响应过程如下:
  • 客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。服务端只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 (附加条件还有:If-Modified-Since、If-Match、If-None-Match、If-Range)
  • 对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
  • 因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。当这些缓存有效的时候,通过 Fiddler 或HttpWatch 查看一个请求会得到这样的结果:

第一次访问 200
按F5刷新(第二次访问) 304
按Ctrl+F5强制刷新 200

Last-Modified 与 If-Modified-Since
  • 1.基本定义
    Last-Modified 与If-Modified-Since 都是标准的HTTP请求头标签,用于记录页面的最后修改时间。

  • 2.发送方向
    Last-Modified 是由服务器发送给客户端的HTTP请求头标签
    If-Modified-Since 则是由客户端发送给服务器的HTTP请求头标签

  • 3.应用场景
    (1)Last-Modified
    在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
    Last-Modified: Fri, 12 May 2006 18:53:33 GMT
    后面跟的时间是服务器存储的文件修改时间
    (2)If-Modified-Since
    客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
    If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
    后面跟的时间是本地浏览器存储的文件修改时间

如果服务器端的资源没有变化,则时间一致,自动返回HTTP状态码304(Not Changed.)状态码,内容为空,客户端接到之后,就直接把本地缓存文件显示到浏览器中,这样就节省了传输数据量。

如果服务器端资源发生改变或者重启服务器时,时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。

以上操作可以保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。

2xx 成功

  • 200 OK
    表示从客户端发来的请求在服务端正常处理了
  • 204 No Content
    表示只需要从客户端往服务器发送信息,而服务器不需要发送新信息内容的情况
  • 206 Partial Content
    表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求,响应报文里应该有 Content-Range 指定范围的实体内容

3xx 重定向

  • 301 Moved Permanently
    永久重定向,表示请求的资源已被分配了新的 URI,以后应使用资源现在所指定的 URI
  • 302 Found
    临时重定向,该状态吗表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI访问
  • 303 See Other
    该状态码表示请求对应资源存在另一个 URI,应该使用 GET 方法定向获取请求的资源

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

  • 304 Not Modified
    该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但是从缓存获取资源
  • 307 Temporary Redirect
    临时重定向,于 302 有相同的含义,但它会遵照浏览器的标准,不会从 POST 变为 GET,但对处理响应行为时,每种浏览器可能出现不同的情况

4xx 客户端错误

  • 400 Bad Request
    该状态码表示请求报文中存在语法错误,当这种错误发生时,需要修改请求内容后再次发送请求
  • 401 Unauthorized
    该状态码表示发送的请求需要有通过 HTTP 认证(BASIC认证、DIGEST认证)的认证信息
  • 403 Forbidden
    该状态码表明请求资源的访问呗服务器拒绝了,服务器没有必要给出拒绝的详细理由。一般时访问权限出现某些问题(如从未授权发送源 IP 地址试图访问)等情况都是可能发生 403 的
  • 404 Not Found
    该状态码表示服务器上无法找到请求的资源,除此之外,也可以是服务器端拒绝请求且不行说明理由时使用

5xx 服务器错误

  • 500 Internal Server Error
    该状态码表示服务端在执行请求时发生了错误,也有可能是 web 应用存在的 bug 或某些临时的故障
  • 503 Service Unavailable
    该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。(如果事先知道解除以上状况需要的时间,最好写入 Retry-After 首部字段返回给客户端)

注意:状态码和状况的不一致,不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如 web 应用程序内部发生错误,状态码依旧返回 200 OK,这种情况也经常遇到

状态码(304 详解)相关推荐

  1. HTTP状态码304详解

    图和代码来源理解HTTP缓存和304状态码 下图是使用express启动了一个服务,启动之后浏览器访问两次localhost:8080所得请求.响应头 var express = require('e ...

  2. HTTP状态码100-500+详解

    HTTP状态码100-500+详解 1xx响应信息提示   这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx  • 100 - Continue 初始的请求已经接受,客 ...

  3. nginx中500,501,502,503,504,505状态码的详解及出现的原因/区别(转)

    转载别人的,写的确实很直白明了,学习巩固了!很多人都是知其人不知所以然 nginx5xx系列状态码详解 一.502 - Bad Gateway fpm 官方解释:作为网关或者代理工作的服务器尝试执行请 ...

  4. 查看HTTP请求返回状态码对照表详解

    状态码 描述 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议 200 OK 指示 ...

  5. AJAX 状态值(readyState)与状态码(status)详解

    总结:status体现的是服务器对请求的反馈,而readystate表明客户端与客户的交互状态过程. 1- AJAX状态值与状态码区别AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成 ...

  6. html状态码206,详解浏览器 206 状态码206 Partial Content

    HTTP 206 Partial Content成功状态响应代码指示请求已成功并且主体包含所请求的数据范围,如Range请求标题中所述. 如果只有一个范围,则整个响应Content-Type设置为文档 ...

  7. HTTP状态码304与ETag详解

    总结一下,最近项目开发遇到的.由于缓存框架设计时,缓存请求文件时只以发起请求的url 为key,导致在客户端发起url 相同,传参类型不同的请求时,交替请求会出现,带上一次请求返回的etag ,进行下 ...

  8. http状态码查询,各种返回码的详解(200、206、500、416、403、404)

    http状态码查询,各种返回码的详解(200.206.500.416.403.404) 文章由帮客之家于2013-11-25 12:11:44分享 评论(324) HTTP状态码,我都是现查现用. 我 ...

  9. 使用Gin框架集成JWT,源码、详解、面试问题

    使用Gin框架集成JWT,源码.详解.面试问题 一.什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). ...

最新文章

  1. 基于matlab的元音共振峰的估算
  2. SQL注入——SQLmap的进阶使用(十三)
  3. osgText中的setAxisAlignment和setAlignment的区别
  4. 常见形式 Web API 的简单分类总结
  5. 三星识别文字_比亚迪电子助力三星Galaxy Note 10系列霸气首发!
  6. git 修改commit_Git从8到13 深入了解Git特性
  7. 设计灵感|总有一款对话界面符合你的应用风格!
  8. php表单实现分页,**PHP分步表单提交思路(分页表单提交)
  9. CCF NOI1098 森林
  10. pcie标准_24Pin接口再见!华擎推出首款ATX12VO标准的Z490主板
  11. esxi命令关机虚拟机_虚拟机镜像使用说明
  12. Nsight Visual Studio 调试
  13. AD10利用SMART PDF打印PCB文件(供华龙焊板子参考)
  14. 虚拟化服务器杀毒软件,虚拟机需要安装杀毒软件吗
  15. C++实现二叉树的非递归遍历
  16. 考研二战,入职华为,反向调剂电子科大深圳
  17. java 字符表 chr3,ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(3...
  18. Windows命令窗口输入命令报错不是内部或外部命令,也不是可运行的程序 或批处理文件
  19. 直播商城源码,商城开发实现商城底部导航栏
  20. 深度系统deepin

热门文章

  1. 增加BUG的测试版本字段
  2. matlab设置xyz,matlab基本XYZ立体绘图命令
  3. JAVA初级工程师面试36问(一)
  4. 【博弈论】第二讲:纳什均衡的混合战略(有限数量战略)
  5. WIN7、WIN10下更换磁盘图标
  6. java 解析p12_java引用微信支付的p12证书文件
  7. TcaplusDB君 · 行业新闻汇编(11月08号)
  8. js数组查找最接近_js查找数组所有符合条件数据 js替换数组中的某个元素
  9. 【转发】JS实现密码加密
  10. Ubuntu拔掉挂载硬盘后一直卡在ubuntu的logo处以及windows强制关机会出现ubuntu出现系统恢复模式