2013-01-04 129 views
2

Picasa API允許跨域GET請求。但是當我嘗試發佈圖片/評論時,出現以下錯誤。Picasa api是否允許CORS Post?

XMLHttpRequest無法加載https://picasaweb.google.com/data/feed/api/user/default/albumid/5825390619150171601?access_token=ya29.AHES6ZSR2XSlImdSJxNBVczzfz4DPoW3vRvywTNg8ELNs6OStqSBbTM。來源'http://localhost'是Access-Control-Allow-Origin不允許的。

var url = 'https://picasaweb.google.com/data/feed/api/user/default/albumid/' + albumId + '?access_token=' + myToken; 

    $.ajax({ 
      url: url, 
      data: f /*image file object*/, 
      contentType: f.type, 
      processData: false, 
      type: "POST", 
      success:function(data){ 
      successCallback(data); 
      }, 
      error:function(data){ 
      failureCallback(data); 
      } 
     }); 

P.S:這裏是a link一個類似計算器的討論。

回答

2

以前沒有人回答過這個問題。有一些事情是好知道在哪裏...

訪問控制允許來源標題必須包括在服務器響應,並設置爲您的域名或*

當你Picasa通過Access-Control-Allow-Origin標頭設置的公開相冊設置爲*

但是,當您訪問要求如上所述的身份驗證的功能時,Access-Control-Allow-Origin會以* .google的形式返回。 com

我的理論是阻止人們建立一個使用Google免費存儲後端的Picasa網站,但實際上是它自己的Picasa網站的競爭對手。

最後還有一個重要的注意事項是,您永遠不應該發送安全令牌作爲查詢字符串!即使您使用https/ssl url,它自身也沒有加密,有人可以嗅探網絡流量並竊取安全令牌。我甚至不確定Picasa是否會接受它。你應該這樣做:

var url = 'https://picasaweb.google.com/data/feed/api/user/default/albumid/' + albumId; 
$.ajax({ 
     url: url, 
     data: f /*image file object*/, 
     contentType: f.type, 
     processData: false, 
     type: "POST", 
     beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "Bearer " + myToken); 
     }, 
     success:function(data){ 
     successCallback(data); 
     }, 
     error:function(data){ 
     failureCallback(data); 
     } 
    }); 
+1

實際上URL是通過TLS加密的。主機(例如'picasaweb.google.com')在DNS查找和SNI協商期間可用,但[URL已加密](http://stackoverflow.com/questions/499591/are-https-urls-encrypted)。 – abraham