出于自我资源保护和排他竞争或者某些安全原因,不少资源(图片,视频等)限制引用范围。比如新浪博客的图片,同一个图片地址,在博客上好好的,贴到其他地方就变成”仅限新浪博客用户交流使用“了。
服务器是怎样区分请求来源的呢?答案就是浏览器在发起请求时,会发送一组叫HTTP header的信息,而其中又有一个叫Referer的字段是条件请求页面的URL。对有反盗链机制的资源,服务器检测出这个Referer不是来自许可域名,就直接拒绝请求或者重定向到错误图片了。
既然这样,只要把这个Referer改成有效的URL,就能欺骗服务器,正常接受请求了。
在以前,浏览器下直接对HTTP请求操作是Firefox的专利,其它浏览器想达到类似效果,需通过Fiddler2 Proximation之类的外部软件修改。不过最近的Google Chrome浏览器引入了一组WebRequest API,现在终于能在Chrome上进行类似的操作。
可是由于Google 的扩展站是不允许发布试验阶段API的扩展的,实际成品不多,而官方文档的例子也稍显简单。这是我写的一个操作HTTP请求中的http header实例,希望对你用起这组API有参考作用。
下面取自官方文档,一个典型的请求在不同阶段会激发不同的事件。很明显,我们要修改的是HTTP 请求headers,相应的事件是onSendHeaders和onBeforeSendHeaders都可以,这里用后者。
|
v
onBeforeRequest --------------------------------
| ^ | | [data and file URLs]
| | | [redirection |
| ---------- | from extension] |
v | | |
onBeforeSendHeaders | | |
|