`
jameswxx
  • 浏览: 776522 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

http header信息

阅读更多

1、HTTP返回状态码 
HTTP协议中,对服务器返回的状态码定义如下: 
1xx: Informational,例如,服务器要求身份验证。 
2xx: Success,例如:200表示服务器正确处理,返回正确的页面。 
3xx: Redirection,表示页面重定向,定向到别的页面或网址。 
4xx: Client Error,例如:403表示禁止访问,404表示要访问的网页不存在。 
5xx: Server Error,服务器内部错误,当服务器不能正确响应请求时的状态码。例如:CGI程序没有输出Header(头部),或输出的头部没有正常结束。

2、HTTP头部参数 
HTTP头部可以带多个控制参数,每个参数占一行。各个参数之间没有先后顺序要求。参数后面换行后再加一个空行,表示头部结束。常见的控制参数有: 
Content-Type:页面内容的类型,例如:text/html。 
Content-Length:返回的页面字节数(不包括头部),例如:12456。 
Set-Cookie:设置Cookie。格式为:Cookie名称=Cookie值,以及域名,生存期等控制属性。 
Location:设置重定向URL。 
Pragma:通常用于告诉客户端浏览器是否缓存页面。 
Expires:缓存页面时的到期时间。 
HTTP头部的一个示例如下: 
Content-Type: text/html; charset=gb2312 
Content-Length: 3124 
Set-Cookie: a=b; 
Location: /index.jsp 
Pragma: no-cache 
Expires: 0 
HTTP返回状态码也在头部,但通常不需要程序设置,由Web Server自动完成。 
在C、perl等CGI程序中,按示例的格式直接输出HTTP头部即可,注意:最后一个参数的后面必须紧给两个换行。以C为例: 
printf("Content-Type: text/html; charset=gb2312 n"); //页面内容以及使用的字符集 
printf("Content-Length: 3124 n"); //在CGI程序中,通常不需要输出本参数,这里仅作为样例 
printf("Set-Cookie: a=b; n n"); //设置Cookie,并使头部结束 
在jsp中,可以通过response对象直接设置HTTP头部控制参数,调用方式为: 
response.setHeader(name, value); 
例如,不需要浏览器缓存当前页面时,在jsp中应调用如下代码: 
response.setHeader("Pragma", "no-cache");//强制刷新页面 
response.setHeader("Expires", "0");

 

 

 

HTTP协议基础

HTTP(Hyper Text Transfer Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC 2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

2.1 通用头域

通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、 Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。

2.1.1 Cache-Control头域

Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if- cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、 must- revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下: 
Public 指示响应可被任何缓存区缓存。 
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。 
no-cache 指示请求或响应消息不能缓存 
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

2.1.2 Date头域

Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如, Date: Mon, 31 Dec 2001 04:25:57 GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

2.1.3 Pragma头域

Pragma头域用来包含实现特定的指令,最常用的是Pragma: no-cache。在HTTP/1.1协议中,它的含义和Cache-Control: no-cache相同。

2.2 请求消息

请求消息的第一行为下面的格式: 
Method SP Request-URI SP HTTP-Version CRLF Method表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、 DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由 Request- URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。

SP表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。 HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept-Encoding、Accept- Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None- Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy- Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。

典型的请求消息:

GET http://download.microtool.de:80/somedata.exe 
Host: download.microtool.de 
Accept: */* 
Pragma: no-cache 
Cache-Control: no-cache 
Referer: 
http://download.microtool.de/ 
User-Agent: Mozilla/4.04 [en] (Win95; I ;Nav) 
Range: bytes=554554-

上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。

2.2.1 Host头域

Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

2.2.2 Referer头域

Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

2.2.3 Range头域

Range头域可以请求实体的一个或者多个子范围。例如,

表示头500个字节:     bytes = 0 - 499 
表示第二个500字节:    bytes = 500 - 999 
表示最后500个字节:    bytes = -500 
表示500字节以后的范围:  bytes = 500- 
第一个和最后一个字节:   bytes = 0-0 , -1 
同时指定几个范围:     bytes = 500-600, 601-999

但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(Partial Content)返回而不是以200(OK)。

2.2.4 User-Agent头域

User-Agent头域的内容包含发出请求的用户信息。

2.3 响应消息

响应消息的第一行为下面的格式:

HTTP-Version SP Status-Code SP Reason-Phrase CRLF

HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。Status-Code是一个三个数字的结果代码。Reason- Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:

1xx : 信息响应类,表示接收到请求并且继续处理 
2xx : 处理成功响应类,表示动作被成功接收、理解和接受 
3xx : 重定向响应类,为了完成指定的动作,必须接受进一步处理 
4xx : 客户端错误,客户请求包含语法错误或者是不能正确执行 
5xx : 服务端错误,服务器不能正确执行一个正确的请求

响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、 Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW- Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。

典型的响应消息:

HTTP/1.0 200 OK 
Date: Mon, 31 Dec 2001 04:25:57 GMT 
Server: Apache/1.3.14 (Unix) 
Content-type: text/html 
Last-modified: Tue, 17 Apr 2001 06:46:28 GMT 
Etag: "a030f020ac7c01:1e9f" 
Content-length: 39725426 
Content-range: bytes 554554-40279979/40279980

上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。

2.3.1 Location响应头

Location响应头用于重定向接收者到一个新URI地址。

2.3.2 Server响应头

Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。

2.4 实体

请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、 Content-Language、Content-Length、Content- Location、Content-MD5、Content- Range、Content-Type、Etag、Expires、Last- Modified、extension-header。extension -header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content- Encoding或Content-Type定义,它的长度由 Content-Length或Content-Range定义。

2.4.1 Content-Type实体头

Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型。

2.4.2 Content-Range实体头

Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

Content-Range: bytes-unit SP first-byte-pos -last-byte-pos/entity-legth

例如,传送头500个字节次字段的形式:Content-Range: bytes 0-499/1234 如果一个 http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。

2.4.3 Last-modified实体头

Last-modified实体头指定服务器上保存内容的最后修订时间。

分享到:
评论

相关推荐

    JSP获取HTTP header信息(request)例子

    ### JSP获取HTTP Header信息(Request)详解 在Web开发中,了解如何获取HTTP请求头信息是非常重要的,因为这些信息能够帮助我们更好地理解客户端环境、优化响应策略以及进行安全性检查等。下面将详细介绍JSP中如何...

    风吟PHP HTTP Header 信息检测.rar

    标题“风吟PHP HTTP Header 信息检测.rar”指的是一个使用PHP编写的工具,该工具能够检测HTTP头部信息,特别是与HTTP响应头相关的压缩状态,如gzip压缩,以及服务器的相关信息。这个工具对于开发者来说非常有用,...

    风吟PHP HTTP Header 信息检测

    "风吟PHP HTTP Header 信息检测"是一个项目,旨在利用PHP和curl库来检查和分析HTTP头信息。curl是一个命令行工具和库,用于在不同协议间传输数据,特别是HTTP,它允许开发者从命令行或通过编程接口(API)获取服务器...

    header和meta头部信息

    这篇博文链接指向的是一个关于`header`和`meta`头部信息的讨论,虽然具体内容无法直接提供,但从一般意义上,我们可以深入探讨这两个关键元素的作用、用途以及相关知识点。 `<header>` 标签: 1. **定义页面头部**...

    Chrome Header Editor 插件

    Chrome Header Editor是一款强大的浏览器扩展,专门用于编辑和操纵HTTP头信息。在互联网浏览过程中,HTTP头部信息扮演着至关重要的角色,它们包含了用户请求与服务器交互的各种数据,如浏览器类型、操作系统、用户...

    PHP curl伪造IP地址和header信息代码实例

    在网络安全和网页应用开发中,伪造IP地址和header信息可能会用于各种目的,例如模拟不同网络环境下的客户端请求、测试服务器安全设置以及进行一些安全相关的研究。然而,需要强调的是,伪造IP地址和header信息的举动...

    ajax添加header整理

    这种方式适用于简单的HTTP请求,特别是当Header信息固定不变或者变化不大时。 ##### 2. 使用`beforeSend`回调函数设置Header ```javascript $("#test").click(function () { $.ajax({ type: "GET", url: ...

    php获取不到自定义header参数原因详解

    在PHP开发中,有时我们需要通过HTTP头(Header)传递自定义信息,比如认证令牌、请求来源等。然而,有时我们可能会遇到PHP无法正确获取自定义Header参数的问题。本篇文章将详细解析这一问题,并提供解决方案。 首先...

    http header 详解

    HTTP Headers 是 HTTP 协议的重要组成部分,用于在客户端(如浏览器)和服务器之间传递信息。HTTP 协议是万维网的基础,几乎所有网页内容的传输都依赖于它。HTTP Headers 负责携带有关请求、响应以及客户端和服务器...

    C#获取目标网址http头信息,比如状态码等等信息

    在IT行业中,网络编程是不可或缺的一部分,而HTTP(超文本传输协议)作为互联网上应用最为广泛的一种网络协议,它的头部信息扮演着至关重要的角色。在C#编程中,我们需要经常处理HTTP请求,获取目标网址的HTTP头信息...

    HTTP协议的Header头信息详解.txt

    ### HTTP协议的Header头信息详解 #### 一、引言 在进行Web开发或网络开发时,理解HTTP协议中的Header头信息是至关重要的。HTTP(Hypertext Transfer Protocol)是一种应用层协议,用于从Web服务器传输超文本到本地...

    header()函数使用说明

    在PHP中,`header()`函数是一个非常重要的函数,它用于向浏览器发送HTTP头部信息。这些头部信息控制着浏览器如何处理页面,例如重定向、设定页面内容类型、管理缓存等。了解`header()`函数的使用对于优化网站性能和...

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

    总之,通过Nginx的`proxy_set_header`指令,我们可以方便地在HTTP请求头中添加自定义字段,这对于实现API接口的版本控制、增加请求元信息或者满足特定业务需求都非常有用。理解并灵活运用这一特性,能够提升Nginx...

    listview添加自定义header

    然而,有时我们不仅需要展示列表数据,还需要在列表顶部添加一个自定义的Header,以提供额外的信息或者功能。本篇将深入探讨如何在ListView中添加自定义Header,并以Eclipse版本的代码为例进行解析。 首先,自定义...

    Header Editor

    "Header Editor" 插件让用户能够自由添加、修改或删除这些头信息,以满足特定需求。 1. **添加请求头**:当你需要在请求中携带特定的令牌、Cookie或其他自定义信息时,"Header Editor" 可以方便地添加这些额外的头...

    response.setHeader问题

    Response.setHeader 问题是指在 Servlet 中使用 response 对象的 setHeader 方法来设置 HTTP 消息报头,以控制浏览器的缓存行为。本文将详细解释 response.setHeader 的作用、HTTP 消息报头的分类、 Cache-Control ...

    HttpWatch.Professional Http header查看,表单查看

    这款工具能够捕获并分析HTTP头部信息,同时提供表单数据的查看功能,以提升网页应用的效率和用户体验。 1. **HTTP头部信息**: - HTTP头部是HTTP协议的重要组成部分,它包含了请求和响应之间的元数据。HttpWatch...

    go语言在请求http时加入自定义http header的方法

    本文实例讲述了go语言在请求http时加入自定义http header的方法。分享给大家供大家参考。具体实现方法如下: 代码如下: client := &http.Client{] req, err := http.NewRequest(“POST”, “http://example.com”, ...

    使用CXF实现带header的soap服务

    在`frontend/client`或`frontend/server`的拦截器链中添加自定义拦截器,拦截器可以访问并处理Message对象中的header信息。 5. **创建客户端**:对于测试或集成,你可能需要创建一个CXF客户端,同样可以配置拦截器...

Global site tag (gtag.js) - Google Analytics