当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。
当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码由三个十进制数字组成,三位数字代码分别代表着不同的请求状态,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用
HTTP状态码分类
HTTP状态码共分为5种类型:
1开头:(被接受,需要继续处理。)这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。
2开头 (请求成功)这一类型的状态码,代表请求已成功被服务器接收、理解、并接受
3开头 (请求被重定向)这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
4开头:(请求错误)这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
5开头:(服务器错误)这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实。
如何记忆这些状态码
Http 状态码是做Web开发的必备的基础知识,面试中也会经常出现这方面的考题。但是要记住全部的状态码不是一件容易的事,部分状态码记忆:
200 欢迎回来,主人 (正常;请求已完成。 )
301 人家搬家了 (已移动 — 请求的数据具有新的位置且更改是永久的。 )
307 不是这里,换个地方啦 (重新请求的URL,客户端自动重新请求新的地址)
400 不要把奇怪的东西给人家嘛 (错误请求 — 请求中有语法问题,或不能满足请求。 )
403 这里不可以啦!(禁止 — 即使有授权也不需要访问。 )
404 这里什么都没有 --- 人家是平的啦。 (找不到 — 服务器找不到给定的资源;文档不存在。 )
405 打开方式不对 (资源被禁止 )
414 这... 太长了啦 (请求 - URI 太长 )
418 我就是个杯具啊 (我是茶壶)
500 服务姬坏掉了啦 (内部错误 — 因为意外情况,服务器不能完成请求。 )
503 不要...人家还没准备好啦 (无法获得服务 — 由于临时过载或维护,服务器无法处理请求。 )
101 服务姬傲娇中 (服务器将遵从客户的请求转换到另外一种协议)
100 人家... 还要... (初始的请求已经接受,客户应当继续发送请求的其余部分。
有哪些常见的状态码?
200 OK 服务器成功处理了请求(这个是我们见到最多的)
304 Not Modified:服务端的资源与客户端上一次请求的一致,不需要重新传输,客户端使用本地缓存的即可
400 Bad Request:用于告诉客户端它发送了一个错误的请求
404 Not Found(页面丢失)未找到资源
500 Internal Server Error:服务器内部出现了错误
501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务
随便点击浏览后在刷新,有些200就变成了304
刚才访问时一些资源被缓存到了本地
为什么要避免304请求?
因为我们在对文件设置缓存后,浏览器会将这些文件缓存在本地,当再次需要这些文件的时候,浏览器仍然会发送请求,然后服务器会返回304,告诉浏览器直接用本地的缓存就行了。这样和直接使用本地缓存相比,多了一次http请求。解决方案其实也简单,给缓存文件设置一个比较的max-age,需要更新的时候添加版本号就可以了。
参考文献
参考一:CSDN博客:HTTP状态码http://blog.csdn.net/it_man/article/details/50235315
参考二:HTTP萌娘帮你记状态码http://www.nowamagic.net/librarys/veda/detail/2084
206状态是什么?
206状态码表示的是:"客户端通过发送范围请求头Range抓取到了资源的部分数据",一般用来解决大文件下载问解决,如官网的媒体文件
418为什么表示“我是茶壶”?
愚人节玩笑
301和302都是重定向,他们之间有什么区别呢?
301是永久重定向,比较常用的场景是做域名跳转。
302是临时重定向。比如未登陆的用户访问用户中心重定向到登陆页面。