问一个Referer头字段的问题

fatlady_zouji 2008-04-05 12:45:09

张孝祥的《javaweb开发内幕》书上说当通过超链接访问某网址时,会在HTTP请求消息的头字段中带上Referer头字段

然后书上的一个例子通过一个超链接去访问自己的一个Servlet,并在
service方法中通过 request.getHeader("referer")抓出头字段Referer的值

可为啥我按照书上一模一样写的例子,通过超链接访问时,总是没有出现Referer头,
用request.getHeader("referer")得到的值也是null

用输出request.getHeaderNames() 里面各种各样的头都有,就是没有Referer=。=

是不是现在协议有点儿变了?


谢谢各位大人指教,在此有礼了~
...全文
1254 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
廖雪峰 2008-04-10
  • 打赏
  • 举报
回复
Referer大小写敏感
只有http://开头并且点页面链接才会发送Referer
直接在地址栏写地址不会有Referer
跨域也会发送Referer

推荐用ieHttpHeader插件看ie发送和接收的http头
椅子 2008-04-08
  • 打赏
  • 举报
回复
to 楼上

file://访问不构造http头,和http;//访问不同
zhangshengjinggg 2008-04-08
  • 打赏
  • 举报
回复
下载个winsock Expert抓包一看就明白了:
从本地双击打开的htm文件,点击里面的link去访问别的页面时,不会往外发送referer这个字段

另外,回classnameextendsjava:
c:/xxx.html严格说也是一个url吧,或者说file://c:/xxx.html也是url,具体见百度百科
fatlady_zouji 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kokobox 的回复:]
String url = request.getHeader("REFERER");

url取到的值是此次请求的前一次请求的url地址

但是此次请求必须通过超连接请求或是提交请求才能得到上一个请求的URL

直接在地址栏输入访问的话则是null

建议你先清楚一下页面缓存,和浏览器的缓存。
[/Quote]

大小写不敏感的吧=。=
kokobox 2008-04-05
  • 打赏
  • 举报
回复
String url = request.getHeader("REFERER");

url取到的值是此次请求的前一次请求的url地址

但是此次请求必须通过超连接请求或是提交请求才能得到上一个请求的URL

直接在地址栏输入访问的话则是null

建议你先清楚一下页面缓存,和浏览器的缓存。
fatlady_zouji 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yizia 的回复:]
假设我打开浏览器,访问baidu,搜索到椅子,再打开其中一个页面
那么baidu得到的referer是空,后面页面得到的referer是www.baidu.com...
[/Quote]

我懂你的意思啊,我就是通过一个html文件:
<a href="http://localhost:8080/it317/servlet/RequestHeadersServlet">referer header test</a>

去访问RequestHeadersServlet这个Servlet,然后在RequestHeadersServlet的service方法中调用String referrer_value = req.getHeader("referer");

结果referrer_value的值却是null

调用req.getHeaderNames();得到的里面也没有Referer这个头
fuyou001 2008-04-05
  • 打赏
  • 举报
回复
Referer表示超链接源的URL!你想看到实验效果,要从a-->(能过<a href="b.jsp")b页面,然后在B里可以取得Refere参数!
椅子 2008-04-05
  • 打赏
  • 举报
回复
假设我打开浏览器,访问baidu,搜索到椅子,再打开其中一个页面
那么baidu得到的referer是空,后面页面得到的referer是www.baidu.com...
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fatlady_zouji 的回复:]
谢谢指教,我不知道为什么会这样,不过你说的好像是对的,我在我的硬盘中直接双击打开那个html文件,再点击上面的超链接,就没有Referer头
我在IE里面输入http://localhost:8080/it317/Re…
[/Quote]
你要它在referer头里设置啥呢? 它要的是一个URL 给它个C:/xx.html? 它也没法翻译成url阿
montao 2008-04-05
  • 打赏
  • 举报
回复

呵呵 你在硬盘中双击打开的HTML页面 能连接到一个Servlet嘛? 呵呵
椅子 2008-04-05
  • 打赏
  • 举报
回复
硬盘双击,是file://xxx.htm访问

和http访问不一样

referer是http协议中定义的头

另外,是否大小写敏感,有待确认,我是历来严格要求自己保持良好的大小写习惯
kokobox 2008-04-05
  • 打赏
  • 举报
回复
终于看到lz的回复了,一直看不到o(∩_∩)o...

这是为了防止连接被盗
fatlady_zouji 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kokobox 的回复:]
你要访问的那个超链接,必须是和你的tomcat是同一域下的,否则就是null

比如你超链接是http://127.0.0.1/web/a.jsp

才可以,如果你的超链接是http://www.163.com 不是同一域的,返回就是null
[/Quote]

谢谢指教,我不知道为什么会这样,不过你说的好像是对的,我在我的硬盘中直接双击打开那个html文件,再点击上面的超链接,就没有Referer头
我在IE里面输入http://localhost:8080/it317/Referrer.html 去访问那个html文件,再点击上面的超链接,就出来了Referer头。。。

但我不懂为啥会这样
fatlady_zouji 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yizia 的回复:]
敏感
[/Quote]

=.=张孝祥的书上说不敏感的阿.
kokobox 2008-04-05
  • 打赏
  • 举报
回复
你要访问的那个超链接,必须是和你的tomcat是同一域下的,否则就是null

比如你超链接是http://127.0.0.1/web/a.jsp

才可以,如果你的超链接是http://www.163.com 不是同一域的,返回就是null
椅子 2008-04-05
  • 打赏
  • 举报
回复
敏感

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧