1、referer 的作用
http请求头里,有一个referer首部,这个首部可以告知服务端,当前的请求的来源。比如此刻,你在浏览这篇文章,假设这篇文章的地址是A,在我的文章里,有一篇CSDN的文章链接,链接地址是B,如果你点击链接B,那么浏览器在想CSDN发出请求时,就会在请求头里将referer设置为A,这样,当CSDN收到请求后,就知道,这次的流量是从知乎来的。
这对于数据分析来说,是非常重要的,比如,你在许多网站上投放了广告,你需要知道每个网站上的点击量,用户点击后来到你的网站,你就可以通过referer这个首部来统计各个网站的点击情况了,进而优化广告投放方法。
2、爬虫中的应用
许多网站,会利用这个字段进行反爬,比如豆瓣,如果你直接向 https://movie.douban.com/subject/1291828/ 发出请求,那么返回的结果和你在浏览器里发请求得到的结果会不一样。你通过请求得到的结果里没有电影的信息,而且通过302跳转到了 https://m.douban.com/movie/subject/1291828/ ,看上去像是手机端的浏览地址。
为了避免这个情况,你只需要在请求的header里将referer设置成 https://movie.douban.com/top250?start=25&filter= 就可以了,证明,你是从这个页面出发的。
其实,这种反爬机制,只能阻挡一些初级玩家,豆瓣如果真的不想让我们爬取,以他们的技术能力,是完全可以做到的。
所以,对于那些友好的网站,你在爬取时也仁义一点,别疯了一样发请求,搞得跟ddos攻击一样。
3、refer
据说,在起草http协议时一时疏忽,使用referer这个单词,事后发现,使用refer(认为…起源于)更准确,但发现时,http协议已经广为流传,为了避免麻烦,referer这个单词就一直沿用至今。