1 消息类型
HTTP消息由客户端到服务器的请求消息和服务器到客户端的响应消息组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。
2 请求消息
Request 消息分为4部分:
1、 请求行(Request-Line)
2、 消息报头(Header)
3、 CRLF
4、 请求正文(Entity-Body)
结构如下所示:
2.1 请求行
第一行中的Method表示请求方法,比如"POST","GET",Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
名字 |
内容 |
GET |
请求获取Request-URI所标识的资源 |
POST |
在Request-URI所标识的资源后附加新的数据 |
HEAD |
请求获取由Request-URI所标识的资源的响应消息报头 |
PUT |
请求服务器存储一个资源,并用Request-URI作为其标识 |
DELETE |
请求服务器删除Request-URI所标识的资源 |
TRACE |
请求服务器回送收到的请求信息,主要用于测试或诊断 |
CONNECT |
保留将来使用 |
OPTIONS |
请求查询服务器的性能,或者查询与资源相关的选项和需求 |
2.2 请求报头
请求头域允许客户端传递请求的附加信息和客户端自己的附加信息给服务器。这些头域作为请求的修饰,这和程序语言方法调用的参数语义是等价的。
请求头(request-header)=
Accept
|Accept-Charset
|Accept-Encoding
|Accept-Language
|Authorization
|Expect
|From
|Host
|If-Match
|If-Modified-Since
|If-None-Match
|If-Range
|If-Unmodified-Since
|Max-Forwards
|Proxy-Authorization
|Range
|Referer
|TE
|User-Agent
请求头域的名字是能被扩展,但只能随协议版本改变而被扩展。然而新的或实践性的头域可以给定请求头域语义,如果所有通信方都把它看作请求头域。不能识别的头域会被看作实体头域(entity-header)。
2.3 应用举例
3 响应消息
HTTP Response消息的结构和Request消息的结构基本一样。 同样也分为三部分。
1、 状态行(Request line)
2、 消息报头(request header)
3、 CRLF
4、 响应正文(body)
结构如下图:
3.1 状态行
状态行格式如下:HTTP-Version Status-Code Reason-Phrase CRLF其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
Status-Code元素是一个试图理解和满足请求的三位数字整数码。原因短语(Reason-Phrase)是为了给出关于状态码的简单的文本描述。状态码用于控制,而原因短语(Reason-Phrase)是让用户便于阅读。客户端不需要检查和显示原因短语。
状态码的第一位数字定义响应类别。后两位数字没有任何分类角色。第一位数字有五种值:
-1xx :报告的,请求被接收到,继续处理。
-2xx :成功,被成功地接收(received),理解(understood),接受(accepted)的动作 。
-3xx :重发 ,为了完成请求必须采取进一步的动作。
-4xx :客户端出错 ,请求包括错的语法或不能被满足。
-5xx :服务器出错,-服务器无法完成显然有效的请求。
常见的状态码:
状态码 |
状态描述 |
说明 |
200 |
OK |
客户端请求成功 |
400 |
Bad Request |
客户端请求有语法错误,不能被服务器所理解 |
401 |
Unauthorized |
请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 |
403 |
Forbidden |
服务器收到请求,但是拒绝提供服务 |
404 |
Not Found |
没有发现文件、查询或URl |
500 |
Internal Server Error |
内部服务器错误 |
503 |
Server Unavailable |
服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
3.2 响应报头
响应头域允许服务器传送响应的附加信息,这些信息不能放在状态行(Status-Line)里.。这些头域给出有关服务器的信息以及请求URI(Request-URI)指定资源的更进一步访问信息。
response-header =
Accept-Ranges
|Age
|Etag
|Location
|Proxy-Autenticate
|Retry-After
|Server
|Vary
|WWW-Authenticate
响应头域的名字能依赖于协议版本的变化而扩展。然而,新的或者实践性的头域可能会给予响应头域的语义如果通信所有成员都能识别他们并把他们看作响应头域。不被识别的头域被看作实体头域。
3.3 应用举例
4 实体(Entity)
如果不被请求方法或响应状态码所限制,请求和响应消息都可以传输实体。实体包括实体头域(entity-header)与实体主体(entity-body),而有些响应只包括实体头域(entity-header)。
在本节中的发送者和接收者是否是客户端或服务器,这依赖于谁发送或谁接收此实体。
4.1 实体头域(Entity Header Fields)
实体(entity-header)头域定义了关于实体主体的的元信息,或在无主体的情况下定义了请求的资源的元信息。有些元信息是可选的;一些是必须的。
entity-header = Allow
| Content-Encoding
| Content-Language
| Content-Length
| Content-Location
| Content-MD5
| Content-Range
| Content-Type
| Expires
| Last-Modified
| extension-header
extension-header = message-header
扩展头机制允许在不改变协议的前提下定义额外的实体头域,但不保证这些域在接收端能够被识别。未被识别的头域应当被接收者忽略,且必须被透明代理(transparent proxy)转发。
4.2 实体主体(Entity Body)
由HTTP请求或响应发送的实体主体(如果存在的话)的格式与编码方式应由实体的头域决定
Entity-body= *OCTET
实体主体(entity-body)只有当消息主体存在时时才存在。实体主体(entity-body)从消息主体根据传输译码头域(Transfer-Encoding)解码得到,传输译码用于确保消息的安全和合适传输。
4.3 类型(Type)
当消息包含实体主体(entity-body)时,主体的数据类型由实体头域的Content-Type和Content-Encoding头域确定。这些头域定义了两层顺序的编码模型:
Entity-body:=Content-Encoding( Content-Type( data) )
Content-Type指定了下层数据的媒体类型。Content-Encoding可能被用来指定附加的应用于数据的内容编码,经常用于数据压缩的目的,内容编码是请求资源的属性。没有缺省的编码。
任一包含了实体主体的HTTP/1.1消息都应包括Content-Type头域以定义实体主体的媒体类型。如果只有媒体类型没有被Content-Type头域指定时,接收者可能会尝试猜测媒体类型,这通过观察实体主体的内容并且/或者通过观察URI指定资源的扩展名。如果媒体类型仍然不知道,接收者应该把类型看作”application/octec-stream”。
4.4 实体主体长度(Entity Length)
消息的实体主体长度指的是消息主体在被应用于传输编码(transfer-coding)之前的长度。
相关推荐
这个协议的解析和利用是许多开发者、自动化脚本编写者以及研究者关注的焦点,特别是对于消息群发的需求。在这个场景中,我们看到提到“QQ消息群发”使用了“精易模块”,这可能是指一个特定的编程模块或工具,用于...
HTTP 协议详解 HTTP 协议是一种应用层面的、面向对象的协议,用于分布式超媒体信息系统。它于 1990 年提出,经过多年的发展和...HTTP 协议的应用极其广泛,几乎所有的 Web 开发都是构建在 HTTP 协议之上的 Web 应用。
本文将围绕“JavaWeb之http协议”这一主题,结合提供的标签“源码”和“工具”,深入讲解HTTP协议的核心概念、工作原理以及在JavaWeb开发中的应用。 HTTP协议是一种应用层协议,基于TCP/IP通信协议来传输数据,主要...
一个完整的HTTP消息包括起始行、头部、空行和可选的消息体: 1. **起始行**:请求起始行是请求方法和URL,响应起始行是状态码和原因短语。 2. **头部**:包含多个键值对,每个键值对以换行符分隔。 3. **空行**:...
HTTP 协议学习心得体会 概述: HTTP 协议(HyperText Transfer Protocol)是 TCP/IP 协议集中的一个应用层协议,用于定义浏览器和 Web 服务器之间交换数据的过程以及数据本身的格式。HTTP 协议是无状态的,通信过程...
**HTTP协议的基本概念** 1. **请求与响应**:HTTP通信主要由客户端发起请求(Request),服务器接收到请求后返回响应(Response)。请求由方法(如GET、POST)、URL、协议版本、头部和消息主体组成。响应包含状态码...
#### HTTP协议详解之消息报头篇 消息报头用于携带额外的请求或响应信息,分为四类: 1. **普通报头**:一般信息,如缓存控制、日期等。 2. **请求报头**:客户端信息,如用户代理、接受的编码格式等。 3. **响应...
中国联通SGIP(Short Message Gateway Protocol)短消息协议是中国联通用于在其网络中处理和传递短信的一种通信协议。该协议在2001年发布,版本为1.2,旨在提供一种高效、可靠的方式,让服务提供商(SP)与中国联通...
本文将深入探讨基于HTTP协议的自定义协议封装,特别是在使用XML作为数据载体时如何进行设计和实现。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它允许客户端(如浏览器)和服务器之间交换数据。...
HTTP协议是基于TCP/IP通信协议来传递数据的,主要用于Web浏览器与Web服务器之间的信息传输。 在HTTP协议中,通信过程通常由客户端发起请求(Request),服务器接收请求并返回响应(Response)。请求通常包含方法...
了解HTTP协议是深入理解网页开发和技术架构的关键。 一、HTTP协议与URL HTTP协议基于TCP/IP连接工作,通过URL(统一资源定位符)来定位网络资源。URL的格式包括协议类型(http)、主机名(host)、可选的端口号...
- **HTTP/1.1** 是HTTP协议的重要版本之一,基于之前的RFC2068进行了更新,于1999年由IETF(Internet Engineering Task Force)发布为标准路线协议。 - **标准制定者**包括了R. Fielding、J. Gettys、J.C. Mogul等...
HTTP消息主要分为两类:**请求消息** 和 **响应消息**。 1. **请求消息** 包括以下几部分: - **请求行**:包含请求方法(如GET、POST等)、请求的URI(统一资源标识符)和HTTP协议版本。 - **请求头**:包含了与...
HTTP协议,全称为超文本传输协议(Hypertext Transfer Protocol),是应用层的网络协议,用于实现访问网页的应用程序。在嵌入式系统中,特别是个人数字助理(PDA)等小型设备中实现HTTP协议的接入,对于扩展其网络...
响应消息结构类似于请求消息,但是状态行由协议版本、状态码、原因短语 3 个元素组成,各个元素之间用 SP 分隔。状态码字段由三个数字组成,标识客户请求方法的结果。状态码有 5 种可能的值,包括信息接收、成功、...