We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HTTP(Hyper Text Transfer Protocol),超文本传输协议,是基于 TCP ,用于服务器传输超文本数据到本地的应用层协议。主要规定了客户端与服务器之间的通信格式。默认使用 80 端口。
HTTP 响应状态码用于指示 HTTP 请求是否成功完成。 响应分为五类:
虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。
下面列出一些常见状态码,具体见 MDN 文档
表明所有内容都是可行的,客户端应继续请求,如果已经完成则忽略。
响应请求头中的 Upgrade 而发出,指示服务器也正在切换协议,例如在 WebSocket 中建立连接时,浏览器会先发出一个 GET 请求,带上 Upgrade: websocket 头部,客户端则会响应 101 ,切换到 WebSocket 对应协议。
Upgrade
Upgrade: websocket
表示服务器已收到并正在处理请求,但没有响应可用。
与 Link 头部一起使用,允许客户端在服务器仍在准备响应时开始预加载资源。
Link
请求成功
请求成功并因此创建了一个新的资源,通常是在 POST 请求或某些 PUT 请求后返回。
请求已收到,但还未响应,没有结果。
被请求的资源有一系列可供选择的回馈信息,用户或浏览器能够自行选择一个首选的地址进行重定向。
被请求资源已永久移动到新位置,将来对此资源的引用都应该使用响应的若干个 URI 之一。该响应可缓存。
请求的资源临时从不同 URI 响应请求,由于是临时的,客户端下次应该还是从原有地址请求此资源。只有在 Cache-Control 或 Expires 指定,才可缓存此响应。
如果客户端发送的 GET 请求的资源未改变,则返回这个状态码指示客户端使用缓存。该响应禁止包含响应体,因此始终以空行结束。参照 #36 协商缓存。
当前请求需要用户验证。
服务器已理解请求,但拒绝执行。
请求失败,资源未在服务器上发现。
请求行中指定的请求方法不能被用于请求相应的资源。例如有些网页服务器不支持 PUT, DELETE 方法,则会返回 405 错误。
请求的资源内容特性无法满足请求头中的条件,因而无法生成响应实体。
请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。
服务器遇到了不知道如何处理的情况。
此请求方法不被服务器支持且无法被处理。只有 GET 和 HEAD 是要求服务器支持的,这两个方法一定不会返回 501 。
GET
HEAD
服务器作为网关,需要得到一个处理这个请求的响应,但是得到一个错误的响应。
服务器没有准备好处理请求。常见原因是服务器因维护或重载而停机。
服务器作为网关,不能及时得到响应时返回 504 。
服务器不支持请求中所使用的 HTTP 版本。
在 HTTP/1.x 里,有多种连接管理模型:
在 HTTP/1.0 中的默认模型是短连接,每一个 HTTP 请求都是独立完成的,即每发起一个 HTTP 请求都要建立一次 TCP 连接,导致十分耗时。
在 HTTP/1.0 中如果没有指定 Connection 头,或者值为 close 则会使用短连接。 在 HTTP/1.1 中只有当 Connection 为 close 时才会使用短连接。
Connection
close
由于短连接十分耗时,因此设计出了长连接(在 HTTP/1.1 之前就有的概念)。
长连接在同一个 TCP 连接中可以发出多个 HTTP 请求,解决短连接中频繁建立 TCP 连接的问题。
但长连接也有缺点: 在空闲时候也会消耗服务器资源。
HTTP/1.0 中,把 Connection 设置为 close 以外的值即可使用长连接。 HTTP/1.1 中默认是使用长连接的。
默认情况下, HTTP 请求是按顺序发出的,只有在当前请求收到响应后,才会发出下一个请求。
HTTP 管线化 (HTTP Pipelining)是在同一个长连接中发出连续的请求,不用等待响应。
HTTP 管线化同时依赖于客户端和服务器的支持。遵守 HTTP/1.1 的服务器支持管线化。这并不是意味着服务器需要提供管线化的回复,而只是要求在收到管线化的请求时候不会失败。
The text was updated successfully, but these errors were encountered:
HTTP 0.9 1.0 1.1 每个版本新增的特性
GET /index.html HTTP/1.0
Content-Type
Sorry, something went wrong.
No branches or pull requests
概念
HTTP(Hyper Text Transfer Protocol),超文本传输协议,是基于 TCP ,用于服务器传输超文本数据到本地的应用层协议。主要规定了客户端与服务器之间的通信格式。默认使用 80 端口。
特点
报文组成
请求报文
响应报文
请求方法
GET 与 POST 的区别
状态码
HTTP 响应状态码用于指示 HTTP 请求是否成功完成。
响应分为五类:
下面列出一些常见状态码,具体见 MDN 文档
信息响应
100 Continue
表明所有内容都是可行的,客户端应继续请求,如果已经完成则忽略。
101 Switching Protocol
响应请求头中的
Upgrade
而发出,指示服务器也正在切换协议,例如在 WebSocket 中建立连接时,浏览器会先发出一个 GET 请求,带上Upgrade: websocket
头部,客户端则会响应 101 ,切换到 WebSocket 对应协议。102 Processing
表示服务器已收到并正在处理请求,但没有响应可用。
103 Early Hints
与
Link
头部一起使用,允许客户端在服务器仍在准备响应时开始预加载资源。成功响应
200 OK
请求成功
201 Created
请求成功并因此创建了一个新的资源,通常是在 POST 请求或某些 PUT 请求后返回。
202 Accepted
请求已收到,但还未响应,没有结果。
重定向
300 Multiple Choice
被请求的资源有一系列可供选择的回馈信息,用户或浏览器能够自行选择一个首选的地址进行重定向。
301 Moved Permanently
被请求资源已永久移动到新位置,将来对此资源的引用都应该使用响应的若干个 URI 之一。该响应可缓存。
302 Found
请求的资源临时从不同 URI 响应请求,由于是临时的,客户端下次应该还是从原有地址请求此资源。只有在 Cache-Control 或 Expires 指定,才可缓存此响应。
304 Not Modified
如果客户端发送的 GET 请求的资源未改变,则返回这个状态码指示客户端使用缓存。该响应禁止包含响应体,因此始终以空行结束。参照 #36 协商缓存。
客户端响应
400 Bad Request
401 Unauthorized
当前请求需要用户验证。
403 Forbidden
服务器已理解请求,但拒绝执行。
404 Not Found
请求失败,资源未在服务器上发现。
405 Method Not Allowed
请求行中指定的请求方法不能被用于请求相应的资源。例如有些网页服务器不支持 PUT, DELETE 方法,则会返回 405 错误。
406 Not Acceptable
请求的资源内容特性无法满足请求头中的条件,因而无法生成响应实体。
408 Request Timeout
请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。
服务端响应
500 Internal Server Error
服务器遇到了不知道如何处理的情况。
501 Not Implemented
此请求方法不被服务器支持且无法被处理。只有
GET
和HEAD
是要求服务器支持的,这两个方法一定不会返回 501 。502 Bad Gateway
服务器作为网关,需要得到一个处理这个请求的响应,但是得到一个错误的响应。
503 Service Unavailable
服务器没有准备好处理请求。常见原因是服务器因维护或重载而停机。
504 Gateway Timeout
服务器作为网关,不能及时得到响应时返回 504 。
505 HTTP Version Not Supported
服务器不支持请求中所使用的 HTTP 版本。
连接管理
在 HTTP/1.x 里,有多种连接管理模型:
短连接
在 HTTP/1.0 中的默认模型是短连接,每一个 HTTP 请求都是独立完成的,即每发起一个 HTTP 请求都要建立一次 TCP 连接,导致十分耗时。
在 HTTP/1.0 中如果没有指定
Connection
头,或者值为close
则会使用短连接。在 HTTP/1.1 中只有当
Connection
为close
时才会使用短连接。长连接
由于短连接十分耗时,因此设计出了长连接(在 HTTP/1.1 之前就有的概念)。
长连接在同一个 TCP 连接中可以发出多个 HTTP 请求,解决短连接中频繁建立 TCP 连接的问题。
但长连接也有缺点: 在空闲时候也会消耗服务器资源。
HTTP/1.0 中,把
Connection
设置为close
以外的值即可使用长连接。HTTP/1.1 中默认是使用长连接的。
HTTP 管线化
默认情况下, HTTP 请求是按顺序发出的,只有在当前请求收到响应后,才会发出下一个请求。
HTTP 管线化 (HTTP Pipelining)是在同一个长连接中发出连续的请求,不用等待响应。
参考
The text was updated successfully, but these errors were encountered: