request.getHeader("Referer")用于获取来源页地址,但有时却为空值,这是怎么回事。原因如下:

    getHeader("Referer")要走http协议时才有值,也就是说要通过<a href="url">a</a>标记才能获得那个值,而通过改变location或是<a href="javascript:location='url'">a</a>都是得不到那个值的。 

request.getHeader("Referer")返回的是一个Enumeration 玫举

Enumeration e =request.getHeaders("Referer");
String a;
if(e.hasMoreElements()){
a=(String)e.nextElement();
}else{
a="直接访问";
}

使用request.getHeaders("Referer")返回的Enumeration 玫举本身就只有一个元素,也就是request.getHeader("Referer")的返回值。

以前有这样一个帖子目的是如何获取上一级页面的地址

如果发送页面以POST方式提交,这个request.getHeader("referer") 完全没有问题。但是如果发送页面以get方式提交 ,或许还带有参数,request.getHeader("referer") 会返回空值(可以防止用户在地址里粘贴链接,因为在地址栏里贴地址是数据get提交方式)。那么该如何解决呢?
说下我的具体情况吧

比如在每个JSP页面都包含    如果出现任<% page errorPages="../error.jsp"%>

何问题 ,都会跳到error.jsp页面。error.jsp 有一个back的按钮 要求实现返回上一级页面

其实利用history.back() 就可以实现 ,但是由于代理服务器原因 去掉了缓存的原因所以需要另一种方式来实现此功能。
referer是浏览器在用户提交请求当前页面中的一个链接时,将当前页面的URL放在头域中提交给服务端的,如当前页面为a.html,它里面有一个b.html的链接,当用户要访问b.html时浏览器就会把a.html作为referer发给服务端.
errorpage 根本不是用户去访问的,绝对大多数errorPage是forwaord,由服务端直接调用http连接访问errorpage将结果发给用户.用户根本没有访问errorPage.
对于location="aaa.jsp"这样用js访问没有referer,是因为当执行location="aaa.jsp"时,当前页面的URL已经是aaa.jsp,真的要取上一级当然可以从history中取到发给服务端,但那已经不是Referer的本意了.可以以如下代码来代替:

function jump(url){
var e = document.createElement_x("a");
e.href = url;
document.body.appendChild(e);
e.click();
}

然后你调用:
jump("http://host/aaa.jsp");看看肯定能取到.

referer的意图是判断访问来源,比如你想知道用户是通过google还是baidu找到你的页面的,就可以判断referer。很多下载站点也用它防止盗链,所以flash get之类的软件会自动把当前页作为referer字段发给下载地址以伪装成站内点击

request.getHeader("Referer")理解【转载】的更多相关文章

  1. 【JS】【5】request.getHeader("referer")的作用

    正文: request.getHeader("referer"):获取来访者地址 注意:只有通过链接访问当前页的时候,才能获取上一页的地址,以下情况是获取不到值的: 只有通过链接访 ...

  2. web页面防盗链功能使用--request.getHeader("Referer")

    使用Request对象设置页面的防盗链 所谓的防盗链就是当你以一个非正常渠道去访问某一个Web资源的时候,服务器会将你的请求忽略并且将你的当前请求变为按正常渠道访问时的请求并返回到相应的页面,用户只有 ...

  3. request.getHeader("referer")

    在开发web程序的时候,有时我们需要得到用户是从什么页面连过来的,这就用到了referer. 它是http协议,所以任何能开发web程序的语言都可以实现,比如jsp中是: request.getHea ...

  4. servlet中使用request.getHeader("referer")获取页面从哪跳转过来的

    问题 servlet中使用request.getHeader("referer")获取页面从哪跳转过来的,利用这个方法可以判断网页是否正常登录.我做了一个javaweb小项目,其中 ...

  5. request.getHeader所想到的

    request.getHeader(""),简单的说就是获取请求的头部信息,根据http协议,它能获取到用户访问链接的信息. /** * Returns the value of ...

  6. Java 中的 request 和response 理解

    request和response(请求和响应)  1.当Web容器收到客户端的发送过来http请求,会针对每一次请求,分别创建一个用于代表此次请求的HttpServletRequest对象(reque ...

  7. javaweb之request获取referer请求头实现防盗链

    package test.request; import java.io.IOException; import javax.servlet.ServletException; import java ...

  8. request.getHeader("x-forwarded-for")这是什么意思

    request.getHeader,简单的说就是获取请求的头部信息,根据http协议,它能获取到用户访问链接的信息,以下是我们常用的: request.getHeader("referer& ...

  9. servlet request getHeader(“x-forwarded-for”) 获取真实IP

    request方法客户端IP: request.getRemoteAddr() 输出:192.168.0.106 客户端主机名:request.getRemoteHost()输出:abc reques ...

随机推荐

  1. [置顶] 我的设计模式学习笔记------>Java设计模式总概况

    设计模式的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计 ...

  2. .NET文件上传的大小限制配置

    <system.web>  <!--maxRequestLength单位是Kb-->  <httpRuntime maxRequestLength="20971 ...

  3. Routed Events【pluralsight】

    Routing Strategies: Direct Bubbling Tunneling WHy use them? Any UIElement can be a listener Common h ...

  4. Flex应用程序如何启动

    Flex应用程序启动 编写一个简单的Flex应用程序并不复杂,就算你从来没接触过Flex程序设计,照着帮助的实例步骤,不需花多长时间也能做出一个漂亮简捷的小程序出来.不过,随着对Flex程序编写的深入 ...

  5. Hibernate+Struts2完成修改数据功能

    先看修改之前的数据: 下面是具体代码 view层: 顺着链接,继续: 继续: 继续 控制层和逻辑层: action: //修改 public String updateperson() { Strin ...

  6. git filename to long问题解决

    在.git/config 下面编辑 [core] longpaths = true

  7. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  8. 工作一直没有进步怎么办?试试PDCA法则吧!

    许多人在工作或者学习的时候,总是会发现自己过了一段时间以后,全然没有不论什么进步.或者进步很之少. 而对于每个渴望让自己变得更好的人来说.是一件很令人苦恼的事情,今天我们就来谈一下工作和学习上,可实现 ...

  9. jquery 预览提交的表单

    预览表单,查看后确认提交或者返回重填 演示 XML/HTML Code <form class="mform" id="myform" method=&q ...

  10. UVALive 4192 Close Enough Computations 水题

    Close Enough Computations 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge& ...