当前位置:编程学习 > C#/ASP.NET >>

Request.ServerVariables["HTTP_REFERER"]有时候获取不到,怎么回事?

我有一段js部署在各个页面上负责采集信息
Stat.js
---------------------------------------
if (typeof (StatImage) == 'undefined') {
    StatImage = new Image;
    var refurl = encodeURIComponent(Stat_GetReferrer());
    StatImage.src = "Stat.ashx?r=" + refurl + "&sw=" + (screen.width) + "&sh=" + (screen.height) + "&rad=" + (Math.random() * 100000);

}
function Stat_GetReferrer() {
    var url = escape(document.referrer);
    if (url == "" && window.opener != null) {url = window.opener.document.URL;}
    if (url.length > 300) {return url.substring(0, 300); }else{return url;}
}

然后我在Stat.ashx接收处理
--------------------------------------
string url = HttpContext.Current.Request.ServerVariables["HTTP_REFERER"];

在10万次请求中,可能有100多次url=null

我想问一下,为什么会出现 null呢?





--------------------编程问答-------------------- 可能是提交失败呢。 --------------------编程问答-------------------- referer是来源链接。
如果网页是直接输入地址打开的。那么referer为null。 --------------------编程问答-------------------- 具体没用过这个东西,LZ可以看看这个,希望对你有帮助
http://info.52z.com/html/4529.html

下列情况是从浏览器的地址栏正常取得Request.ServerVariables("HTTP_REFERER")的:
   1.直接用<a href>
   2.用Submit或<input type=image>提交的表单(POST or GET)
   3.使用Jscript提交的表单(POST or GET)

下面我们再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情况:
   1.从收藏夹链接
   2.单击'主页'或者自定义的地址
   3.利用Jscript的location.href or location.replace()
   4.在浏览器直接输入地址
   5.<%Response.Redirect%>
   6.<%Response.AddHeader%>或<meta http-equiv=refresh>转向
   7.用XML加载地址

显然,Request.ServerVariables("HTTP_REFERER")在多数情况下是不能正常工作的,下面我们看一个例子:
ref.asp
<% 
    response.write "You came from: " & request.servervariables("http_referer") 
%>

ref.htm
<% 
    Response.AddHeader "Refresh", "10;URL=ref.asp" 
%> 

<meta http-equiv='refresh' content='10;URL=ref.asp'> 

<form method=GET action=ref.asp name=getform> 
    <input type=submit value=' Go there (GET) >> '> 
    <input type=image style='cursor:hand'> 
</form><p> 
看看上面的代码会得到什么的结果.
<form method=POST action=ref.asp name=postform> 
    <input type=submit value=' Go there (POST) >> '> 
    <input type=image style='cursor:hand'> 
</form><p> 

<a href='ref.asp'>直接链接</a><p> 

<a href='#' >javascript POST</a>  --------------------编程问答--------------------
引用 2 楼 gzdiablo 的回复:
referer是来源链接。
如果网页是直接输入地址打开的。那么referer为null。

即使是直接打开A页面的
如果我在A页面上布上这段代码,
 StatImage.src = "Stat.ashx?r=" + refurl + "&sw=" + (screen.width) + "&sh=" + (screen.height) + "&rad=" + (Math.random() * 100000);
那么执行以后,
在Stat.ashx上获取ref,那么应该就是A页面的
--------------------编程问答-------------------- 难道一定要我在A页面上先获取到url后然后传给Stat.ashx?u=A.html
?? --------------------编程问答-------------------- 有谁知道吗?
--------------------编程问答-------------------- 另外referer是由浏览器收集并提交的,并不是所有的浏览器会发送这个头。
例如:有些蜘蛛或爬虫是不会发送referer的. --------------------编程问答-------------------- 取不到是正常的,很多情况下都是null的,你没有必要纠结在这一点。
--------------------编程问答--------------------
引用 8 楼 net_lover 的回复:
取不到是正常的,很多情况下都是null的,你没有必要纠结在这一点。

也就是说丢失一部分数据是正常的 --------------------编程问答-------------------- 我还是用window.location.href去补偿一下吧 --------------------编程问答-------------------- 3楼不是说了吗?像浏览器直接输入url访问就不能得到的。 --------------------编程问答--------------------
引用 11 楼 net_lover 的回复:
3楼不是说了吗?像浏览器直接输入url访问就不能得到的。

问题是我不是直接输入的
我是用StatImage.src = "Stat.ashx?r=" + refurl + "&sw=" + (screen.width) + "&sh=" + (screen.height) + "&rad=" + (Math.random() * 100000);
这种方式来请求的,那么当前页面的url就会是Stat.ashx的ref
这个99%的情况能获取得到,只有那么一点点数据会是null
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,