`

HTTP消息头字段深入介绍

阅读更多

网页制作Webjx文章简介: 一、 通用头字段 1. Connection 这个字段只在HTTP1.1协议中存在。它决定了客户端和服务器进行了一次会话后,服务器是否立即关闭网络连接。在客户端最直接的表现是使用read方法 (readLine方法也是一样)读完客户端请求的Web资源后,是否立即返回-1(readLine返回null)。  

一、通用头字段

 

1. Connection

 

这个字段只在HTTP1.1协议中存在。它决定了客户端和服务器进行了一次会话后,服务器是 否立即关闭网络连接。在客户端最直接的表现是使用read方法(readLine方法也是一样)读完客户端请求的Web资源后,是否立即返回 -1(readLine返回null)。Connection有两个值:Close和Keep-Alive.当使用Connection:Close时, 和HTTP1.0协议是一样的,当read方法读完数据时立即返回;而使用Connection:Keep-Alive时,read方法在读完数据后还要 被阻塞一段时间。直接读取数据超时时间过后,还继续往下执行。在上一篇文章中讨论的readHttpResponse(……)方法实现的第011行可以验 证Connection的作用。下面让我们来使用HTTP模拟器来做一个实验。

 

(1)在HTTP模拟器中输入如下的域名:

 

 

www.baidu.com

 

(2)HTTP模拟器中输入如下的HTTP请求信息:

 

 

GET / HTTP/1.1   
Host: www.baidu.com

 

(3)按两下回车(输入一个空行)后,发送请求消息,并得到如图1如示的HTTP响应消息头:

 

 

 

图1

(4)输入y或Y后(在显示http响应头后,要立刻输入Y或y),显示响应消息的内容。在显示完内容后,大约过了10秒钟才进入"host:port>"提示符(因为在sendHttpRequest()的实现代码中的004行设置了读取数据超时)。

 

(5)在"host:port>"提示符下直接按回车,输入最近一次使用的域名www.baidu.com和80端口。再次输入如下的HTTP请求:

 

 

GET / HTTP/1.1
Host: www.baidu.com
Connection: close

 

输入完以上的HTTP请求后,重新执行第3、4步操作。最后在显示HTTP响应消息内容后,直接直入了"host:port>"提示符。除了这种方法,将请求的第一行改为GET / HTTP/1.0.这样也可以无需等待直接结束。

 

通过设置Connection,可以在下载Web资源(如多线程下载工具、Web浏览器等)后,立即断开网络连接,这样可以有效地降低客户机的资源消耗。

 

2. Date

 

这个Date头字段描述了请求消息和响应消息被创建的时间。这个字段值是一个HTTP-date类型,它的格式必须是GMT(格林尼治)时间,GMT时间是就是北京时间减8小时。下面是Date字段的一个例子:

 

 

Date: Tue, 15 Nov 2007 08:12:31 GMT

 

3. Content-Length

 

指定消息实体的字节数。在请求消息中POST方法必须使用Content-Length来指定请求消息的实体内容的字节数。在响应消息中这个字段值指定了当前HTTP响应所返回的Web资源的字节数。

 

二、HTTP请求消息头字段

 

1. Host

 

Host字段用于指定客户端所访问的资源所在的主机名和端口号。如果端口号等于连接服务器时所使用的端口号,则端口号可以省略。下面是一个使用Host字段的一个例子:

 

 

Host: www.sina.com.cn

 

 

这个字段是必须的,如果HTTP请求不包含这个字段,服务器将返回400(Bad Request)响应状态。

 

2. Accept

 

Accept字段头确定客户端可以接收的媒体类型。一般的格式是"*/*"或"类型/"子类型".这个子段头可以传递多个媒体类型,中间用","隔开。如下面是一个Accept的例子:

 

 

Accept::image/gif,image/jpg

 

 

如果请求头使用上述的Accept字段值,则服务器端在动态生成网页的IMG头时将首先包含gif格式的图像,如果gif图象不存在,则包含jpg格式的图象。

 

3. User-Agent

 

这个字段头用于指定客户端是用什么访问的服务器,如果是IE6浏览器,并且本机安装了。net 2.0,则User-Agent会有如下的值:

 

 

User-Agent: Mozilla/4.0 (
compatible;
 MSIE 6.0;
 Windows NT 5.2;
 SV1; Maxthon;
 .NET CLR 1.1.4322;
 .NET CLR 2.0.50727;
 InfoPath.1; InfoPath.2)

 

 

服务器可以通过这个字段检查客户机的浏览器版本,并根据不同的版本来确定向客户端发送的数据。

 

4. Range

 

Range字段头通过服务器只传输一部分Web资源。这个字段头可以用来实现断点续传功能。有很多下载工具就是通过这个字段头进行断点续传的。Range字段可以通过三种格式设置要传输的字节范围:

 

(1)Range: bytes=1000-2000

 

传输范围从1000到2000字节。

 

(2)Range: bytes=1000-

 

传输Web资源中第1000个字节以后的所有内容。

 

(3)Range bytes=1000

 

传输最后1000个字节。

 

 

三、HTTP响应消息头字段

 

1. Accept-Ranges

 

这个字段说明Web服务器是否支持Range(是否支持断点续传功能),如果支持,则返回Accept-Ranges: bytes,如果不支持,则返回Accept-Ranges: none.

 

2. Content-Range

 

指定了返回的Web资源的字节范围。这个字段值的格式是:

 

开始字节位置—结束字节位置/Web资源的总字节数

 

下面是一个使用Content-Range的例子:

 

Content-Range:1000-3000/5000

 

测试

 

在HTTP模拟器中连接服务器files.cnblogs.com,并输入如下的HTTP请求消息:

 

 

GET /nokiaguy/HttpSimulator.rar HTTP/1.1
Host: files.cnblogs.com
Range: bytes=1000-

 

 

返回的响应消息头如图2所示:

 

 

 

图2

从上图可以看出,服务器files.cnblogs.com支持断点继传功能。而且还可以验证Content-Length的值是当前会话传过来的字节数,并不是Web资源的总的字节数。而Content-Range字段值中"/"后面的数才是Web资源总的字节数。

 

3. Location

 

这个字段指定了上哪个新地址获得新的Web资源。当Web资源更换URL后,而一些老用户不能及时得知这个新的URL;因此,在老用户访问原来的URL时,使用Location将这个新的URL返回给客户端。这个地址转换对用户来说是完全透明。

 

 

分享到:
评论

相关推荐

    HTTP各状态码生成原理,请求头、响应头各字段含义(爬虫深入必备知识).docx

    本文将深入解析HTTP状态码的生成原理,以及请求头和响应头中的常见字段。 首先,HTTP状态码是服务器对客户端请求的反馈,分为五类:1xx(信息性状态码)、2xx(成功状态码)、3xx(重定向状态码)、4xx(客户端错误...

    DBF文件头及字段模板

    在深入理解DBF文件头及字段模板之前,我们先来了解一下DBF文件的基本结构。 **DBF文件头** DBF文件头包含了文件的基本信息,包括文件创建日期、记录数量、字段个数、每条记录的大小等。具体来说,文件头通常包含...

    sip消息之INVITE

    7. **To字段**:To头域列出了消息的目标,即被邀请参与会话的用户。与From头类似,它也可能包含标签和epid。 8. **Call-ID字段**:Call-ID是全局唯一的字符串,用于标识整个对话或呼叫,即使呼叫经过多个代理服务器...

    http头部cache-control字段解析

    本文将深入解析`Cache-Control`字段的含义、作用及其各种指令,帮助你更好地理解和应用这个关键的HTTP头信息。 一、`Cache-Control`简介 `Cache-Control`头字段是在HTTP/1.1中引入的,用于替代或扩展早期HTTP版本中...

    sip消息头功能详解

    本文将深入解析SIP消息头的主要功能及其在SIP INVITE请求中的应用。 首先,SIP消息由三部分组成:起始行、消息头和消息体。在给出的例子中,我们看到一个SIP INVITE请求,这是SIP中用于邀请另一个用户加入会话的最...

    短消息PDU字段分析与实现.pdf

    《短消息PDU字段分析与实现》一文深入探讨了短消息服务(SMS)的核心技术——PDU(Protocol Data Unit,协议数据单元)的编解码原理及其在GSM模块中的应用,为开发者提供了一份详尽的技术指南。短消息服务自2000年起在...

    WAPI协议完整性测试——WAI头部字段报文

    在深入了解WAI头部字段报文的协议完整性测试之前,我们需要回顾一下WAPI协议的基本概念及其重要性。无线局域网鉴别与保密基础结构(Wireless Local Area Network Authentication and Privacy Infrastructure,简称...

    abap alv字段介绍

    本次解析将围绕"abap alv字段介绍"这一主题,深入探讨ALV输入字段的特性、类类型以及相关的函数调用。 ### ALV字段描述 ALV的字段描述主要通过`FIELDCAT`参数来实现,它定义了数据表中的列如何在ALV网格中显示。`...

    CNMARC格式各字段详解

    ### CNMARC格式各字段详解 #### 概述 在图书馆及信息管理领域,MARC(Machine Readable Cataloging)是一...在未来的工作中,随着数字图书馆和电子资源的不断增多,深入理解并灵活运用CNMARC格式将会变得越来越重要。

    sharepoint 自定义字段类型

    下面将详细介绍SharePoint自定义字段类型的各个方面。 一、自定义字段类型概述 SharePoint 内置了多种标准字段类型,如文本、数字、日期、选择等。然而,这些标准字段类型可能无法满足所有组织的特殊需求。自定义...

    if字段赋值_If..._arcgis字段_arcgis_土地利用_字段赋值_

    通过阅读这些文件,你可以更深入地了解如何在实际项目中应用这种赋值方法。 ArcGIS还提供了模型构建器,这是一个图形化的工具,用户可以通过拖放操作创建流程,包括`If...Then...Else`决策树。对于不熟悉Python编程...

    教你怎么用Nginx往request的header中添加新字段

    - 云+社区 - 腾讯云.url`则可能指向一篇更深入的讨论文章,介绍了如何利用Nginx实现RESTful API的版本控制。 总之,通过Nginx的`proxy_set_header`指令,我们可以方便地在HTTP请求头中添加自定义字段,这对于实现...

    泛微OA E-cology字段联动.rar

    这里我们将深入探讨字段联动的原理、应用场景以及SQL在其中的作用。 字段联动是指在一个字段的值改变时,根据预设的规则自动更新或影响其他字段的值。在泛微OA E-cology中,这一功能可以实现动态的数据校验和计算,...

    sql_按照某一个字段进行去重后获取全部字段

    根据提供的文件信息,本文将详细解释如何通过 SQL 语句实现按照某一字段去重后获取所有字段的操作。在实际工作中,我们经常会遇到需要对数据表中的记录进行去重的情况,尤其是当某个字段作为唯一标识符时,我们希望...

    k3数据库字段说明

    本文将围绕“K3数据库字段”这一主题,深入解析K3 V 11.0版本中的各个模块,以供K3 BOS平台及第三方软件开发者参考。通过对合并报表、采购管理、考勤管理、日成本管理、人力资源考勤信息、零售门店管理、生产设备...

    VFP导入备注字段例子

    在Visual FoxPro(VFP)数据库管理系统中,备注(Memo)字段是一种用于存储长文本数据的类型,如文章、备注或任何超过255个字符的文本。在处理包含备注字段的数据时,有时我们需要将外部文件的数据导入到VFP数据库中...

    易语言ADO修改字段名

    本篇将深入探讨易语言如何利用ADO(ActiveX Data Objects)来修改数据库字段名,以及相关知识点。 ADO是微软公司开发的一种数据访问接口,它允许程序员通过OLE DB协议与各种不同的数据源进行交互。在易语言中,我们...

    matlab开发-字段名称的指定字段结构的提取值

    本主题将深入探讨如何在MATLAB开发中,针对具有指定字段名称的字段结构提取值,这对于处理树状数据类型尤其重要。我们将通过分析提供的`structval.m`函数来阐述这一过程。 首先,让我们理解什么是字段结构。在...

    pb动态添加数据库字段

    标题中的“pb动态添加数据库字段”指的是在PowerBuilder(PB)开发环境中,程序运行时能够根据需要动态地向数据窗口对象(DataWindow)或者数据库结构中添加新的字段。这是一种高级功能,通常用于处理数据结构不确定...

Global site tag (gtag.js) - Google Analytics