HTTP状态码有哪些?分别代表是什么意思?
大家好,我是IT修真院深圳分院第06期学员,一枚正直善良的web程序员。
今天给大家分享一下,修真院官网 JS-05任务中可能会使用到的知识点:
1.背景介绍
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。
当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码由三个十进制数字组成,三位数字代码分别代表着不同的请求状态,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。
2.知识剖析
HTTP状态码分类
HTTP状态码共分为5种类型:
1开头:(被接受,需要继续处理。)这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。
2开头 (请求成功)这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
3开头 (请求被重定向)这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 location 域中指明。
4开头:(请求错误)这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
5开头:(服务器错误)这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。
如何记忆这些状态码
Http 状态码是做Web开发的必备的基础知识,面试中也会经常出现这方面的考题。但是要记住全部的状态码不是一件容易的事,部分状态码记忆:
200 欢迎回来,主人 (正常;请求已完成。)
301 人家搬家了 (已移动 — 请求的数据具有新的位置且更改是永久的。)
307 不是这里,换个地方啦 (重新请求的URL,客户端自动重新请求新的地址)
400 不要把奇怪的东西给人家嘛 (错误请求 — 请求中有语法问题,或不能满足请求。)
403 这里不可以啦!(禁止 — 即使有授权也不需要访问。)
404 这里什么都没有 --- 人家是平的啦。 (找不到 — 服务器找不到给定的资源;文档不存在。)
405 打开方式不对 (资源被禁止)
414 这... 太长了啦 (请求 - URI 太长)
500 服务姬坏掉了啦 (内部错误 — 因为意外情况,服务器不能完成请求。)
503 不要...人家还没准备好啦 (无法获得服务 — 由于临时过载或维护,服务器无法处理请求。)
101 服务姬傲娇中 (服务器将遵从客户的请求转换到另外一种协议)
100 人家... 还要... (初始的请求已经接受,客户应当继续发送请求的其余部分。
其余http状态码介绍
3.常见问题
有哪些常见的状态码?
4.解决方案
一般只需要了解以下常见的状态码就够了:
200 OK:服务器成功处理了请求(这个是我们见到最多的)
301 Moved Permanently:资源移动。所请求资源自动到新的URL,浏览器自动跳转到新的URL
304 Not Modified:服务端的资源与客户端上一次请求的一致,不需要重新传输,客户端使用本地缓存的即可
400 Bad Request:用于告诉客户端它发送了一个错误的请求
404 Not Found:(页面丢失)未找到资源
500 Internal Server Error:服务器内部出现了错误
501 Internal Server Error:服务器遇到一个错误,使其无法对请求提供服务
5.编码实战
6.扩展思考
301和302都是重定向,他们之间有什么区别呢?
301为永久移动。请求的资源已被永久的移动到新URL,返回信息会包括新的URL,浏览器会自动定向到新URL。今后任何新的请求都应使用新的URL代替。
302为临时移动。与301类似。但资源只是临时被移动。客户端应该继续使用原有URL。
7.参考文献
参考文献:
菜鸟教程
让HTTP萌娘帮你记住状态码吧
8.更多讨论
问题1:304 是什么?
答:304表示未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
问题2:403 是什么?
答:服务器理解请求客户端的请求,但是拒绝执行此请求。
问题3:为什么要避免304请求?
答:因为我们在对文件设置缓存后,浏览器会将这些文件缓存在本地,当再次需要这些文件的时候,浏览器仍然会发送请求,然后服务器会返回304,告诉浏览器直接用本地的缓存就行了。这样和直接使用本地缓存相比,多了一次http请求。解决方案其实也简单,给缓存文件设置一个比较的max-age,需要更新的时候添加版本号就可以了。