request header简介
当一个客户端(通常是浏览器)向web服务器发送一个请求是,它要发送一个请求的命令行,一般是get或post命令,当发送post命令时,它还必须向服务器发送一个叫“content-length”的请求头(request header) 用以指明请求数据的长度,除了content-length之外,它还可以向服务器发送其它一些headers,如:
accept 浏览器可接受的mime类型
accept-charset 浏览器支持的字符编码
accept-encoding 浏览器知道如何解码的数据编码类型(如 gzip)。servlets 可以预先检查浏览器是否支持gzip并可以对支持gzip的浏览器返回gzipped的html页面,并设置content-encoding回应头(response header)来指出发送的内容是已经gzipped的。在大多数情况下,这样做可以加快网页下载的速度。
accept-language 浏览器指定的语言,当server支持多语种时起作用。
authorization 认证信息,一般是对服务器发出的www-authenticate头的回应。
connection 是否使用持续连接。如果servlet发现这个字段的值是keep-alive,或者由发出请求的命令行发现浏览器支持 http 1.1 (持续连接是它的默认选项),使用持续连接可以使保护很多小文件的页面的下载时间减少。
content-length (使用post方法提交时,传递数据的字节数)
cookie (很重要的一个header,用来进行和cookie有关的操作,详细的信息将在后面的教程中介绍)
host (主机和端口)
if-modified-since (只返回比指定日期新的文档,如果没有,将会反回304 "not modified")
referer (url)
user-agent (客户端的类型,一般用来区分不同的浏览器)
如果你想更多的了解request header的内容,你可以访问w3c的网站。
在servlet中读取request header的内容
在servlet中读取request header的值是很简单的,只要调用httpservletrequest的getheader方法就可以了,当你指定要返回的header的名称,该方法就会返回string类型的header的内容,如果指定的header不存在,就返回null。调用getheadernames可以返回包含所有header名字的enumeration.
读取所有request header值的servlet程序
下面是tomcat中所带的servlet例子中关于request header的例子,下载该程序。
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class requestheaderexample extends httpservlet {
public void doget(httpservletrequest request, httpservletresponse response)
throws ioexception, servletexception
{
response.setcontenttype("text/html");
printwriter out = response.getwriter();
enumeration e = request.getheadernames();
while (e.hasmoreelements()) {
string name = (string)e.nextelement();
string value = request.getheader(name);
out.println(name + " = " + value);
}
}
}
闽公网安备 35060202000074号