2013-01-04 128 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