常见的http状态码
1xx(信息型状态码)
- 100 Continue:客户端应当继续发送请求。
2xx (成功状态码)
- 200 OK:请求成功。
201 Created:请求成功并且服务器创建了新的资源。
- 这个状态码表示请求成功并且服务器创建了新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应。
- 返回201状态码时,响应的主体部分应该指出由哪些资源URI引用了已创建的资源,以及那些资源的最初的状态。同时,新创建的资源的URI也应该在响应的Location字段中给出。
- 这个状态码常见于RESTful风格的API设计,在创建新资源(如用户注册,文章发布等)时,如果服务器成功创建了资源,就会返回201状态码。
使用场景:
假设我们有一个在线博客平台,用户可以通过POST请求创建新的博客文章。以下是一个可能的HTTP请求和响应的例子:
客户端(也就是用户的浏览器或者我们的应用)发送一个POST请求给服务器,请求的内容可能是这样的:
POST /articles HTTP/1.1 Host: www.example.com Content-Type: application/json Authorization: Bearer some-auth-token { "title": "My First Post", "content": "This is my first post on this blog." }
服务器接收到请求后,会解析请求的内容,然后在数据库中创建新的文章记录。创建成功后,服务器会返回一个HTTP响应给客户端,响应的内容可能是这样的:
HTTP/1.1 201 Created Content-Type: application/json Location: /articles/123 { "id": 123, "title": "My First Post", "content": "This is my first post on this blog.", "createdAt": "2024-05-05T12:34:56Z" }
在这个响应中,状态码201表示文章已经成功创建。Location头部字段包含了新创建的文章的URI。响应的主体部分返回了新创建的文章的一些详细信息,如ID,标题,内容和创建时间等。
204 No Content:无内容
- 这个状态码表示服务器成功处理了请求,但是没有返回任何内容。如果客户端是一个用户代理(如浏览器),那么用户代理应该保持当前的文档视图,除非用户明确地刷新或者请求了新的数据。
- 这个状态码常常在一个成功的PUT请求后或者DELETE请求后返回,以表示请求的处理已经成功,但是响应中不再需要包含实体的主体内容。例如,当你向服务器发送一个DELETE请求来删除一条记录的时候,服务器在删除完毕后,可以返回一个204状态码,告诉客户端已经成功处理了请求,但是没有额外的内容需要返回。
- 此外,返回204状态码也是一种常见的方式,用来进行Ajax或RESTful API的轮询。客户端定期向服务器发送请求,查看是否有新的数据可用。如果没有新的数据,服务器会返回204状态码,告诉客户端没有新的内容。
使用场景
假设我们有一个在线博客平台,用户可以通过DELETE请求删除自己的博客文章。以下是一个可能的HTTP请求和响应的例子:
客户端(也就是用户的浏览器或者我们的应用)发送一个DELETE请求给服务器,请求的内容可能是这样的:
DELETE /articles/123 HTTP/1.1 Host: www.example.com Authorization: Bearer some-auth-token
服务器接收到请求后,会在数据库中找到ID为123的文章,并删除这篇文章。删除完成后,服务器会返回一个HTTP响应给客户端,响应的内容可能是这样的:
HTTP/1.1 204 No Content
在这个响应中,状态码204表示文章已经成功删除,并且没有其他内容需要返回。这就是一个使用204状态码的例子。
这个例子中,响应体是空的。这是因为在删除资源后,服务器没有更多的内容需要告知客户端。因此,返回204状态码是最恰当的。客户端在接收到204状态码后,知道删除操作已经成功,然后可以进行后续的处理,如更新用户界面等。
3xx (重定向状态码)
301 Moved Permanently:永久移动
- 这个状态码表示请求的资源已被永久移动到新位置,请求的URL已移走,且将来任何新的请求都应使用其中返回的URI。
- Response中应该包含一个Location URL, 以便客户端进行重定向。
- 当服务器返回这个响应(即,资源已被移动到新的位置),客户端应该开始使用新的URL,而不是原来的那个URL。这意味着所有的链接都应该更新为指向新的URL。
- 301是永久性重定向,意味着资源永久性地移动到了新的位置。此后,搜索引擎的蜘蛛在抓取新的内容以及建立索引时,也将使用新的URL。301重定向对于SEO是友好的,因为它将旧的网址的权重传递给新的网址。
- 它的特点是,除非用户手动清除缓存,否则浏览器会记住这个重定向关系,下一次请求旧的URL时,浏览器就直接访问新的URL,不再向服务器请求这个重定向。
302 Found:临时移动
- 请求的URL已临时移动至其他位置
- 它的意思是,请求的资源现在临时从不同的URI响应请求。由于这种重定向是临时的,客户端应继续使用原有的URI。
- 在具体使用中,如果浏览器接收到302状态码,通常会自动在HTTP头部找到“Location”字段,并在那里找到新的URI,然后自动重新发送请求。
- 需要注意的是,302状态码表示的是一种临时重定向,也就是说,这只是暂时的状态,未来用户请求的URI还有可能发生变化。如果是永久重定向,应该使用301状态码。
- 浏览器在每次访问旧的URL时,都会向服务器发送请求,询问是否需要重定向。
303 See Other:
- 这个状态码表示由于请求对应的资源存在于另一个URI,应使用GET方法获取。当在响应中发送这个状态码后,浏览器会自动从Location字段中的URI获取资源。
- 这常常应用在POST请求处理后的重定向上,防止表单被重复提交。比如,当你提交一个表单后,服务器处理完表单数据,然后发送一个303响应,告诉浏览器去另一个页面查看处理结果。因为303响应要求浏览器用GET方式查看,所以浏览器就不会重复提交表单。
- 这个状态码让Web应用可以避免“重复提交”表单的问题。例如,在进行电子商务交易时,303状态码可以防止用户在刷新交易结果页面时重复提交交易。
304 Not Modified:未修改
- 客户端有缓冲的文档并发出了一个条件性的请求。服务器告诉客户,原来缓冲的文档还可以继续使用。
- 这个状态码是在使用条件请求头字段(例如:If-Match, If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since)进行条件请求时使用的。当服务器上的资源自上次请求后未发生变化时,服务器会返回此状态码。
- 返回304状态码时,服务器不会返回任何资源的具体内容。这样做的目的是为了利用浏览器或者其他客户端的缓存,因为如果资源没有发生变化,那么就没有必要再次传输相同的资源内容,直接使用客户端缓存的版本即可。这种方式可以提高网页加载速度,节省网络带宽。
4xx (客户端错误状态码)
- 400 Bad Request:请求出现语法错误。
- 401 Unauthorized:未授权,需要进行身份验证。
- 403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
- 404 Not Found:请求的资源未找到。
5xx (服务器错误状态码)
- 500 Internal Server Error:服务器内部错误,无法完成请求。
- 501 Not Implemented:服务器不支持当前请求所需要的某个功能。
- 503 Service Unavailable:由于临时的服务器维护或者过载,服务器当前无法处理请求。
- 504 Gateway Timeout:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识或者辅助服务器)收到响应。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。