内容简介:HTTP 消息结构
HTTP 是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。一个 HTTP “客户端”是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个 HTTP 的请求的目的。
一个 HTTP “服务器”同样也是一个应用程序(通常是一个 Web 服务,如 Apache Web 服务器或 IIS 服务器等),通过接收客户端的请求并向客户端发送 HTTP 响应数据。
HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。一旦建立连接后,数据消息就通过类似 Internet 邮件所使用的格式 [RFC5322] 和多用途 Internet 邮件扩展(MIME)[RFC2045] 来传送。
客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(方法-URI-协议/版本)、请求头部、空行和请求数据四个部分组成,下面是一个HTTP请求包(GET)的例子:
GET /index.php HTTP/1.1 Accept-Language: zh-cn Connection: Keep-Alive Host: 192.168.0.106 Content-Length: 37 userName=new_andy&password=new_andy
-
请求包的第一行是方法-URI-协议/版本:GET 就是请求方法,根据 HTTP 标准,HTTP 请求可以使用多种请求方法。HTTP 1.1支持七种请求方法:GET、POST、HEAD、OPTIONS、PUT、delete 和 TRACE 等,常用的为请求方法是 GET 和 POST
-
/index.php
表示 URI, URI 指定了要访问的网络资源 -
HTTP/1.1
是协议和协议的版本 -
最后一行
userName=new_andy&password=new_andy
为正文,正文与 HTTP 头部有一个空行(\r\n)分隔。这里需要说明的一点,其中Content-Length
说明正文的长度,有的正文长度没有在头部说明,只是标明Transfer-Encoding: chunked
请求包的头部还会包含许多有关客户端环境和请求正文的有用信息,这里不再描述,下图给出了请求报文的一般格式:
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行(协议-状态代码-描述)、响应头、空行和响应正文。下面是一个 HTTP 应答的例子:
HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Mon, 3 Jan 2005 13:13:33 GMT Content-Type: text/html Last-Modified: Mon, 11 Jan 2004 13:23:42 GMT Content-Length: 90 <html> <head> <title>解读HTTP包示例</title> </head> <body> Hello WORLD! </body> </html>
HTTP 应答包的第一行类似于 HTTP 请求的第一行,表示所用的协议是 HTTP 1.1,服务器处理请求的状态码 200。
应答头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等。应答的正文就是服务器返回的 HTML 页面。应答头和正文之间也用 CRLF 分隔,看下图分析:
HTTP 响应报文的主要特点
每一个请求报文发出后,都能收到一个响应报文,响应报文的第一行就是状态行。状态行包含三项内容:HTTP 的版本,状态码,以及解释状态码的简单语句。状态码都是三位数字的,分为 5 大类共 33 种。例如:
-
1xx
: 表示通知信息的,如请求收到了或正在进行处理 -
2xx
: 表示成功,如接受或是知道了 -
3xx
: 表示重定向,如要完成请求还必须采取下一步的行动 -
4xx
: 表示客户的差错,如请求中有错误的语法或不能完成 -
5xx
: 表示服务器的差错,如服务器失效无法完成请求
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 从宇宙大尺度结构到胎心监测,从手机消息推送到物联网大数据处理:跨界是创新的主要源泉
- 消息队列面试连环问:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?
- 消息队列(三)常见消息队列介绍
- 消息队列(七)RocketMQ消息发送
- 消息队列探秘 – RabbitMQ 消息队列介绍
- 消息中间件RocketMQ消息发送
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。