跨域抓取博客园RSS

这两天在给博客作新的主题,一直在纠结是否要将博客园的博文迁到本身的博客下,这样作的惟一好处就是,你们能够直接在一个网站下进行life博文和tech博文的阅读javascript

BUT,谈到技术博客的话,大部分的我的博客下面的技术博文的阅读量和博客论坛的阅读量数量级别相差太大了,因此在犹豫了一段时间后仍是果断选择回了待在博客园,可是若是我想给我的网站加一个博客园技术文章的列表呢?即只是加一个博客园的入口而已前端

方案


咱们能够分前端和后台两种思路来实现这个列表展现:java

  1. 后台
    • 定时任务抓取博客园RSS,保存在数据库中,每次访问时查取(缺点:实时性差
    • 在每次访问时,实时抓取博客园列表RSS(缺点:延时太大 / 因为服务器部署在海外,从海外访问国内网站仍是有至关大的延时的
  2. 前端
    • 每次访问时用Js去抓取博客园的RSS,并显示出来(缺点:并不能直接实现 / 这个作牵扯到跨域问题

实际与问题


对于后台来讲,实现比较简单,可是性能并不能获得保障数据库

能够看出来,最优的方法是使用前端来直接处理是最满意的,BUT AGAIN,它是不能实现的!!并无什么用!!浏览器严格禁止跨域 《同源策略和跨域访问》http://blog.csdn.net/shimiso/article/details/21830313json

从文中获得跨域

虽然咱们能够经过 标签来做跨域请求,可是javascript并不能去获取跨域获得的数据浏览器

JSONP

咱们可使用JSONP去实现,可是RSS源大部分不会去这样作的服务器

因而在我寻找最好的解决方法的时候,找到了 Google Feed Api https://developers.google.com/feed/?csw=1 ,这是一个专门拉取RSS的API,还好咱们在城墙的保护下,让这种资本主义开发的烂API不能进入我国内陆。cors

性能

CORS

也能够用CORS来去作,可是这等于抛弃了IE9及如下的用户 (洒脱的人可使用)

对于 CORS 的使用,要在服务器上配置

Access-Control-Allow-Origin: example.com
Access-Control-Request-Method: GET, POST
Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Range, Origin
Access-Control-Expose-Headers: Content-Range
Access-Control-Max-Age: 3600

对于上面的配置,都要要求咱们经过服务器设置于Response Header中的,最主要的设置则是第一条设置,也能够仅加设该一条配置,当设置成*时,则表示该网页能够向全部域名发起跨域请求,这样设置则会比较危险。在页面上咱们则可使用建立XMLHttpRequest来请求容许范围内的数据。

IE8与IE9默认是不打开容许跨域的选项的,得手动去Internet选项中打开才可使用该功能。

咱们能够根据本身的应用场景来选择更适合本身的方法,而最为稳定的方法则是经过服务器去处理,可是并不能保证性能。

此乃,掌鱼之弈

PS:博客园对Markdown的解析真是渣啊

Finish.