问一个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=。=

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


谢谢各位大人指教,在此有礼了~
...全文
1353 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
  • 打赏
  • 举报
回复
敏感
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

81,111

社区成员

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

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