`
kanwoerzi
  • 浏览: 1647481 次
文章分类
社区版块
存档分类
最新评论

HTTP头简介

 
阅读更多
HTTP头简介
HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。
HTTP协议采用了请求/响应模型。
客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。
服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。
这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。
HTTP的头域包括
通用头请求头响应头实体头四个部分。
每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,
头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
一,通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。
对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。
下面简单介绍几个在UPnP消息中使用的通用头域。
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消息的值,
那么客户机可以接收超出超时期指定值之内的响应消息。
1.2,Date头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。
例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
3,Pragma头域
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
二,请求消息
请求消息的第一行为下面的格式:
MethodSPRequest-URISPHTTP-VersionCRLFMethod表示对于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。
对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
典型的请求消息:
GEThttp://download.microtool.de:80/somedata.exe<wbr style="line-height:25px"><br style="line-height:25px"> Host:download.microtool.de<br style="line-height:25px"> Accept:*/*<br style="line-height:25px"> Pragma:no-cache<br style="line-height:25px"> Cache-Control:no-cache<br style="line-height:25px"> Referer:<a target="_blank" rel="nofollow" href="http://download.microtool.de/" style="color:rgb(207,121,28); line-height:25px; text-decoration:none">http://download.microtool.de/</a><wbr style="line-height:25px"><br style="line-height:25px"> User-Agent:Mozilla/4.04[en](Win95;I;Nav)<br style="line-height:25px"> Range:bytes=554554-<br style="line-height:25px"> 上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。<br style="line-height:25px"> 棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。<br style="line-height:25px"><span style="line-height:25px">2.1,Host头域</span><br style="line-height:25px"> Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。<br style="line-height:25px"> HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。<br style="line-height:25px"><span style="line-height:25px">2.2,Referer头域</span><br style="line-height:25px"> Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。<br style="line-height:25px"> 他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。<br style="line-height:25px"> 如果指定的是部分uri地址,则此地址应该是一个相对地址。<br style="line-height:25px"> 3,Range头域<br style="line-height:25px"> Range头域可以请求实体的一个或者多个子范围。例如,<br style="line-height:25px"> 表示头500个字节:bytes=0-499<br style="line-height:25px"> 表示第二个500字节:bytes=500-999<br style="line-height:25px"> 表示最后500个字节:bytes=-500<br style="line-height:25px"> 表示500字节以后的范围:bytes=500-<br style="line-height:25px"> 第一个和最后一个字节:bytes=0-0,-1<br style="line-height:25px"> 同时指定几个范围:bytes=500-600,601-999<br style="line-height:25px"> 但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。<br style="line-height:25px"> 3,User-Agent头域<br style="line-height:25px"> User-Agent头域的内容包含发出请求的用户信息。<br style="line-height:25px"><span style="line-height:25px">三,响应消息</span><br style="line-height:25px"> 响应消息的第一行为下面的格式:<br style="line-height:25px"><span style="color:#0000ff; line-height:25px">HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF</span><br style="line-height:25px"> HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。Status-Code是一个三个数字的结果代码。<br style="line-height:25px"> Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。<br style="line-height:25px"> Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:<br style="line-height:25px"><span style="color:#000080; line-height:25px">1xx:信息响应类,表示接收到请求并且继续处理<br style="line-height:25px"> 2xx:处理成功响应类,表示动作被成功接收、理解和接受<br style="line-height:25px"> 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理<br style="line-height:25px"> 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行<br style="line-height:25px"> 5xx:服务端错误,服务器不能正确执行一个正确的请求</span><br style="line-height:25px"> 响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。<br style="line-height:25px"> 响应头域包含Age、Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。<br style="line-height:25px"> 对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。<br style="line-height:25px"> 典型的响应消息:<br style="line-height:25px"> HTTP/1.0200OK<br style="line-height:25px"> Date:Mon,31Dec200104:25:57GMT<br style="line-height:25px"> Server:Apache/1.3.14(Unix)<br style="line-height:25px"> Content-type:text/html<br style="line-height:25px"> Last-modified:Tue,17Apr200106:46:28GMT<br style="line-height:25px"> Etag:"a030f020ac7c01:1e9f"<br style="line-height:25px"> Content-length:39725426<br style="line-height:25px"> Content-range:bytes554554-40279979/40279980<br style="line-height:25px"> 上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,<br style="line-height:25px"> 绿色的部分表示通用头部分,红色的部分表示实体头域的信息。<br style="line-height:25px"> 1,Location响应头<br style="line-height:25px"> Location响应头用于重定向接收者到一个新URI地址。<br style="line-height:25px"> 2,Server响应头<br style="line-height:25px"> Server响应头包含处理请求的原始服务器的软件信息。<br style="line-height:25px"> 此域能包含多个产品标识和注释,产品标识一般按照重要性排序。<br style="line-height:25px"><span style="line-height:25px">四,实体</span><br style="line-height:25px"> 请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。<br style="line-height:25px"> 实体头域包含关于实体的原信息,<br style="line-height:25px"> 实体头包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、<br style="line-height:25px"> Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。<br style="line-height:25px"> extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。<br style="line-height:25px"> 实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。<br style="line-height:25px"><span style="line-height:25px">4.1,Content-Type实体头</span><br style="line-height:25px"> Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型<br style="line-height:25px"><span style="line-height:25px">4.2,Content-Range实体头</span><br style="line-height:25px"> Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。<br style="line-height:25px"> 在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:<br style="line-height:25px"> Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth<br style="line-height:25px"> 例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节<br style="line-height:25px"> 例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。<br style="line-height:25px"><span style="line-height:25px">4.3,Last-modified实体头</span><br style="line-height:25px"> 文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,<br style="line-height:25px"> 只有改动时间迟于指定时间的文档才会返回,否则返回一个304(NotModified)状态。<br style="line-height:25px"> Last-Modified也可用setDateHeader方法来设置。 <div style="line-height:25px"><span style="line-height:25px">4.4、其他实体头</span></div> <div style="line-height:25px"> <span style="color:#003366; line-height:25px">一下是关于其他实体头的介绍。</span><br style="line-height:25px"><span style="line-height:25px">应答头说明</span><br style="line-height:25px"><span style="color:#993300; line-height:25px">Allow</span>服务器支持哪些请求方法(如GET、POST等)。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Content-Encoding</span>文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。<br style="line-height:25px"> 利用gzip压缩文档能够显著地减少HTML文档的下载时间。<br style="line-height:25px"> Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它。<br style="line-height:25px"> 因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,<br style="line-height:25px"> 为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Content-Length</span>表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。<br style="line-height:25px"> 如果你想要利用持久连接的优势,可以把输出文档写入ByteArrayOutputStram,完成后查看其大小,<br style="line-height:25px"> 然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Content-Type</span>表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。<br style="line-height:25px"> 由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Date</span>当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Expires</span>应该在什么时候认为文档已经过期,从而不再缓存它?<br style="line-height:25px"><span style="color:#993300; line-height:25px">Last-Modified</span>文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,<br style="line-height:25px"> 只有改动时间迟于指定时间的文档才会返回,否则返回一个304(NotModified)状态<br style="line-height:25px"> 。Last-Modified也可用setDateHeader方法来设置。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Location</span>表示客户应当到哪里去提取文档。Location通常不是直接设置的,<br style="line-height:25px"> 而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Refresh</span>表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,<br style="line-height:25px"> 你还可以通过setHeader("Refresh","5;URL=http://host/path")让浏览器读取指定的页面。<br style="line-height:25px"> 注意这种功能通常是通过设置HTML页面HEAD区的<METAHTTP-EQUIV="Refresh"CONTENT="5;URL=http://host/path">实现,<br style="line-height:25px"> 这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。<br style="line-height:25px"> 但是,对于Servlet来说,直接设置Refresh头更加方便。<br style="line-height:25px"><span style="line-height:25px">注意1</span>:Refresh的意义是“N秒之后刷新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面”。<br style="line-height:25px"> 因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,<br style="line-height:25px"> 不管是使用Refresh头还是<METAHTTP-EQUIV="Refresh"...>。<br style="line-height:25px"><span style="line-height:25px">注意2</span>:Refresh头不属于HTTP1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Server</span>服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。<br style="line-height:25px"><span style="color:#993300; line-height:25px">Set-Cookie</span>设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie",...),<br style="line-height:25px"> 而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。<br style="line-height:25px"><span style="color:#993300; line-height:25px">WWW-Authenticat</span>e客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。<br style="line-height:25px"> 例如,response.setHeader("WWW-Authenticate","BASICrealm=\"executives\"")。<br style="line-height:25px"> 注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。</div> </wbr></wbr>
分享到:
评论

相关推荐

    http协议头简介

    http协议 head简要介绍

    http头获取并处理,libcurl 使用及例程-大隐隐于床-ChinaUnix博客1

    个人简介呵~~~呵~~~文章分类全部博文(45)未分配的博文(1)文章存档2015年(1)2014年(3)2013年(2)2012年(9)2011年(11)20

    HTTP协议内容简介

    HTTP协议,即超文本传输协议(Hypertext transfer protocol),本文档包含HTTP请求(请求格式、请求行、请求头和请求体等),HTTP请求方法,HTTP响应,HTTP响应状态码等。

    ASP.NET性能优化之让浏览器缓存动态网页的方法

    一:HTTP头简介 1.1浏览器第一次请求 假设我们请求一个URL地址,譬如我服务器上的一个静态页面http://192.168.0.77/luminji2/html/test1.htm,会返回如下的HTTP头信息: HTTP头信息中每个参数的含义这里暂且

    修改 HTTP 请求头-crx插件

    简介:扩展用于修改 HTTP 请求头,基本用法包括:1、更改标题的值;2、添加或删除标题;3、编辑预设值。 功能说明:扩展用于修改 HTTP 请求头,基本用法包括:1、更改标题的值;2、添加或删除标题;3、编辑预设值。 ...

    基础电子中的红外线接收头的简介

    红外线接收头的定义   红外线接收头(又称红外线接收模组,IRM)是集成红外线接收PD二极管、放大、滤波和比较器输出等的 YX0038M  IC模块。红外线接收头分类通常...兰丰科技红外线接收头http://www.dzsc.com/prod

    162100(头像)截图程序 v4.1.zip

    一、程序简介 1、“拒绝繁冗,选择简炼”——162100.com开源作品。  2、不借助插件、FLASH支持,使二者成为历史。  3、程序短小精悍。构思、构成、安装、接入无比简洁。  4、极其便于论坛、博客、社区等的...

    基础电子中的红外线接收头特性及注意事项

    接收头简介  红外线接收头(又称红外线接收模组,IRM)是集成红外线接收PD二极管、放大、滤波和比较器输出等的 YX0038MIC模块。红外线接收头分类通常可以按频率分为36,37.9,40,56.7Khz可按不同需求选择使用不同...

    Test404 HTTP Fuzzer v4.1

    简介: HTTP Fuzzer是一款为了评估WEB应用而生的Fuzz(Fuzz是爆破的一种手段)工具,它基于一个简单的理念,即用给定的Payload去fuzz。它允许在HTTP请求里注入任何输入的值,针对不同的WEB应用组件进行多种复杂的...

    java web 视频、电子书、源码(李兴华老师出版)

    视频目录简介: 0100_第一部分:WEB开发前奏 0101_WEB开发简介 0102_HTML、JavaScript简介 0103_XML简介 0104_Tomcat服务器的安装及配置 0200_第二部分:WEB基础开发 0205_JSP基础语法 ...20.2、HTTP头信息

    鱼刺类_Http模块源码v6.0.zip

    模块简介:鱼刺类-Httpv6.0.6为2020年7月15日最新版本模块:鱼刺类_HTTP 版本:6.0.6 参照了很多代码并结合自己的理解进行了原创设计 所有类方法基于(WinHttpRequest5.1)的命名方式封装 *带_old为原始版(保留自身特性...

    php语法简介.pdf

    HTTP协议:HTTP 是基于 TCP/IP 协议的应用层协议。 9.数据转存 10. navicat的使用 打开服务器,打开数据库,新建连接,密码root,新建数据库 设置表头,设置主键和递增,设置默认值要加引号,设置非null 点击...

    鱼刺类_Http模块v6.0.6源码

    模块简介:鱼刺类-Httpv6.0.6为2020年7月15日最新版本模块:鱼刺类_HTTP。版本:6.0.6。参照了很多代码并结合自己的理解进行了原创设计。所有类方法基于(WinHttpRequest5.1)的命名方式封装。*带_old为原始版(保留自身...

    SOAP协议规范(中文版).doc

    该SOAP协议规范,不是很完整,此中文文档...6.1.1 HTTP头中SOAPAction域 25 6.2 SOAP HTTP应答 26 6.3 HTTP扩展框架 26 6.4 SOAP HTTP举例 26 7. 在RPC中使用SOAP 27 7.1 RPC和SOAP体 27 7.2 RPC和SOAP头 28 8. 附录 28

    HTTP 教程

    HTTP 简介 本章节介绍了HTTP协议。 HTTP 消息结构 本章节介绍了HTTP消息结构 HTTP 方法 本章节介绍了HTTP的方法,包括 GET, POST, HEAD 等。 HTTP 头信息 本章节介绍了HTTP的头信息 HTTP 状态码 本章节列出了所有...

    蓝头网络lantCMS系统怀念ACCESS版(非源码)

    单页形式、段落形式、标题列表形式、标题和简介列表形式、图片标题形式、图片标题和简介形式、视频标题缩略图形式、视频标题缩略图 和简介形式、下载标题形式、下载标题和图片形式、下载标题图片和简介形式 4、网站...

    ModHeader 自定义请求头 | 谷歌(Chrome)浏览器插件

    ModHeader 是一款可以设置自定义HTTP请求头的插件,包括 Request header 请求头 , Response header 响应头。以及可以通过 Filter 来配置对哪些URL生效。配置后会覆盖Chrome浏览器的默认值。 【插件网站】 ...

    2024年浏览器缓存HTTP缓存机制(面试常考).zip

    浏览器缓存【2024年浏览器缓存/HTTP缓存机制(面试常考)简介】 内容概要: 这篇博客为网络技术初学者提供了一个全面的理解浏览器缓存和HTTP缓存机制的指南。通过通俗易懂的语言,本博客介绍了浏览器缓存的工作原理...

Global site tag (gtag.js) - Google Analytics