http://blog.chinaunix.net/uid-25018796-id-94904.html
有四种头标:
1. 通用头标 既可用于请求有可用于响应,并且是作为一个整体而不是特定资源 与事务相关联。
2. 请求头标 允许客户端传递关于自身信息和希望的响应形式。
3. 响应头标 服务器用于传递自身信息和响应。
4. 实体头标 定义被传送资源的信息。既可用于请求,也可用于响应
头标以如下的单行形式发送。
<name>:<value><crlf>
其中
name是头标名,大小写敏感
value是头标值;
crlf是回车换行符
JSP页面可以使用request.getHeader()方法读取特定的头标值。也可以使用response.setHeader方法设置头标值。
以下是HTTP/1.1中用到的头标:
头标 | 描述 |
Content-Range | 随部分实体一同发送;标明被插入点的低位与高位字节的偏移,也标明此实体的总长度。例如: Content-Range:1001-2000/5000 |
Content-Type | 表明发送或接受的实体的MIME类型。如: Content-Type:text/html |
Date | 发送HTTP信息的日期,如: Date:Mon.16.Mar 2000 18:22:22 GMT |
Etag | 一种实体头标,它向被发送的资源分配唯一的标识符,对于可以使用多种URL请求的资源,Etag可以确定实际被发送的资源是否为同一资源。例如: Etag:293f-334f-1547812 |
Expires | 指定实体的有效期。例如: Expires: Mon.16.Mar 2000 18:22:55 GMT |
From | 请求头标。给定控制用户代理的人工用户的电子邮件地址。例如: From:rolia_cn@hotmail.com |
Host | 被请求资源的主机名(以及可选的端口号)。对于使用HTTP/1.1的请求而言,此域是强制性的。例如: Host:localhost |
If-Modified-Since | 如果包含了GET请求,导致该请求条件性的以来于资源上次修改日期。如果出现此头标,并且自指定日期以来。此资源已经被修改,应该返回一个304响应代码。例如: If-Modified-Since: Mon.16.Mar 2000 18:22:22 GMT |
If-Match | 如果包含于一个请求,指定一个或多个请求实体标记(见ETag)。只发送其Etag与列表中标记匹配的资源。如: If-Match: 293f-334f-1547812 |
If-None-Match | 如果包含于一个请求,指定一个或多个请求实体标记(见ETag)。只有当资源的Etag不与列表中的任何一个条目匹配,操作才执行。如: If-None-Match: 293f-334f-1547812 |
If-Range | 指定资源的一个实体标记(见Etag),客户端已经拥有此资源的一个拷贝。必须与Range头标一同使用。如果此实体自上次被客户端检索以来还不曾被修改过。那么,服务器将只发送指定的范围。否则它将发送整个资源。如: Rang:byte=0-454 If-Rang: 293f-334f-1547812 |
If-Unmodified-Since | 与If-Modified-since相似,不过是在相反的意义上。只有自指定的日期来,被请求的实体还不曾被修改过,才会返回此实体。例如: If-Unmodified-Since: Mon.16.Mar 2000 18:22:22 GMT |
Last-Modified | 指定被请求资源上次被修改的日期和时间。如: Last-Modified: Mon.16.Mar 2000 18:22:22 GMT |
Location | 对于一个已经移动的资源。用于重定向请求者至另一个位置。与状态编码302(暂时移动)或者301(永久移动)配合使用。如: Location:http://localhost/index.jsp |
Max-Forwards | 一个用于TRACE方法的请求头标,指定代理或网关的最大数目。该请求通过网关才得以路由。在通过请求传递之前,代理或网关应该减少此数目。如: Max-Forwards:3 |
Parama | 通用头标。它发送实体相关的信息。如: Parama:no-cache |
Proxy-Authenticate | 类似于WWW-Authenticate,但是有意请求只来自请求链(代理)的下一个服务器的认证。如: Proxy-Authenticate:Basic SDF1SF121EW= |
Public | 列表显示服务器所支持的方法集。如: Public:OPTIONS,MGET,MHEAD,GET,HEAD |
Range | 指定一种度量单位和一个部分被请求资源的偏移范围。如: Range:bytes=206-5513 |
Referer | 一种请求头标域,标明产生请求的初始资源。对于HTML表单,它包含此表单的Web页面的地址。如: Referer: http://localhost/search.html |
Retry-After | 响应头标域,由服务器和状态编码503(无法提供服务)配合发送,以标明再次请求之前应该等待多长时间。此时间既可以是一个日期,也可以是一种一秒为单位的数目。如: Retry-After:8 Retry-After: Mon.16.Mar 2000 18:22:22 GMT |
Server | 一种表明Web服务器软件及版本号的头标。如: Server:Apache/1.3.3(Win) |
Transfer-Encoding | 通用头标,标明对应该被接受方反向的信息体实施变换的类型。如: Transfer-Encoding:chunked |
Update | 允许服务器指定一个新的协议或新的协议版本,与响应码101(切换协议)配合使用如: Update:HTTP/2.0 |
User-Agent | 定义用于产生请求的软件类型(典型的,如Web浏览器)。如: User-Agent=Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Poco 0.31; InfoPath.2) |
Vary | 响应头标。用于表示使用服务器驱动的协商从可用的响应表示中选择响应实体。例如: Vary:* |
Via | 一个包含所有中间主机和协议的通用头标。用于满足请求。如: Via:1.0 fred.com,1.1 wila.com |
Warning | 响应头标。提供关于响应状态的补充信息。如: Warning: 99 www.google.com Piano needs turnig |
WWW-Authenticate | 一个提示用户代理提供用户名和密码的响应头标。与状态码401(未授权)配合使用。 希望响应一个授权头标。如: www-authenticate: Basic realm=rolia |
HTTP_VIA – 如果有该条信息, 就证明您使用了代理服务器,代理服务器的地址就是后面的数值。
HTTP_X_FORWARDED_FOR – 如果有该条信息, 也证明了您使用了代理服务器代理服务器的地址就是后面的数值。
HTTP_ACCEPT_LANGUAGE – 您浏览器所使用的语言集
HTTP_USER_AGENT – 对大多数浏览器而言,这个值一般是 Mozilla. 可能还会包括浏览器的类型和版本号以及操作系统信息。
HTTP_HOST – 网页服务器名称
使用不同种类代理服务器,上面的信息会有所不同:
一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。
除此之外,proxy judges 还提供了其他可供参考的判定信息,您可以在实践中加以利用。
HTTP HEADER 变量意义一览表
REMOTE_ADDR:扔出REQUEST的客户端IP地址(也可能是路由上最后一个Proxy)
REMOTE_HOST: 扔出REQUEST的客户端主机名(也可能是路由上最后一个Proxy)
REMOTE_USER:扔出REQUEST的客户端认证用户名
REMOTE_PORT:扔出REQUEST的客户端端口号
REMOTE_IDENT:扔出REQUEST的客户端用户名(支持IDENT协议的时候才有用)
HTTP_X_FORWARDED_FOR:接续的原始IP地址
HTTP_VIA:Proxy的信息
HTTP_FORWARDED:Proxy的URI、以及客户端的全域名(FQDN)
HTTP_CACHE_CONTROL:Cache的控制信息(比如 max-age=259200 最长时间)
HTTP_PROXY_CONNECTION:Proxy的接续状态
HTTP_SP_HOST:接续的原始IP地址
HTTP_CACHE_INFO:Cache信息
HTTP_CLIENT_IP:客户端IP(TrafficServer或者NetscapeProxy会使用此变量)
HTTP_MAX_FORWARDS:最多路经几个Proxy
HTTP_ACCEPT: 客户端的浏览器支持的MIME种类[cchere.net 西西河 你克我服]
HTTP_ACCEPT_CHARSET:客户端浏览器支持的字符集
HTTP_ACCEPT_ENCODING:客户端浏览器支持的编码方式(比如gzip,deflate等等)
HTTP_ACCEPT_LANGUAGE:客户端浏览器支持的语种(比如cn,en等等)
HTTP_CONNECTION:HTTP接续的状态(比如keep-alive等等)
HTTP_COOKIE:对当前URL所保留的相关Cookie信息
HTTP_FROM:客户端浏览器所设定的email地址
HTTP_HOST:客户端所要访问的主机名
HTTP_PRAGMA:Cache模式(对HTTP 1.0有效)
HTTP_REFERER:本次访问前的上次访问URL地址
HTTP_UA_CPU:客户端的CPU信息
HTTP_UA_OS:客户端的OS信息
HTTP_USER_AGENT:客户但浏览器的版本信息