XMLHttpRequest 安全性問題

研究 XMLHttpRequest 時,改了半天還是弄不起來,老是出現 “Error: uncaught exception: Permission denied to call method XMLHttpRequest.open“,用 找半天看不出什麼原因,只看出跟安全性問題有關,但是也沒有說要怎麼解決。

想了一陣子才想到我這邊使用 XMLHttpRequest.open() 時是去 API (www.flickr.com) 抓,而不是同一個 site 下面的 url,把 url 改回同個 site 下面就馬上 okay 了。

於是我就試看看:用 Redirect 把某個目錄的 URL 導到 Flickr API,結果發現 XMLHttpRequest 居然抓到 Redirect 的頁面而不是 Flickr API…

這樣就很奇怪了:那我之前看到的 是怎麼做到的?突然想到 似乎是用 (參考 LfVr – a Lightweight flickr Viewer 的說明),於是跑去抓 0.5 下來看,發現…

/*
* flickr.proxy.php,
* this is an interface between the Flickr API wrapper
* and the REST methods from flickr.com

原來大家的做法都一樣,都是寫一個 flickr.proxy.php 之類的東西過一次水,然後再透過 cache 加速… *boom*

2 thoughts on “XMLHttpRequest 安全性問題”

  1. 您的觀察沒錯, 的確是瀏覽器的安全性問題, httpRequest 不能連去不同 domain 抓資料.

    LfVr 需要用 FlickrJS 的 proxy, 不過這樣也好, 可以把 cache 實作進去, 因為 Flickr API 有時候回應還真的挺慢的.

  2. 由于安全原因,XMLHttpRequest不能cross domain,我找到了解决方案:方法一,用Apache mod_rewrite把other domian的RSS重写成本地的,这需要配置服务器,比较麻烦,不通用。方法二,用ASP、.Net、PHP、JSP、Perl写一个Proxy脚本。

Comments are closed.