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> --------------------编程问答--------------------
即使是直接打开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的,你没有必要纠结在这一点。
--------------------编程问答--------------------
也就是说丢失一部分数据是正常的 --------------------编程问答-------------------- 我还是用window.location.href去补偿一下吧 --------------------编程问答-------------------- 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