HTTP状态码与请求方法
1. HTTP状态码
HTTP状态码(HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。
出现在服务器返回给客户端的响应报文头部中。
1.1 消息(1xx)
这一类型的状态码,代表请求已被接受,需要继续处理。
状态码 | 含义 | |
---|---|---|
100 | Continue | 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 |
101 | Switching Protocols | 请求者已要求服务器切换协议,服务器已确认并准备切换。 |
102 | Processing | 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。此时服务器已经收到了客户端的请求,正在处理,但暂时还没有可接触的响应。可以用于防止客户端超时并假设请求丢失。 |
1.2 成功(2xx)
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
状态码 | 含义 | |
---|---|---|
200 | OK | 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。 |
201 | Created | 请求成功并且服务器创建了新的资源。 |
202 | Accepted | 服务器已接受请求,但尚未处理。 |
203 | Non-Authoritative Information | 服务器已成功处理了请求,但返回的信息可能来自另一来源。 |
204 | No Content | 服务器成功处理了请求,但没有返回任何内容。 |
205 | Reset Content | 服务器成功处理了请求,但没有返回任何内容。 |
206 | Partial Content | 服务器成功处理了部分 GET 请求。 |
207 | Multi-Status | 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。 |
1.3 重定向(3xx)
这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
状态码 | 含义 | |
---|---|---|
300 | Multiple Choices | 针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。 |
301 | Moved Permanently | 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 |
302 | Move Temporarily | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
303 | See Other | 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 |
304 | Not Modified | 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 |
305 | Use Proxy | 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。 |
307 | Temporary Redirect | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
1.4 请求错误(4xx)
这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
常用状态码 | 含义 | |
---|---|---|
400 | Bad Request | 表示客户端请求的语法错误,服务器无法理解,例如 url 含有非法字符、json 格式有问题。 |
403 | Forbidden | 表示服务器理解请求客户端的请求,但是拒绝请求。 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。 |
1.5 服务器错误(5xx,6xx)
这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。
常用状态码 | 含义 | |
---|---|---|
500 | Internal Server Error | 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。 |
502 | Bad Gateway | 服务器作为网关或代理,从上游服务器收到无效响应。 |
503 | Service Unavailable | 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。 |
2. HTTP请求方法
2.1 GET方法
- GET方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回相应内容。
- get把请求的参数卸载URL后面,不安全;
- get请求本身没有限制URL长度,但不同的浏览器对其长度有限制。
2.2 POST方法
- POST方法与GET功能类似,一般用于传输实体的主体;
- POST方法主要目的并不是获取响应主体内容,而是向服务器提交内容;
- POST方法在提交数据时,通过请求报文中的请求体传送数据,克服了GET方法不能保密以及传送数据量小的缺点;
GET和POST区别:
- GET在请求过程中的参数在URL中;而POST的请求数据放在HTTP请求包的body里;
- GET请求有大小限制;而POST没有;
- GET请求参数显示在地址栏上;而POST不会;
2.3 PUT方法
- PUT方法从客户端向服务器传送的数据取代指定的文档的内容;
- PUT方法与POST方法不同在于:PUT是幂等的,而POST不是;
幂等:不管操作多少次,结果都是一样的。
如,建立了一个博客,有很多内容要发,就用POST;而如果有头像要换,那么就需要用PUT。
总体来说,在创建对象时用POST,更新对象时用PUT。 - PUT更多被用于传输资源;
鉴于http1.1不存在验证机制,存在安全隐患,因此一般web网站不使用put方法,可以结合后端代码的逻辑,用POST请求实现更新对象的操作。
2.4 HEAD
类似于GET请求,只不过返回的内容中没有具体的内容,用于获取报文头部。
经常用来测试超链接的有效性,测试其是否能够访问、是否有更新等。
2.5 DELETE
用于按照请求的URI,请求服务器删除指定的资源。
和PUT一样没有安全验证机制。
2.6 OPTIONS
用来查询真毒已请求URI制定的资源支持的方法。
2.7 TRACE
回显服务器收到的请求,主要用于测试或诊断。
客户端可以通过TRACE查询发送出去的请求到底是怎么被加工修改的。【通常不会用到,容易引发攻击】
2.8 CONNECT
开启一个客户端与所请求之间的双向沟通的通道,用于创建隧道。
一般在使用代理服务器访问互联网时,才会用到:如使用代理服务器访问facebook,首先浏览器向代理服务器发送一个connect,代理服务器返回状态码200表示连接建立了,之后浏览器和服务器开始握手、交换数据,而代理服务器只是传送数据,不能读取其中的数据。
参考链接:
[1] https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=ge_ala#1
[2] https://mp.weixin.qq.com/s?__biz=Mzg5ODAxMjMyNA==&mid=2247483724&idx=1&sn=a32b00e2a26adf948d5df1da05c7a580&chksm=c0684487f71fcd91eef8c78d87a32197c7df20de415f5463e52f40d22afd1ca43aa657ad77ea&scene=27
[3] https://www.cnblogs.com/fengyinxu/p/http-status-code-102.html