跨域抓取博客園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.

相關文章
相關標籤/搜索