zoukankan      html  css  js  c++  java
  • request.getHeader("Referer")理解【转载】

    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字段发给下载地址以伪装成站内点击
  • 相关阅读:
    Python入门示例系列07 Python注释
    Python入门示例系列09 Python算术运算
    Python入门示例系列10 字符串(初级)
    SQL循环26个字母插入到一个表中
    UBUNTU LINUX中连接ANDROID 小米真机调试
    Ubuntu下包含2种远程桌面的方式:VINOServer以及VNC Server
    一个合格的程序员应该读过哪些书
    linux下如何查看文件编码格式及转换文件编码
    尽量不要使用文本模式
    S.O.L.I.D.类设计原则
  • 原文地址:https://www.cnblogs.com/jgig11/p/4164351.html
Copyright © 2011-2022 走看看