一.
----转载处http://lqixv.iteye.com/blog/281385
但凡搞WEB开发的人都离不开HTTP(超文本传输协议),而要了解HTTP,除了HTML本身以外,还有一部分不可忽视的就是HTTP消息头。
做
过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方
怎么干。HTTP传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,后者是可选的,而前者是必须的。每当我们打开一个网
页,在上面点击右键,选择“查看源文件”,这时看到的HTML代码就是HTTP的消息体,那么消息头又在哪呢?IE浏览器不让我们看到这部分,但我们可以
通过截取数据包等方法看到它。
下面就来看一个简单的例子:
首先制作一个非常简单的网页,它的内容只有一行:
<html><body>hello world</body></html>
把它放到WEB服务器上,比如IIS,然后用IE浏览器请求这个页面(http://localhost:8080/simple.htm
),当我们请求这个页面时,浏览器实际做了以下四项工作:
1 解析我们输入的地址,从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost
端口:8080
对象路径:/simple.htm
2 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
3 使用TCP协议连接到主机的指定端口(localhost, 8080),并发送已封装好的数据包
4 等待服务器返回数据,并解析返回数据,最后显示出来
由截取到的数据包我们不难发现浏览器生成的HTTP数据包的内容如下:
GET /simple.htm HTTP/1.1<CR>
Accept:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-shockwave-flash, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword, */*<CR>
Accept-Language: zh-cn<CR>
Accept-Encoding: gzip, deflate<CR>
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<CR>
Host: localhost:8080<CR>
Connection: Keep-Alive<CR>
<CR>
为了显示清楚我把所有的回车的地方都加上了“<CR>”,注意最后还有一个空行加一个回车,这个空行正是HTTP规定的消息头和消息体的分界线,第一个空行以下的内容就是消息体,这个请求数据包是没有消息体的。
消
息的第一行“GET”表示我们所使用的HTTP动作,其他可能的还有“POST”等,GET的消息没有消息体,而POST消息是有消息体的,消息体的内容
就是要POST的数据。后面/simple.htm就是我们要请求的对象,之后HTTP1.1表示使用的是HTTP1.1协议。
第二行表示我们所用的浏览器能接受的Content-type,三四两行则是语言和编码信息,第五行显示出本机的相关系信息,包括浏览器类型、操作系统信息等,很多网站可以显示出你所使用的浏览器和操作系统版本,就是因为可以从这里获取到这些信息。
第六行表示我们所请求的主机和端口,第七行表示使用Keep-Alive方式,即数据传递完并不立即关闭连接。
服务器接收到这样的数据包以后会根据其内容做相应的处理,例如查找有没有“/simple.htm”这个对象,如果有,根据服务器的设置来决定如何处理,如果是HTM,则不需要什么复杂的处理,直接返回其内容即可。但在直接返回之前,还需要加上HTTP消息头。
服务器发回的完整HTTP消息如下:
HTTP/1.1 200 OK<CR>
Server: Microsoft-IIS/5.1<CR>
X-Powered-By: ASP.NET<CR>
Date: Fri, 03 Mar 2006 06:34:03 GMT<CR>
Content-Type: text/html<CR>
Accept-Ranges: bytes<CR>
Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT<CR>
ETag: "5ca4f75b8c3ec61:9ee"<CR>
Content-Length: 37<CR>
<CR>
<html><body>hello world</body></html>
同样,我用“<CR>”来表示回车。可以看到,这个消息也是用空行切分成消息头和消息体两部分,消息体的部分正是我们前面写好的HTML代码。
消息头第一行“HTTP/1.1”也是表示所使用的协议,后面的“200 OK”是HTTP返回代码,200就表示操作成功,还有其他常见的如404表示对象未找到,500表示服务器错误,403表示不能浏览目录等等。
第
二行表示这个服务器使用的WEB服务器软件,这里是IIS
5.1。第三行是ASP.Net的一个附加提示,没什么实际用处。第四行是处理此请求的时间。第五行就是所返回的消息的content-type,浏览器
会根据它来决定如何处理消息体里面的内容,例如这里是text/html,那么浏览器就会启用HTML解析器来处理它,如果是image/jpeg,那么
就会使用JPEG的解码器来处理。
消息头最后一行“Content-Length”表示消息体的长度,从空行以后的内容算起,以字节为单位,浏览器接收到它所指定的字节数的内容以后就会认为这个消息已经被完整接收了。
二. 在服务器端获取消息头的信息(浏览器的信息不能够在客户端被修改,由浏览器自己决定的)
Enumeration enums=request.getHeaderNames();//所有的消息头
while(enums.hasMoreElements()) {
String headNames= (String)enums.nextElement();
System.out.println(headNames);
};
Enumeration Accpts=request.getHeaders("Accept");//有关某个消息头的具体信息
while(Accpts.hasMoreElements()) {
String temp = (String)Accpts.nextElement();
System.out.println(temp);
};
分享到:
相关推荐
Http 消息头中常用的请求头和响应头 Http 消息头是指在 Http 请求和响应中添加的一些附加信息,以便于服务器和客户端之间的交互。这些附加信息可以是请求头、响应头、实体头等。 请求头是指客户端在向服务器发送...
### HTTP消息头详解 #### 一、HTTP消息头概述 HTTP消息头是在HTTP通信过程中用于描述正在获取的资源、服务器或客户端行为的关键组成部分。它在客户端请求(Request)或服务器响应(Response)时被传递,并位于请求或...
接下来,我们将详细讨论HTTP消息头中的主要知识点。 1. **通用头标(General Headers)**: - **Cache-Control**:控制缓存策略,如`max-age`定义了响应可缓存的时间。 - **Connection**:指示是否保持TCP连接,`...
一、HTTP消息头与响应头 1. HTTP消息结构:HTTP请求由三部分组成:起始行、请求头、空行和请求体。响应也类似,包括状态行、响应头、空行和响应体。头信息包含了关于请求或响应的元数据,如缓存策略、内容类型、...
HTTP消息头中的网页缓存控制对于优化网页加载速度和用户体验有着非常重要的作用。网页缓存控制主要依赖于HTTP协议中的Cache-Control头,它用于定义客户端和服务器之间缓存机制的行为。通过Cache-Control头部,开发者...
HTTP/1.1 消息头详解 HTTP/1.1 消息头是 HTTP 协议中的一种机制,用于在客户端和服务器之间传输数据。消息头是 HTTP 消息的开始部分,包含了对请求或响应的描述信息。在 HTTP/1.1 中,消息头可以分为四大类:通用...
HTTP 消息头: * 请求消息头:Accept、Accept-Language、Connection、Host、Referer、User-Agent 等 * 响应消息头:Server、Date、Content-Length、Content-Type、Cache-Control 等 HTTP 1.1 中的新特性: * Host...
HTTP响应消息头是指在响应状态行之后的多行文本,它们是由头字段名称和值构成的,每个响应消息头之后使用一个回车换行符标志结束。 HTTP响应消息头的格式为:头字段名称+冒号(:)+空格()+值。例如,Content-...
请求消息示例包括 GET 请求行、头域和实体。 响应消息结构类似于请求消息,但是状态行由协议版本、状态码、原因短语 3 个元素组成,各个元素之间用 SP 分隔。状态码字段由三个数字组成,标识客户请求方法的结果。...
HTTP消息头用于提供附加信息,如Accept表示客户端接受的数据类型,User-Agent表明发出请求的浏览器类型,Cookie用于保持会话状态,Cache-Control控制缓存策略。实体内容通常是网页HTML、图像或其他资源的二进制数据...
七、HTTP消息头 消息头是HTTP消息中的重要组成部分,用于描述客户端、服务器或消息体的元数据,如Content-Type、Content-Length、Date、Server等。头字段对于正确处理请求和响应至关重要。 八、HTTP的无状态特性 ...
HTTP 消息头是实现 HTTP 客户机与服务器之间的条件请求和应答的重要手段。每个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符。消息头字段名是不区分大小写的,但习惯上讲每个单词的第一个字母...
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simple ...
HTTP消息头是请求和响应中极为重要的一部分,它们可以控制请求的处理方式、提供客户端信息、指定缓存策略等。消息头可以分为通用信息头、请求头、响应头和实体头四大类。例如,Accept-Language可以设置用户偏好的...
HTTP 消息头是 HTTP 协议中的一部分,它包含了 HTTP 协议的头部信息。HTTP 消息头的结构包括: * 请求行(Request Line):包括请求方法、URL 和协议版本。 * 头部字段(Header Field):包括头部信息,如 Accept、...
HTTP消息头是HTTP通信的重要组成部分,它们提供了关于请求或响应的额外信息。常见的消息头可以分为以下几类: 1. **通用消息头**:如`Date`、`Cache-Control`等,它们既可以用在请求中也可以用在响应中。 2. **请求...
在SOAP消息中,消息头(Header)和消息体(Body)是两个主要部分。本文将深入探讨如何实现隐式和显式SOAP消息头,并通过源码和工具进行实践。 ### 一、SOAP消息结构 1. **SOAP Envelope**: SOAP消息的核心元素,...
#### 六、HTTP消息头详解 消息头在HTTP请求和响应中扮演着重要的角色,它们用于传递各种上下文信息,使得服务器和客户端能够更准确地理解彼此的需求和能力。 - **通用信息头**:适用于所有HTTP消息,如`Date`、`...