10-02
02
为什么request.getHeader("Referer")=null
作者:Java伴侣 日期:2010-02-02
用JS调用 request.getHeader("Referer"),取值为空。理解如下:
我的来源页是一个flash文件,点击flash上的一个链接跳到下一页,在该页获取来源页地址request.getHeader("Referer"),却为空值,这是怎么回事??!!
===============
getHeader("Referer")要走http协议时才有值,也就是说要通过<a href="url">sss</a>标记才能获得那个值
而通过改变location或是<a href="javascript:location='url'">sss</a>都是得不到那个值得。
request.getHeader("Referer")返回的是一个Enumeration 玫举
使用request.getHeaders("Referer")返回的Enumeration 玫举本身就只有一个元素,也就是request.getHeader("Referer")地返回值
一样的
当在a.jsp是通过某个按钮的 onclick="location='b.jsp'"
进入b.jsp的,在b.jsp中也是得不到来源页a.jsp的地址
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=35595&messageID=209688
以前有这样一个帖子 目的 是如何获取 上一级页面的地址
OK,如果发送页面以POST方式提交
这个request.getHeader("referer") 完全没有问题
但是如果如果发送页面以get方式提交 ,或许还带有参数
request.getHeader("referer") 会返回空值 如何解决呢?
====================
说下我的具体情况吧
比如在每个JSP页面 都包含
<%@page errorPage="../error.jsp" %>
如果出现任何问题 都会跳到error.jsp页面
error.jsp 有一个back的按钮 要求实现返回上一级页面
其实利用history.back() 就可以实现 ,但是由于代理服务器原因 去掉了缓存的原因 所以需要另一种方式来实现此功能
大家有什么好的方法和建议吗??谢谢
===========================
把地址保存到request或session里面去。
你根本没有理解<%@page errorPage="../error.jsp" %>
的真正意义,否则不可能会问出这种问题
=====================
不好意思 get 用request.getHeader 是没问题的
document.location="xx.jsp" 这样才有问题
======================
那楼上请教一下该如何理解呢 ~ 说实话 我只知道errorpage 就是相当于一个大的catch
但需求要求在这个页面 有一个返回上一级页面的功能
OK,如果发送页面以POST方式提交
这个request.getHeader("referer") 完全没有问题
但是如果如果发送页面以get方式提交 ,或许还带有参数
request.getHeader("referer") 会返回空值 如何解决呢?
===================
我用get方式提交怎么不会返回空值啊?
=====================
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("a");
e.href = url;
document.body.appendChild(e);
e.click();
}
然后你调用:
jump("http://host/aaa.jsp");看看肯定能取到.
====================
昨天急 我把location 全部用form提交的方式实现了
谢谢! 这个方法不错 生成一个 连接再掉 click 。肯定没问题
thankyou~
============================
referer的意图是判断访问来源,比如你想知道用户是通过google还是baidu找到你的页面的,就可以判断referer
很多下载站点也用它防止盗链,所以flash get之类的软件会自动把当前页作为referer字段发给下载地址以伪装成站内点击
不知道 wondersimon 是否已经解决他自己的那个问题,时隔这么久我今天也遇到此问题但不知道解决,因为我在用request.getHeader("Referer")时获取到的竟然是我自己页面上的域,而不是上级页面的域名,说明:上级页面(既主调页面)是别人服务器上的某个页面,在他的页面中只加载一段href链接,当有客户点击这个链接时就跳转到我服务器上的某个页面,而些我的数据库竟然获取到的结果是我自己服务器上那个页面的域(既我自己的域名),再请问我这是怎么回事,该如何是好,(补:看书上说明request.getHeader("Referer")理论上是可以获取上级域名的,但我现在实在是晕了)
我的来源页是一个flash文件,点击flash上的一个链接跳到下一页,在该页获取来源页地址request.getHeader("Referer"),却为空值,这是怎么回事??!!
===============
getHeader("Referer")要走http协议时才有值,也就是说要通过<a href="url">sss</a>标记才能获得那个值
而通过改变location或是<a href="javascript:location='url'">sss</a>都是得不到那个值得。
request.getHeader("Referer")返回的是一个Enumeration 玫举
复制内容到剪贴板 程序代码
Enumeration e =request.getHeaders("Referer");
String a;
if(e.hasMoreElements()){
a=(String)e.nextElement();
}else{
a="直接访问";
}
String a;
if(e.hasMoreElements()){
a=(String)e.nextElement();
}else{
a="直接访问";
}
使用request.getHeaders("Referer")返回的Enumeration 玫举本身就只有一个元素,也就是request.getHeader("Referer")地返回值
一样的
当在a.jsp是通过某个按钮的 onclick="location='b.jsp'"
进入b.jsp的,在b.jsp中也是得不到来源页a.jsp的地址
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=35595&messageID=209688
以前有这样一个帖子 目的 是如何获取 上一级页面的地址
OK,如果发送页面以POST方式提交
这个request.getHeader("referer") 完全没有问题
但是如果如果发送页面以get方式提交 ,或许还带有参数
request.getHeader("referer") 会返回空值 如何解决呢?
====================
说下我的具体情况吧
比如在每个JSP页面 都包含
<%@page errorPage="../error.jsp" %>
如果出现任何问题 都会跳到error.jsp页面
error.jsp 有一个back的按钮 要求实现返回上一级页面
其实利用history.back() 就可以实现 ,但是由于代理服务器原因 去掉了缓存的原因 所以需要另一种方式来实现此功能
大家有什么好的方法和建议吗??谢谢
===========================
把地址保存到request或session里面去。
你根本没有理解<%@page errorPage="../error.jsp" %>
的真正意义,否则不可能会问出这种问题
=====================
不好意思 get 用request.getHeader 是没问题的
document.location="xx.jsp" 这样才有问题
======================
那楼上请教一下该如何理解呢 ~ 说实话 我只知道errorpage 就是相当于一个大的catch
但需求要求在这个页面 有一个返回上一级页面的功能
OK,如果发送页面以POST方式提交
这个request.getHeader("referer") 完全没有问题
但是如果如果发送页面以get方式提交 ,或许还带有参数
request.getHeader("referer") 会返回空值 如何解决呢?
===================
我用get方式提交怎么不会返回空值啊?
=====================
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("a");
e.href = url;
document.body.appendChild(e);
e.click();
}
然后你调用:
jump("http://host/aaa.jsp");看看肯定能取到.
====================
昨天急 我把location 全部用form提交的方式实现了
谢谢! 这个方法不错 生成一个 连接再掉 click 。肯定没问题
thankyou~
============================
referer的意图是判断访问来源,比如你想知道用户是通过google还是baidu找到你的页面的,就可以判断referer
很多下载站点也用它防止盗链,所以flash get之类的软件会自动把当前页作为referer字段发给下载地址以伪装成站内点击
不知道 wondersimon 是否已经解决他自己的那个问题,时隔这么久我今天也遇到此问题但不知道解决,因为我在用request.getHeader("Referer")时获取到的竟然是我自己页面上的域,而不是上级页面的域名,说明:上级页面(既主调页面)是别人服务器上的某个页面,在他的页面中只加载一段href链接,当有客户点击这个链接时就跳转到我服务器上的某个页面,而些我的数据库竟然获取到的结果是我自己服务器上那个页面的域(既我自己的域名),再请问我这是怎么回事,该如何是好,(补:看书上说明request.getHeader("Referer")理论上是可以获取上级域名的,但我现在实在是晕了)
评论: 0 | 引用: 0 | 查看次数: 1368
发表评论