`
cczj2008
  • 浏览: 3617 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(四)理解HTTP消息头

阅读更多
服务器返回的消息
服务器返回的HTTP消息也分为消息头和消息体两部分。前面连载的第二篇里已经介绍了返回消息中常见返回代码的含义。对于非正常的返回代码的处理比较简单,只要照着要求去做就好了,而对于正常的返回代码(200),其处理方式就多种多样了。

1 Content-Type
Content-Type是返回消息中非常重要的内容,它标识出这个返回内容的类型,其值为“主类型/子类型”的格式,例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容。常见的内容类型有:
text/html HTML文本
image/jpeg JPG图片
image/gif GIF图片
application/xml XML文档
audio/x-mpegurl MP3文件列表,如果安装了Winamp,则可以直接把它当面M3U文件来打开
更多的内容类型可以在注册表“HKCR\MIME\Database\Content Type”下看到
对于IE6浏览器来说,如果Content-Type中的类型和实际的消息体类型不一致,那么它会根据内容中的类型来分析实际应该是什么类型,对于JPG、GIF等常用图片格式都可以正确的识别出来,而不管Content-Type中写的是什么。
如果Content-Type中指定的是浏览器可以直接打开的类型,那么浏览器就会直接打开其内容显示出来,如果是被关联到其它应用程序的类型,这时就要查找注册表中关于这种类型的注册情况,如果是允许直接打开而不需要询问的,就会直接调出这个关联的应用程序来打开这个文件,但如果是不允许直接打开的,就会询问是否打开。对于没有关联到任何应用程序的类型,IE浏览器不知道它该如何打开,此时IE6就会把它当成XML来尝试打开。
2 Content-Disposition
如果用AddHeader的方法在HTTP消息头中加入Content-Disposition段,并指定其值为“attachment”,那么无论这个文件是何类型,浏览器都会提示我们下载此文件,因为此时它认为后面的消息体是一个“附件”,不需要由浏览器来处理了。例如,在ASP.Net中写入如下语句:
Response.AddHeader("Content-Disposition: attachment");
请求此页面是得到的结果如:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Thu, 23 Mar 2006 07:54:53 GMT
Content-Disposition: attachment
Cache-Control: private
Content-Type: text/html; charset=utf-8
……
也就是说,通过AddHeader函数可以为HTTP消息头加入我们自定义的内容。使用这种方法可以强制让浏览器提示下载文件,即使这个文件是我们已知的类型,基于是HTML网页。如果想要让用户下载时提示一个默认的文件名,只需要在前面一句话后加上“filename=文件名”即可。例如:
Response.AddHeader("Content-Disposition: attachment; filename=mypage.htm");
3 Content-Type与Content-Disposition
如果把Content-Type和Content-Disposition结合在一起使用会怎么样呢?
打开一个网页时,浏览器会首先看是否有Content-Disposition: attachment这一项,如果有,无论Content-Type的值是什么,都会提示文件下载。
如果指定了filename,就会提示默认的文件名为此文件名。注意到在IE6中除了“保存”按扭外还有“打开”按扭,此时打开文件的类型是由在filename中指定的文件扩展名决定的,例如让filename=mypic.jpg,浏览器就会查找默认的图片查看器来打开此文件。
如果没有指定filename,那么浏览器就根据Content-Type中的类型来决定文件的类型,例如Content-Type类型为image/gif,那么就会去查找默认的看GIF图片的工具,并且设置此文件的名字为所请求的网页的主名(不带扩展名)加上对应于此文件类弄扩展名,例如请求的mypage.aspx,就会自动变成mypage.gif。如果并没有指定Content-Type值,那么就默认它为“text/html”,并且保存的文件名就是所请求的网页文件名。
但如果没有指定Content-Disposition,那么就和前面关于Content-Type中所讨论的情况是一样的了。

4 Cache
返回消息中的Cache用于指定网页缓存。我们经常可以看到这样的情况,打开一个网页时速度不快,但再次打开时就会快很多,原因是浏览器已经对此页面进行了缓存,那么在同一浏览器窗口中再次打开此页时不会重新从服务器端获取。网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:
(1) 打开新窗口
如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
Cache-control: max-age=5
表示当访问此网页后的5秒内再次访问不会去服务器
(2) 在地址栏回车
如果值为private或must-revalidate(和网上说的不一样),则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
(3) 按后退按扭
如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问
(4) 按刷新按扭
无论为何值,都会重复访问

当指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文章夹留下页面备份。
另外,通过指定“Expires”值也会影响到缓存。例如,指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问:
Expires: Fri, 31 Dec 1999 16:00:00 GMT

在ASP中,可以通过Response对象的Expires、ExpiresAbsolute属性控制Expires值;通过Response对象的CacheControl属性控制Cache-control的值,例如:
Response.ExpiresAbsolute = #2000-1-1# ' 指定绝对的过期时间,这个时间用的是服务器当地时间,会被自动转换为GMT时间
Response.Expires = 20  ' 指定相对的过期时间,以分钟为单位,表示从当前时间起过多少分钟过期。
Response.CacheControl = "no-cache"
Expires值是可以通过在Internet临时文件夹中查看临时文件的属性看到的
分享到:
评论

相关推荐

    HTTP1.1消息头

    HTTP/1.1 消息头详解 HTTP/1.1 消息头是 HTTP 协议中的一种机制,用于在客户端和...了解 HTTP/1.1 消息头的知识点,可以帮助我们更好地理解 HTTP 协议的工作机制,并且可以更好地实现客户端和服务器之间的数据传输。

    实现隐式和显式 SOAP 消息头

    ### 四、实现SOAP消息头 在Java中,你可以使用JAX-WS(Java API for XML Web Services)来处理SOAP消息头。以下是一个简单的示例: 1. **创建消息监听器**: ```java import javax.xml.ws.handler....

    HTTP协议的头信息详解.pdf

    HTTP 协议头信息是 HTTP 消息的重要组成部分,包括通用头、请求头、响应头和实体头四个部分。每个头域由一个域名、冒号和域值三部分组成。下面详细介绍 HTTP 协议头信息的各个方面。 通用头域 通用头域包含请求和...

    http协议头的有关问题

    4. 通用头:适用于请求和响应,如Date(消息创建的时间)、Cache-Control(缓存指令)、Connection(控制连接的行为,如keep-alive)等。 在易语言环境中,你可以使用特定的库或函数来处理HTTP协议头。例如,设置或...

    http头信息详解 对http1.0和http1.1的常用头做出详细解释

    HTTP头信息对于理解HTTP协议的工作原理至关重要。通过掌握通用头、请求头和响应头的使用,开发者可以更有效地管理和优化Web应用程序的性能。了解这些头部字段的功能和用法,可以帮助开发者更好地控制客户端与服务器...

    02HTTP请求头响应头详解1

    总结,HTTP请求头和响应头是HTTP通信中不可或缺的部分,它们提供了关于请求和响应的元信息,帮助客户端和服务器理解彼此的需求和响应。了解并正确使用这些头信息对于构建高效的Web应用程序至关重要。在实际开发中,...

    短消息长消息

    ### 长消息技术解析与应用 #### 长消息定义及背景 在现代通信领域,尤其是基于GSM网络的短消息服务(SMS)中,根据消息内容的...通过对长消息技术的理解和掌握,可以帮助开发者更好地设计和优化基于短信的服务和应用。

    HTTP协议头字段及分析

    ### HTTP协议头字段及分析 #### 一、概述 HTTP(HyperText Transfer Protocol)作为互联网上应用最为广泛的一种网络协议,主要用于规定客户端与服务器之间如何通信。它是一种基于请求与响应模型的应用层协议,用于...

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

    在进行Web开发或网络开发时,理解HTTP协议中的Header头信息是至关重要的。HTTP(Hypertext Transfer Protocol)是一种应用层协议,用于从Web服务器传输超文本到本地浏览器的传输协议。它采用客户端/服务器模型,基于...

    http头详解

    HTTP头部由以下四个部分组成: 1. **起始行**:定义了请求或响应的类型和版本。 2. **头域**:一系列键值对,提供了关于请求或响应的附加信息。 3. **空行**:用来分隔头部和可能存在的消息体。 4. **消息体**:可...

    分布式消息中间件实践_倪炜(著)

    本书《分布式消息中间件实践_倪炜(著)》深入探讨了四种主流的消息队列(Message Queue,MQ)系统:RabbitMQ、ActiveMQ、Kafka以及RocketMQ,旨在帮助读者理解和掌握这些工具的使用方法。 首先,RabbitMQ是一种基于...

    Linux消息队列分析及应用

    通过对内核中相关代码的深入分析,我们可以更好地理解消息队列的工作原理,并在实际开发中有效地利用这一强大的IPC工具。无论是处理并发请求还是实现分布式系统中的通信,消息队列都是值得深入研究和掌握的关键技术...

    深入理解LTE-A

    - 在无数据传输时,UE可进入空闲态(RRC_IDLE),周期性接收寻呼消息以检查是否有新的呼叫请求或系统信息更新。 - **上行传输流程**: - UE在随机接入过程中可能需要发送前导(preamble)和Msg3。 - eNodeB通过上行...

    深入理解LTE-A.docx

    #### 四、计算LTE-A下行峰值速率 - **计算方法**:下行峰值速率的计算基于物理资源块(PRB)的数量、调制方式、编码率等因素。 - **物理资源块**:LTE-A定义了一定数量的物理资源块,每个PRB包含12个子载波。 - **...

    消息中间件和JMS消息服务.pdf

    - **属性**:除了消息头中定义的标准属性外,还可以添加自定义属性,以满足特定的应用需求。 #### 五、结论 综上所述,消息中间件及其JMS规范为分布式系统提供了强大的通信机制。通过异步、解耦和一对多的特性,...

    中国电信短消息smgp协议

    ### 中国电信短消息SMGP协议知识点详解 #### 一、SMGP协议简介 **SMGP**(Short Message Gateway ...通过对上述内容的详细了解,可以帮助相关人员更好地理解和运用该协议,从而开发出更符合市场需求的产品和服务。

    javaweb课程设计基础知识+教程+课件_02HTTP协议.pptx

    HTTP 消息头是实现 HTTP 客户机与服务器之间的条件请求和应答的重要手段。每个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符。消息头字段名是不区分大小写的,但习惯上讲每个单词的第一个字母...

    Zstack消息机制

    这个宏的作用是通过`msg_ptr`指向消息数据部分,然后通过减1操作使其指向消息头部分,并设置目标任务ID。 #### 六、消息队列管理 ZStack中的消息队列用于存储待处理的消息。消息队列的管理主要包括: - **入队**...

    HTTP协议精解

    总结:HTTP协议精解涉及到的知识点包括HTTP协议的作用、版本差异、请求与响应的格式、GET和POST请求的使用场景、状态码的意义、消息头的作用以及HTTP的无状态性和缓存机制等。这些知识点对于理解网络通信、设计Web...

Global site tag (gtag.js) - Google Analytics