json CORS标题“访问控制-允许-来源”缺失

pvabu6sv  于 2023-02-26  发布在  其他
关注(0)|答案(8)|浏览(160)

我从我的www.example.com表单调用这个函数,在调用ajax时在firebug控制台上得到以下错误。asp.net form and getting following error on firebug console while calling ajax.
跨来源请求被阻止:同源策略不允许读取位于http://anotherdomain/test.json的远程资源。(原因:CORS标题"访问控制-允许-来源"缺失)。

var url= 'http://anotherdomain/test.json';
        $.ajax({
            url: url,
            crossOrigin: true,
            type: 'GET',
            xhrFields: { withCredentials: true },
            accept: 'application/json'
        }).done(function (data) {
            alert(data);                
        }).fail(function (xhr, textStatus, error) {
            var title, message;
            switch (xhr.status) {
                case 403:
                    title = xhr.responseJSON.errorSummary;
                    message = 'Please login to your server before running the test.';
                    break;
                default:
                    title = 'Invalid URL or Cross-Origin Request Blocked';
                    message = 'You must explictly add this site (' + window.location.origin + ') to the list of allowed websites in your server.';
                    break;
            }
        });

我换了一种方法,但还是找不到解决办法。
注意:我没有服务器权限来进行服务器端(API/URL)更改。

1tuwyuhd

1tuwyuhd1#

当您尝试访问其他域的资源时,通常会发生这种情况。
这是一个安全功能,用于避免每个人自由访问该域的任何资源(例如,可以访问您的网站在盗版域上的完全相同的副本)。
响应的头,即使它是200OK也不允许其他源(域、端口)访问资源。
如果您是两个域的所有者,则可以解决此问题:

溶液1:通过.htaccess

要改变这一点,您可以将其写入requested domain文件的.htaccess中:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    </IfModule>

如果您只想授予对一个域的访问权限,.htaccess应如下所示:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin 'https://my-domain.example'
    </IfModule>

溶液2:以正确的方式设置标题

如果您在请求文件的响应标头中设置此属性,您将允许所有人访问资源:

Access-Control-Allow-Origin : *

Access-Control-Allow-Origin : http://www.my-domain.example
x4shl7ld

x4shl7ld2#

服务器端将其放在<filename>.php之上:

header('Access-Control-Allow-Origin: *');

您可以设置特定的域访问限制:

header('Access-Control-Allow-Origin: https://www.example.com');
li9yvcax

li9yvcax3#

在你 AJAX 请求中,添加:

dataType: "jsonp",

行后:

type: 'GET',

应该能解决这个问题。
希望这对你有帮助

plupiseo

plupiseo4#

如果你在后端使用Express js,你可以安装包cors,然后在你的服务器上使用它,如下所示:

const cors = require("cors");
app.use(cors());

这解决了我的问题

fd3cxomn

fd3cxomn5#

这对我很有效:
创建php文件,将下载另一个域页面的内容,而不使用js:

<?
//file name: your_php_page.php
echo file_get_contents('http://anotherdomain/test.json');
?>

然后在ajax(jquery)中运行它。

$.ajax({
  url: your_php_page.php,
  //optional data might be usefull
  //type: 'GET',
  //dataType: "jsonp", 
  //dataType: 'xml',
  context: document.body
}).done(function(data) {

  alert("data");
  
});
fhg3lkii

fhg3lkii6#

您必须修改服务器端代码,如下所示

public class CorsResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext,   ContainerResponseContext responseContext)
    throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin","*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");

  }
}
ftf50wuq

ftf50wuq7#

你一定已经知道为什么你会得到这个问题后,通过以上的答案。

self.send_header('Access-Control-Allow-Origin', '*')

您只需要在服务器端添加上面的代码行。

olqngx59

olqngx598#

必要时,您可以使用此Chrome扩展在本地浏览器上禁用CORS。
允许CORS:访问控制-允许-原点Chrome扩展

相关问题