`
忘忧鸟
  • 浏览: 144961 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

为什么request.getHeader("Referer")=null

    博客分类:
  • Web
 
阅读更多

我的来源页是一个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="直接访问";
}

 

使用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")理论上是可以获取上级域名的,但我现在实在是晕了)
分享到:
评论

相关推荐

    JSP获取HTTP header信息(request)例子

    - `request.getHeader("Referer")`: 获取上一个页面的URL。 - `request.getHeader("Accept-Language")`: 获取客户端可接受的语言。 - `request.getHeader("Accept-Encoding")`: 获取客户端支持的编码方式。 - `...

    关于request.getHeader(&quot;Referer&quot;)的问题探讨

    因此,当用户使用了这样的设置,`request.getHeader("Referer")`将返回null或空字符串。 其次,如描述中提到的,通过`window.location` JavaScript方法或者使用`location.href`进行页面跳转不会发送`Referer`。这是...

    图片防盗链(jsp)

    1. Referer检测:JSP可以通过`request.getHeader("Referer")`获取请求的来源页面URL。如果Referer不在预期的域名范围内,就拒绝显示图片。例如: ```jsp String referer = request.getHeader("Referer"); if ...

    Shiro开启CSRF表单防护

    String referer = request.getHeader("Referer"); // 判断 Referer 是否以 合法的域名 开头。 if (referer != null) { // 如 http://baidu.com/abc.html https://www.baidu.com:8080/abc.html if (referer....

    Filter_Listener相信代码使用

    if(null==reque.getHeader("Referer")){ request.setAttribute("message", "你进行了不合法的操作!!!"); request.getRequestDispatcher("error.jsp").forward(request, response); 里面有更详细的代码...

    httpservlet_request

    String referer = request.getHeader("Referer"); if (referer != null && !referer.startsWith("http://yourdomain.com")) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "非法引用"); return; } ...

    正则匹配URL.txt

    这里,我们首先通过`request.getHeader("Referer")`获取请求头部中的`Referer`字段,然后使用`matches`方法检查其是否符合上述正则表达式。如果匹配成功,我们设置响应状态为301永久重定向,并指定重定向目标和连接...

    jsp返回登陆前的页面的几种实现

    在登录页面可以通过`request.getHeader("Referer")`获取当前请求的来源页面URL。 ```java String lastUrl = request.getHeader("Referer"); ``` 2. **记录来源页面地址**: 可以将`lastUrl`作为隐藏参数传递...

    java防盗链代码和jar

    String referer = request.getHeader("Referer"); if (referer == null) { return false; // 如果没有Referer,可能是一个直接的链接,拒绝 } try { URL url = new URL(referer); // 检查域名是否匹配,例如...

    防盗链filter

    String referer = req.getHeader("Referer"); if (referer == null || !referer.startsWith("http://yourwebsite.com")) { // 替换为你的网站地址 ((HttpServletResponse) response).sendError...

    java 过滤器

    String referer = request.getHeader("Referer"); if (referer != null && !referer.startsWith("http://yourdomain.com")) { // 替换为你的域名 // 如果来源非法,可以返回错误信息或者阻止请求 response....

    java 防盗链详解及解决办法

    String referer = req.getHeader("referer"); if(null != referer && referer.trim().startsWith("http://localhost:8080/dstn")){ System.out.println("正常页面请求"); chain.doFilter(req, resp); }else{ ...

    防盗链的方式借鉴.pdf

    String refer = req.getHeader("Referer"); // 获取 Referer if (refer != null && !"".equals(refer) && !refer.contains(req.getServerName())) { System.out.println("盗链来自:" + req.getRemoteAddr()); ...

    HTTP请求头概述(HttpServletRequest)

    客户端发起请求时,除了指定请求类型(通常为GET或POST)外,还可以附加一系列请求头(Request Headers)来提供更丰富的上下文信息。这些请求头不仅有助于服务器更好地理解请求,还能提高数据交换的效率。 #### ...

    HttpServletRequest对象常用功能_动力节点Java学院整理

    String reqUrl = request.getHeader("referer"); if (reqUrl == null || !reqUrl.startsWith("http://localhost:8080/myservlet/index.jsp")) { response.sendRedirect("/myservlet/index.jsp"); return; } ``` ...

    jsp实现防盗链的方法

    String referer = request.getHeader("Referer"); if (referer == null || referer.indexOf("yourdomain.com") ) { out.println("做人要厚道"); // 对于非法访问显示提示信息 } else { out.println("合法访问")...

    Java Web端程序实现文件下载的方法分享

    String referer = request.getHeader("Referer"); // 假设只有来自本站的请求才允许下载 if (referer == null || !referer.startsWith("http://yourwebsite.com")) { response.sendError(HttpServletResponse.SC...

    java防盗链在报表中的应用实例(推荐)

    String referer = req.getHeader("referer"); // 判断Referer是否为允许的来源 if (null != referer && (referer.trim().startsWith("http://localhost:8033") || referer.trim().startsWith(...

    JavaWeb之Filter过滤器详解

    String referer = req.getHeader("Referer"); // 判断Referer是否符合预期,这里假设以"localhost"开头的请求视为合法 if (referer != null && !referer.startsWith("http://localhost")) { (...

Global site tag (gtag.js) - Google Analytics