![](/img/trans.png)
[英]Origin url is not allowed by Access-Control-Allow-Origin
[英]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的跨瀏覽器調用失敗了。 我試過這個論壇中建議的各種解決方案:
我仍然得到相同的錯誤(錯誤消息中的相關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
請求。 為響應此請求,服務器應包含一些標頭 ,用於指示是否允許跨域請求( GET
, POST
或其他)。
其中一個標題是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.