簡體   English   中英

Access-Control-Allow-Origin不允許使用的URL

[英]URL not allowed by Access-Control-Allow-Origin

我正在嘗試實現OAUTH以訪問Flickr API。 我對flickr.com的AJAX調用一直沒能。

示例錯誤消息:

XMLHttpRequest cannot load http://www.flickr.com/services/oauth        /request_token?oauth_callback=oob&oauth…signature_method=HMAC-SHA1&oauth_timestamp=1368375405647&oauth_version=1.0. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. 

最初我使用chrome並將html文件作為file:// path讀取。 我曾經得到錯誤'null-access-control-allow-origin不允許'。 我通過將html文件復制到“本地IIS服務器”,“本地python web服務器”,然后是“遠程網絡服務器”來解決了這個問題。 我使用> python -m http.server 8080'創建了python web服務器

我意識到我使用XMLHttpRequest對flickr.com的跨瀏覽器調用失敗了。 我試過這個論壇中建議的各種解決方案:

  1. 使用較新的Chrome 26.0.1410.64 m,我猜這支持CORS
  2. 我用--disable-web-security啟動了chrome
  3. 我在本地計算機上使用python -m http.server 8080創建了一個Web服務器,然后在遠程計算機上將html文件復制到站點
  4. 我將文件復制到本地MSFT IIS服務器
  5. 我在etc / hosts文件中定義了URL以避免數字IP

我仍然得到相同的錯誤(錯誤消息中的相關URL)

代碼剪輯:

urlString="http://www.flickr.com/services/oauth/request_token?"+
        "oauth_callback="+"oob"+'&'+
        "oauth_consumer_key="+consumerKey+'&'+
        "oauth_nonce="+nonce+'&'+
        "oauth_signature="+esignature+'&'+
    "oauth_signature_method="+macAlgorithm+'&'+
        "oauth_timestamp="+timeStamp+'&'+
        "oauth_version=1.0";


$.ajax({
   url: urlString,
   success:function(data){
    alert(data);
  }
});

為了CORS工作, 兩端都必須啟用它。

第一個結束是瀏覽器 ,並且,當您使用Chrome 26. *時,您的瀏覽器就可以了。

第二端是服務器

在向不同於該頁面的域的域發出GET請求之前,瀏覽器向該域發送OPTIONS請求。 為響應此請求,服務器應包含一些標頭 ,用於指示是否允許跨域請求( GETPOST或其他)。

其中一個標題是Access-Control-Allow-Origin

因此,當您從文件系統( file:// “協議”)運行頁面時, OPTIONS意味着類似“Flickr,我可以對您進行跨域調用嗎?我從null調用” Flickr無法將該域識別為允許並返回您獲得的錯誤。

同樣,當您從本地服務器運行頁面時, OPTIONS“(...)我正在從localhost:8080調用” Flickr也不會將該域識別為允許。

解決方案:

我不知道Flickr oauth服務,但我知道,與任何其他服務一樣,要對其進行CORS調用,該頁面必須位於其允許的域中。 從你的測試來看,我猜測Flickr不允許其他許多域名。

但是...... CORS的另一種選擇是JSONP。 我做了一點研究,Flickr oauth似乎支持它。

查看此頁面了解詳細信息: http//www.flickr.com/services/api/explore/flickr.auth.oauth.getAccessToken還有另一個問題在討論該特定主題: 新的Flickr OAuth API是否支持JSONP?

關於JSONP,這可以幫助您入門: 如何在沒有JQuery的情況下從Javascript發出JSONP請求?

沒有任何服務器端腳本,只能通過javascript實現Oauth 1.0。 由於flickr的新身份驗證過程基於Oauth 1.0a。 你必須使用服務器端腳本。

我嘗試使用帶有CORS的FireFox中的JSONP發送令牌請求(使用第三方附加組件)並且它工作正常。 但是沒有使用任何附加組件,因為flickr的響應是文本格式(不是JSON格式)並且請求失敗,所以不可能。

您可以使用服務器端代碼進行令牌請求。 或使用已棄用的flickr API進行身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM