HTTP协议
- HTTP是Web浏览器和Web服务器之间通信的标准协议
- HTTP指定客户端与服务器如何建立连接、客户端如何从服务器请求数据,服务器如何响应请求,以及最后如何关闭连接
- HTTP连接使用TCP/IP来传输数据
对于从客户端到服务器的每一个请求,都有4个步骤(基本HTTP1.0过程):
- 默认情况下,客户端在端口80 打开与服务器的一个TCP连接,URL中还可以指定其他端口
- 客户端向服务器发送消息,请求指定路径上的资源。这个请求包括一个首部,可选地(取决于请求的性质)还可以有一个空行,后面是这个请求的资源
- 服务器想客户端发送相应。响应以响应码开头,后面是包含元数据的首部,一个空行以及所请求的文档或错误信息
- 服务器关闭连接
HTTP 1.1响应码
响应码和信息 | 含义 | HttpURLConnection |
---|---|---|
1XX | 信息 | |
100 Continue | 服务器准备接受请求主体,客户端应当发送请求主体;这允许客户端在请求中发送大量数据之前询问服务器是否将接受请求 | N/A |
101 Switching Protocols | 服务器接受客户端在Upgrade首部字段中要求改变应用协议的请求,如从HTTP改为WebSockets | N/A |
2XX Successful | 请求成功 | ---- |
200 OK | 最常见的响应码。如果请求方法是GET或POST,所请求的数据与正常的首部一起包含在响应中。如果请求方法是HEAD则只包含首部信息 | HTTP_OK |
201 Created | 服务器已经在响应主体中指定的URL出创建了资源。客户端现在应尝试加载该URL。这个响应码只在响应POST请求时发送 | HTTP_CREATED |
202 Accepted | 这是个很不常见的响应,表示请求(一般是POST)已经被处理,但处理尚未结束,所以不会返回任何响应。不过,服务器应当为用户返回一个HTML页面解释这个情况,并估计请求可能何时结束,理想情况下要提供某种状态监视器的链接 | HTTP_ACCEPTED |
203 Non-authoritative Information | 由缓存代理或其他本地资源返回资源的表示,不能保证是最新的 | HTTP_NON_AUTHORITATIVE |
204 No Content | 服务器已经成功处理了请求,但没有信息发回给客户端,这一般是由于服务器上的表单处理程序编写的很差,只接受数据却不向用户返回响应 | HTTP_NO_CONTENT |
205 Reset Content | 服务器已经成功地处理了请求,但没有信息发回给客户端。此外,客户端应当清除发送请求的表单 | HTTP_RESET |
206 Partial Content | 服务器返回客户端请求的资源的一部分(使用HTTP的字节范围扩展),而不是整个文档 | HTTP_PARTIAL |
226 IM Used | 响应得到delta编码 | N/A |
3XX Redirection | 重定位及重定向 | |
300 Multiple Choices | 服务器为所请求的文档提供一组不同的表示(例如PostScript和PDF) | HTTP_MULT_CHOICE |
301 Moved Permanently | 资源已经移动到一个新的URL。客户端应当自动加载这个URL的资源,更新所有指向原URL的书签 | HTTP_MOVED_PERM |
302 Moved Temporarily | 这个资源暂时位于一个新的URL,但其位置在不久的将来还会再次改变,所以不应当更新书签。有时有些代理要求用户在访问Web之前先在本地登录,此时会用到这个响应码 | HTTP_MOVED_TEMP |
303 See Other | 一般用于响应POST表单请求,这个响应码表示用户应当使用GET从另一个不同的URL获取资源 | HTTP_SET_OTHER |
304 Not Modified | If-Modified-Since 首部指示客户端只需要最近更新的文档。如果文档没有更新,就会返回这个状态码。在这种情况下,客户端应当从缓存中加载这个文档 | HTTP_NOT_MODIFIED |
305 Use Proxy | Location 首部字段包含将提供响应的代理的地址 | HTTP_USE_PROXY |
307 Temporary Redirect | 类似于响应码302,但不允许HTTP方法改变 | N/A |
308 Permanent Redirect | 类似于响应码301,但不允许HTTP方法改变 | N/A |
4XX | 客户端错误 | |
400 Bad Request | 客户端想服务器发出的请求使用了不正确的语法。这在正常的Web浏览时很不常见,但是在调试定制客户端时比较常见 | HTTP_BAD_REQUEST |
401 Unauthorized | 访问这个页面需要身份认证,一般是用户名和口令。用户名和口令中可能有一个没有给出,或者用户名和口令无效 | HTTP_UNAUTHORIZED |
402 Payment Required | 现在没有使用,但将来可能用于指示访问该资源需要某种付费 | HTTP_PAYMENT_REQUIRED |
403 Forbidden | 服务器理解请求,但有意地拒绝进行处理。身份认证没有任何帮助。当客户端超出其配额时有时会使用这个响应码 | HTTP_FORBIDDEN |
404 Not Found | 最常见的错误响应,指示服务器找不到所请求的资源。它可能指示一个不正确的链接,已经移走而没有转发地址的文档,拼写错误的URL或其他类似情况 | HTTP_NOT_FOUND |
405 Method Not Allowed | 请求方法不支持指定的资源;例如,试图在不支持PUT的Web服务器上使用PUT放置文件,或者使用POST提交到只支持GET的URI | HTTP_BAD_METHOD |
406 Not Acceptable | 所请求的资源不能以客户端希望的格式提供,客户端期望的格式由请求HTTP首部的Accept字段指示 | HTTP_NOT_ACCEPTABLE |
407 Proxy Authentication Required | 中间代理服务器要求客户端在获取所请求的资源之前,先对客户端进行身份认证(可能采用用户名和口令的形式) | HTTP_PROXY_AUTH |
408 Request Timeout | 客户端用了太长时间发送请求,可能是因为网络拥塞的原因 | HTTP_CLIENT_TIMEOUT |
409 Conflict | 一个临时冲突阻止了请求的实现。例如,两个客户端试图同时PUT相同的文件 | HTTP_CONFLICT |
410 Gone | 与404类似,但更有把握地确定资源的存在性。资源已经被有意地删除(不是移走),不能恢复。应当删除相应的链接 | HTTP_GONE |
411 Length Required | 客户端必须在请求HTTP首部中发送一个Content-length字段,但没有做到 | HTTP_LENGTH_REQUIRED |
412 Precondition Failed | 客户端在请求HTTP首部中指定一个请求条件没有满足 | HTTP_PRECON_FAILED |
413 Request Entity Too Large | 客户端请求主体大于服务器一次能够处理的大小 | HTTP_ENTITY_TOO_LARGE |
414 Request-URI Too Long | 请求的URI太长。这对于防止某种缓冲区溢出攻击很重要 | HTTP_REQ_TOO_LONG |
415 Unsupported Media Type | 服务器不理解或不接受请求主体的MIME content-type | HTTP_UNSUPPORTED_TYPE |
416 Requested range Not Satisfiable | 服务器无法发送客户端所请求的字节范围 | N/A |
417 Expectation Failed | 服务器无法满足客户端在Expect-request首部字段中给定的期望 | N/A |
418 I‘m a teapot | 尝试用蜜罐泡咖啡 | N/A |
420 Enhance Your Calm | 服务器分级限制请求。这是非标准的,仅用于Twitter | N/A |
422 Unprocessable Entity | 不能识别请求主体的内容类型,请求主体的语法是正确的,只是服务器无法处理 | N/A |
424 Failed Dependency | 由于之前一个请求的失败,导致这个请求失败 | N/A |
426 Upgrade Required | 客户端使用一个太老或不安全的HTTP协议版本 | N/A |
428 Precondition Required | 请求必须提供一个If-Match首部 | N/A |
429 Too Many Requests | 客户端被分级限制,要慢下来 | N/A |
431 request Header Fields Too Large | 可能首部作为一个整体太大,或者某个首部字段太大 | N/A |
451 Unavailable For Legal Reasons | 这是一个试验性的响应码,由于法律原因禁止服务器提供请求服务 | N/A |
5XX | 服务器错误 | HTTP_SERVER_ERROR |
500 Internal Server Error | 发生了意外情况,服务器不知道如何处理 | HTTP_INTERNAL_ERROR |
501 Not Implemented | 服务器不具有完成这个请求所需要的一个特性。不能处理PUT请求的服务器可能会试图PUT表单数据的客户端发送这个响应 | HTTP_NOT_IMPLEMENTED |
502 Bad Gateway | 这个响应码只用于作为代理或网关的服务器。它指示该代理在试图完成请求时,从它链接的服务器接收到一个无效的响应 | HTTP_BAD_GATEWAY |
503 Service Unavailable | 服务器暂时无法处理请求,可能是超负荷或维护原因 | HTTP_UNAVAILABLE |
504 Geteway Timeout | 代理服务器在合理的时间内未能接收到上游服务器的响应,所以无法将向客户端发送所需的响应 | HTTP_GATEWAT_TIMEOUT |
505 HTTP Version Not Supported | 服务器不支持客户端正在使用的HTP版本(如目前还不存在的HTTP 2.0) | HTTP_VERSION |
507 Insufficient Storage | 服务器没有足够的空间来存放所提供的请求实体。通常用于POST或PUT | N/A |
511 Network Authentication Required | 客户端需要身份认证才能访问网络(例如,在一个旅馆的无线网络上) | N/A |
Keep-Alive
在请求首部里加上 connection : Keep-Alive
标签:HTTP,请求,首部,响应,服务器,客户端 From: https://www.cnblogs.com/atwood-pan/p/17125380.html