request.getHeader() 相关详细与x-forwarded-for

System.out.println("Protocol: " + request.getProtocol()); 
System.out.println("Scheme: " + request.getScheme()); 
System.out.println("Server Name: " + request.getServerName() ); //获得服务器的名字 
System.out.println("Server Port: " + request.getServerPort()); //获得服务器的端口号
System.out.println("rotocol: " + request.getProtocol()); 
System.out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo()); 
System.out.println("Remote Addr: " + request.getRemoteAddr()); /获得客户端的ip地址 
System.out.println("Remote Host: " + request.getRemoteHost()); //获得客户端电脑的名字,若失败,则返回客户端电脑的ip地址
System.out.println("Character Encoding: " + request.getCharacterEncoding()); 
System.out.println("Content Length: " + request.getContentLength()); 
System.out.println("Content Type: "+ request.getContentType()); 
System.out.println("Auth Type: " + request.getAuthType()); 
System.out.println("HTTP Method: " + request.getMethod()); //获得客户端向服务器端传送数据的方法有get、post、put等类型
System.out.println("ath Info: " + request.getPathInfo()); 
System.out.println("ath Trans: " + request.getPathTranslated()); 
System.out.println("Query String: " + request.getQueryString()); 
System.out.println("Remote User: " + request.getRemoteUser()); 
System.out.println("Session Id: " + request.getRequestedSessionId()); 
System.out.println("Request URI: " + request.getRequestURI());//获得发出请求字符串的客户端地址  

System.out.println("Servlet Path: " + request.getServletPath()); //获得客户端所请求的脚本文件的文件路径 
System.out.println(request.getHeaderNames()); //返回所有request header的名字,结果集是一个enumeration(枚举)类的实例
System.out.println("Accept: " + request.getHeader("Accept")); 
System.out.println("Host: " + request.getHeader("Host")); 
System.out.println("Referer : " + request.getHeader("Referer")); 
System.out.println("Accept-Language : " + request.getHeader("Accept-Language")); 
System.out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding")); 
System.out.println("User-Agent : " + request.getHeader("User-Agent")); //返回客户端浏览器的版本号、类型 
System.out.println("Connection : " + request.getHeader("Connection")); 
System.out.println("Cookie : " + request.getHeader("Cookie")); 
System.out.println("Created : " + session.getCreationTime()); 
System.out.println("LastAccessed : " + session.getLastAccessedTime());

X-Forwarded-For

X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。
X-Forwarded-For( XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在Forwarded-For HTTP头字段标准化草案中正式提出。
当今多数缓存服务器的使用者为大型ISP,为了通过缓存的方式来降低他们的外部带宽,他们常常通过鼓励或强制用户使用代理服务器来接入互联网。有些情况下, 这些代理服务器是透明代理, 用户甚至不知道自己正在使用代理上网。
如果没有XFF或者另外一种相似的技术,所有通过代理服务器的连接只会显示代理服务器的IP地址(而非连接发起的原始IP地址), 这样的代理服务器实际上充当了匿名服务提供者的角色, 如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理服务器提供的连接原始IP地址的真实性,因此, XFF的有效使用应该保证代理服务器是可信的, 比如可以通过建立可信服务器白名单的方式。
通过request获取各种头ip:
<%=request.getHeader("Proxy-Client-IP") %>
<%=request.getHeader("WL-Proxy-Client-IP") %>
<%=request.getHeader("x-forwarded-for") %>
<%=request.getHeader("http_client_ip") %>
<%=request.getHeader("HTTP_X_FORWARDED_FOR")%>
<%=request.getRemoteAddr() %>

你可能感兴趣的:(jsp)