计网里面HTTP虽然只是一小部分但是却在面试中老是被问到,HTTP的报头和状态码更是经常考到的高频考点,今天来补充一下这方面的知识。
首先是HTTP的报头
HTTP的报头分为请求行、请求头部和请求数据,它们之间通过回车换行分隔。请求行中有三个内容,然后它们按照空格分隔,分别是请求方法(POST、GET)、请求的URL、以及使用的协议版本号,接着是若干个头部字段名与头部字段值,头部字段结束时,使用一对回车换行符进入请求数据部分。
以下图源:一文牢记HTTP状态码(图解HTTP状态码) - 云+社区 - 腾讯云 (tencent.com)
为了使客户端知晓请求的结果或者发生的错误,HTTP协议规定了若干状态码:
类别 | 原因短语 | |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
200 英文名称:OK 表示客户端的请求被成功响应了。
204 英文名称:NoContent 该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
206 英文名称:Partial Content 该状态码表示服务端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含Content-Range制定范围的实体内容。
301 英文名称:Moved Permanently, 永久重定向 该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。也就是说,如果已经把资源对应的URI保存为书签了,这是应该按Location首部字段提示的URI重新保存。
302 英文名称:Found,临时重定向 该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。与301相似,不同之处在于本次重定向是临时的,资源的位置之后可能还会发生改变。客户端应继续使用原URL。
303 英文名称:See Other 该状态码表示由于请求对应的资源存在着另一个URI,应使用GET/POST方法定向获取请求的资源。303状态码和302状态码有着相同的功能,但303状态码明确表示客户端应采用GET/POST方法获取资源,这点与302状态码有区别。
301 302 303 之间的联系
当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。301,302标准是禁止将POST方法改变成GET方法,但实际使用时大家都会这么做。
304 Not Modified 未修改。
表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况 。例如,客户端请求的资源在客户端本地已有缓存,会在请求头部中加入“If-Modified-Since", "If-None-Match"等字段,服务端根据这些字段信息判断这些资源信息是否经过修改,如果没有则返回 304 状态码,客户端可以直接使用缓存中的资源。
307 Temporary Redirect临时重定向 临时重定向。该状态码与302有着相同的含义。尽管302标准禁止POST变换成GET,但实际使用时大家并不遵守。307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证 若是第一次返回,说明请求认证,若是第二次返回,说明认证失败。
该状态码表示发送请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用于质询(challenge)用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。
403 Forbidden 访问被拒绝 可能由于访问权限不足
404 Not Found 表示请求的资源找不到,通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。当然,除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error 服务器内部错误该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。表示服务器g了。
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中。
总结最常见的状态码:
200 - 请求成功(程序员喜闻乐见的)
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在(用户最不想看到的)
500 - 内部服务器错误(程序员最害怕的)
:)希望明天三面ok