日期:2014-05-17  浏览次数:20848 次

httpwebrequest.Referer的疑问,求csdn牛人解惑啊~~~~~~~
做模拟登陆的时候,关于httpwebrequest的Referer属性,作用是告诉服务器这个请求是从哪里跳转来的,哪为什么把这个请求的链接直接放到浏览器打开却是可以,这明显不是跳转嘛,为什么会这样?
还有,它为什么要跟AllowAutoRedirect = true放一起才起作用,allowautoredirect这个属性不是说明这个请求能不能自动跳转吗,那就不关referer的事了,那为什么还要放一起

------解决方案--------------------
引用:
哪为什么把这个请求的链接直接放到浏览器打开却是可以,这明显不是跳转嘛,为什么会这样?


直接在浏览器打开,Referer可能为空,能跳转,说明这个服务器可以设置Referer为空
如果你要访问百度去把Referer设置为360.cn,那就有可能会拒绝


------解决方案--------------------
当你打开一个网页,然后浏览器去请求这个网页引用的图片,在请求图片的get中会发送Referer给服务器。当你点了这个网页的一个链接打开另一个网页的时候,这个请求也会包含原先网页地址,作为Referer参数发送给服务器。

因此,Referer有很多作用,比如图片防盗链,统计链接引用来源,为特定请求做服务器缓存等等。

总而言之,referer是http请求的一个字段。

AllowAutoRedirect是httpwebrequest的一个属性,用来指定httpwebrequest如何提交请求,当AllowAutoRedirect允许的时候,httpwebrequest提交get或者post请求给服务器,服务器如果返回了301/302状态,并且告诉httpwebrequest,httpwebrequest会继续将请求发送给跳转后的地址,直到服务器返回数据,对于客户端来说,仿佛你看不到发生了跳转。而AllowAutoRedirect禁用的时候httpwebrequest提交数据一旦收到301/302状态,它会忠实地向你返回这一切,由你决定进一步处理,你需要额外的代码获取跳转地址,并且除非你自己接着请求,否则无法得到跳转后的网页。

总而言之,AllowAutoRedirect和http请求没有任何关系。