发送 jQuery Post 到 Google API 时出现 Access-Control-Allow-Origin 错误。

13 浏览
0 Comments

发送 jQuery Post 到 Google API 时出现 Access-Control-Allow-Origin 错误。

我为“Access-Control-Allow-Origin”错误阅读了很多内容,但我不明白我需要修复什么。\n我正在使用Google Moderator API进行尝试,但当我尝试添加新系列时,我收到以下错误:\n

XMLHttpRequest无法加载
https://www.googleapis.com/moderator/v1/series?key=[key]
&data%5Bdescription%5D=Share+and+rank+tips+for+eating+healthily+on+the+cheaps!
&data%5Bname%5D=Eating+Healthy+%26+Cheap
&data%5BvideoSubmissionAllowed%5D=false。
来源 [my_domain] 不被Access-Control-Allow-Origin允许。

\n我尝试过带有回调参数和不带回调参数,我尝试将“Access-Control-Allow-Origin *”添加到头部。如果适用的话,我不知道如何在这里使用$.getJSON,因为我必须添加授权头部,而且我不知道如何在没有$.ajax的beforeSend之前做到这一点:/ \n有什么办法解决这个问题吗?\n这是代码:\n



...
...
    
    
    

0
0 Comments

如果在尝试使用不能在应用程序中添加Access-Control-Allow-Origin *头的服务时出现此错误,但是您可以在服务器前面放置一个反向代理,可以使用头重写来避免该错误。

假设应用程序在端口8080上运行(公共域名为www.mydomain.com),并且您将反向代理放在同一主机的端口80上,这是用于Nginx反向代理的配置:

server {

listen 80;

server_name www.mydomain.com;

access_log /var/log/nginx/www.mydomain.com.access.log;

error_log /var/log/nginx/www.mydomain.com.error.log;

location / {

proxy_pass http://127.0.0.1:8080;

add_header Access-Control-Allow-Origin *;

}

}

如上所述,使用'*'非常不安全。

是的,但这取决于您要公开什么。如果您正在发布一个没有授权的公共API,这就是方法(我的情况)。如果不是,您应该使用类似于这样的内容:Access-Control-Allow-Origin: http://example.com

当我通过postman和ajax测试一个API时,但postman请求是成功的,但ajax返回false。

postman和其他应用程序不会触发内置在浏览器中的CORS保护机制。

0
0 Comments

在使用jQuery Post发送请求到Google API时出现了Access-Control-Allow-Origin的错误。造成这个问题的原因是因为在处理ajax请求的php文件中没有添加Access-Control-Allow-Origin的header。为了解决这个问题,只需要在php文件中添加以下代码即可:

<?php header('Access-Control-Allow-Origin: *'); ?>

这样就可以解决这个问题了。不过需要注意的是,这种方法可能存在安全风险。如果有人成功注入javascript代码到你的页面中,他们就可以轻松地向任何用户提供的信息发送请求。但是,"Unsafe"这个说法是相对的,取决于使用的目的和设置Access-Control-Allow-Origin header的其他安全措施。

0
0 Comments

问题出现的原因:

在向Google API发送jQuery Post请求时,出现了Access-Control-Allow-Origin错误。这是由于浏览器的同源策略所导致的。同源策略要求两个网址的协议、域名和端口都相同,否则就会出现跨域请求的错误。

解决方法:

为了解决这个问题,可以对dataType参数进行修改,将其设置为'dataType: 'jsonp''。同时,还需要添加'crossDomain: true'参数。

代码示例:

$.ajax({
    url: 'https://www.googleapis.com/moderator/v1/series?key='+key,
    data: myData,
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    success: function() { alert("Success"); },
    error: function() { alert('Failed!'); },
    beforeSend: setHeader
});

其中,'crossDomain'参数不是必需的。根据我的理解,只有在在自己的域名上进行请求时,才需要将其设置为true,让jQuery将其视为跨域请求。

此外,有人提出了一个问题,即如何解决想要进行POST请求的情况。对此,有人回答说jsonp不支持POST请求。

还有人问到,如果返回的是XML响应而不是JSON怎么办?对此,没有给出具体的解决方案。

有人说他只是添加了'dataType: 'jsonp''参数就解决了问题。

但也有人指出,切换到jsonp并不能解决所有问题。无法使用这种方式进行POST请求,并且它不会通过XHR进行发送。

也有人表示,切换到jsonp就解决了所有问题。但他仍然需要解决XML文件抛出的"Unexpected token <"错误。

还有人说,这种方法已经不再起作用,非常令人沮丧。仍然返回"Cross-Origin Read Blocking (CORB) blocked cross-origin response"错误。

但你已经将请求方式从POST改为GET了。

0