3

Picasa api 允许跨域 GET 请求。但是当我尝试发布图片/评论时,出现以下错误。

XMLHttpRequest 无法加载https://picasaweb.google.com/data/feed/api/user/default/albumid/5825390619150171601?access_token=ya29.AHES6ZSR2XSlImdSJxNBVczzfz4DPoW3vRvywTNg8ELNs6OStqSBbTM。Access-Control-Allow-Origin 不允许来源“ http://localhost ”。

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);
           }
       });

ps:这是一个类似的stackoverflow讨论的链接。

4

1 回答 1

3

糟糕的是,以前没有人回答过这个问题。有几件事很高兴知道在哪里......

Access-Control-Allow-Origin 标头必须包含在服务器响应中并设置为您的域名或 *

当您通过 Access-Control-Allow-Origin 从 Picasa 获取公开相册时,标头设置为 *

但是,当您访问需要身份验证的功能时,例如标题 Access-Control-Allow-Origin 上方的功能会返回为 *.google.com

我的理论是防止人们建立一个使用谷歌免费存储后端但实际上是 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);
       }
   });
于 2013-12-25T11:55:16.710 回答