zoukankan      html  css  js  c++  java
  • (四)HTTP消息报头

     

    HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行,消息报头,空行(只有CRLF的行),消息正文组成。对于请求消息,开始行就是请求行;对于响应消息,开始行就是状态行。

    HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。报头域由名字+“:”+空格+值组成,消息报头域的名字与大小写无关。

    1. 普通报头:

      在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

    • Cache-Control:

      A.用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。

      B.请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached。

      C.响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。

      eg:为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.setHeader(“Cache-Control”,”no-cache”);或者response.setHeader(“Pragma”,”no-cache”); 两者作用相当。这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache。

    • Date:

      普通报头域表示消息产生的日期和时间

    • Connection:

      普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

     2.请求报头

      请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

    • Accept:

      用于指定客户端接受哪些类型的信息。如Accept:image/gif,表明客户端希望接受GIF图像格式的资源;text/html,表明客户端希望接受html文本。

    • Accept-Charset:

      用于指定客户端接受的字符集。如Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

    • Accept-Encoding:

      类似于Accept,用于指定可接受的内容编码。如Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域,服务器假定客户端对各种内容编码都可以接受。

    • Accept-Language:

      类似于Accept,用于指定一种自然语言。如Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

    • Authorization:

      用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

    • Host:

      发送请求时,该报头域是必需的,用于指定被请求资源的Internet主机和端口号,通常从HTTP URL中提取出来,如在浏览器中输入http://www.guet.edu.cn/index.html,浏览器发送的请求消息中,就会包含Host请求报头域,Host:www.guet.edu.cn。此处使用缺省端口号80,若指定了端口号,则为Host:www.guet.edu.cn:指定端口号

    • User-Agent:

      User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息。

     3.响应报头

      响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

    • Location:

      用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

    • Server:

      包含了服务器用来处理请求的软件信息,如服务器名字。与User-Agent请求报头域是相对应的。Servlet一般不设置这个值,而是由Web服务器自己设置。如Server:Apache-Coyote/1.1。

    • WWW-Authenticate:

      客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。

      例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

     4.实体报头

      请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(如有无实体正文)和请求所标识的资源的元信息。

    • Content-Encoding:

      文档的编码(Encode)方法。它的值指示了已经被应用到实体正文的附加内容的编码,只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。如Content-Encoding:gzip。

      Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

    • Content-Language:

      描述了资源所用的自然语言。没有设置该域,则认为实体内容将提供给所有的语言阅读者。eg:Content-Language:da。

    • Content-Length:

      用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

    • Content-Type:

      用于指明发送给接收者的实体正文的媒体类型。eg:Content-Type:text/html;charset=ISO-8859-1;Content-Type:text/html;charset=GB2312。

    • Last-Modified:

      用于指示资源的最后修改日期和时间。

    • Expires:

      给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中的页面(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)。使用Expires指定页面过期时间。如Expires:Thu,15 Sep 2006 16:23:12 GMT。

      HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。为了让浏览器不要缓存页面,也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader(“Expires”, ”0″);

  • 相关阅读:
    c# winform 调用js
    删除Management Data Warehouse (MDW) job失败
    AjaxUpload跨域上传问题
    Ajax.BeginForm()实现ajax无刷新提交
    MSDTC故障排除
    验证淘宝店铺真实性的几个方案
    微信公众号接收消息和发送消息开发流程和注意事项
    MVC中return File(byte[],"image/jpeg")输入图片不清晰
    JavaScript Patterns 2.9 Coding Conventions
    JavaScript Patterns 2.8 Number Conversions with parseInt()
  • 原文地址:https://www.cnblogs.com/mind18/p/12714193.html
Copyright © 2011-2022 走看看