HTTP请求报头

1. 读取所有请求报头

    可以用一个enumeration类型来获取所有报头,然后使用enumeration类型中内置的hasMoreElement和nextElement方法来取得所有报头名称,然后使用request.getHeader(报头名)来获取相应报头的值。

    Enumeration headerNames = request.getHeaders();

    while(headerNames.hasMoreElement()){

        String headerName = (String)headerNames.nextElement();

        String headerValue = request.getHeader(headerName);

        ……

    }

2. Accept-Encoding

    我们在使用压缩方式传送web数据时,常会用到的一个报头信息。通过它,我们可以知道客户浏览器是否支持某种压缩格式(比如gzip),如果支持则可以使用(gzip)压缩方式来传送数据,让数据更快到达。

    String encodings = request.getHeader("Accept-Encoding");

    boolean isGzipSupported = (null != encodings) && (-1 != encoding.indexOf("gzip")); // 判断是否支持gzip压缩

3. User-Agent

    当你看到网页上显示出你使用的是哪种浏览器时,你会觉得神奇吗?没什们好神奇的,User-Agent报头就包含了这个信息。几乎所有的浏览器都会包含User-Agent的报头信息,通过它我们很容易知道客户使用的是哪种浏览器。

    但是使用这个报头要注意几个细节:(1)仅仅在必须时才使用User-Agent,否则代码会变得比较难以维护;(2)使用前要核实该报头是否为null。User-Agent报头并不是Http1.1规范的要求,因此一些浏览器可以设置禁用这个报头,甚至根本就不使用这个报头,所以在使用User-Agent时,应先检查使用为null;(3)区分Netscape和IE要检查MSIE,而非Mozilla;(4)User-Agent报头是可以造假的,有些浏览器可能允许用户修改这个报头的值,因此它的造假是容易的,当然,对这个报头进行造假没什么意义就是了,我个人是这么认为的啦。

    User-Agent的使用方式跟Accept-Encoding差不多,就是indexOf(...)多判断一点而已,麻烦。

4. Referer

    Referer这个报头似乎不被列在所有报头的范围内,至少我在测试“1. 读取所有请求报头”时,没发现这个报头的信息。这个报头主要是用来判断“用户点击链接到达当前页面时所处页面的位置”,也就是“从哪里进来”的意思啦。使用Referer报头我们可以根据客户到达的方式来定制页面。

    值得一提的是,Referer报头可以判断链接是来自于防火墙内部还是外部,或许有人会想说利用这样的技巧我们可以用来保护我们的应用,但是实际在这是不安全的,因为Referer同其他报头一样,易于伪造。

    Referer使用方式也跟User-Agent差不多,说到底,其实报头的使用方式都是差不多的。

5. Connection

    这个报头标明客户是否能够处理持续性HTTP连接。持续性连接允许客户或其他浏览器在单个socket中读取多个文件,从而节省协商几个独立连接所需的开销。默认都是持续性连接。

6. Authorization

    在访问密码保护的Web页面时,客户用这个报头来标识自己的身份,这个我个人也还没接触到,不太了解,以后在谈。

7. Content-Length

    Content-Length只适用于POST请求,用来给定POST数据的大小,以字节为单位。它的使用方式比较简单,只需使用request.getContentLength()即可得到该报头的值。但是,表单数据的读取一般由Servlet负责,我们很少会显示地使用这个报头。

8. If-Modified-Since 和 If-Unmodified-Since

    If-Modified-Since标明仅当页面在指定的日期之后发生更改的情况下,客户程序才希望获取该页面。这个报头十分有用,因为使用它,浏览器可以缓存文档,只在它们发生更改时才通过网络重新载入它们。但是,Servlet不需要直接处理这个报头,取而代之,它们应该实现getLastModified方法,让系统自动处理修改日期。

    If-Unmodified-Since这个报头刚好和上面的相反,它规定仅当文档比指定的日期要旧时,操作才需要继续。一般来说,If-Modified-Since用在GET请求中,而If-Unmodified-Since用在PUT请求中。

9. 其他几个报头

    Accept-Charset(显示支持的字符集)、Accept-Language(显示支持的语言)、Cookie(一般不会用这个,而是交给serlvet的getCookies处理)、Host(显示主域名)


--------------------------------------------------------------------------------

参考文献《Servlet与JSP核心编程 第二版》

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值