当前位置: 首页 > 知识库问答 >
问题:

请求的资源上不存在Access-Control-Allo-Origin标头

穆正祥
2023-03-14

我想访问来自同一个域但不同端口号的信息,为此我在响应头中添加了< code > Access-Control-Allow-Origin 。

Servlet Code:(现载于www.example.com:PORT_NUMBER)

String json = new Gson().toJson(list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.setHeader("Access-Control-Allow-Origin", "*");//cross domain request/CORS
response.getWriter().write(json);

jQuery code:(存在于 www.example.com)

$.post('http://www.example.com:PORT_NUMBER/MYSERVLET',{MyParam: 'value'}).done(function(data)
{
    alert(data);
});

有几次我收到此错误(在控制台中):

XMLHttpRequest cannot load 'http://www.example.com:PORT_NUMBER/MYSERVLET'
No 'Access-Control-Allow-Origin' header is present on the requested resource.

此错误主要发生在第一次执行 $.post 时。第二次允许。

我的问题是servletjQuery代码中是否缺少?

如有任何建议,我们将不胜感激。

更新1

我变了:

response.setHeader("Access-Control-Allow-Origin", "*");

致:

response.setHeader("Access-Control-Allow-Origin", "http://www.example.com");

然后我在控制台中收到这个错误:

XMLHttpRequest cannot load http://www.example.com:PORT_NUMBER/MyServletName
The 'Access-Control-Allow-Origin' whitelists only 'http://www.example.com'
Origin 'http://www.example.com' is not in the list,
and is therefore not allowed access.

[注意:白名单和来源相同,但仍然会出错。它有时有效,有时给出上述错误。

如果你需要更多信息,请告诉我。

共有3个答案

楚皓君
2023-03-14

我在Spring找到了解决办法。io,像这样:

    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
鄢雅畅
2023-03-14

您在$. post()方法中缺少'json'dataType:

$.post('http://www.example.com:PORT_NUMBER/MYSERVLET',{MyParam: 'value'})
        .done(function(data){
                  alert(data);
         }, "json");
         //-^^^^^^-------here

更新:

试试这个:

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
伯彦君
2023-03-14

解决方案:
我没有使用setHeader方法,而是使用了addHeader

response.addHeader("Access-Control-Allow-Origin", "*");

上面一行中的< code>*将允许访问所有域,仅允许访问特定域:

response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");

对于与 IE 相关的问题

 类似资料:
  • 但是我遇到以下错误 XMLHttpRequest无法加载http://www.google.com/.请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源' null'。

  • 我需要发送数据通过从JavaScript到Python服务器。因为我在使用localhost,所以我需要使用CORS。我正在使用Flask框架及其模块。 作为JavaScript,我有以下几点: 和Python代码: 但是当我执行它时,我会得到这样的信息: XMLHttpRequest无法加载localhost:5000/signin.请求的资源上不存在访问控制允许起源标头。因此,不允许访问源'n

  • 我在区域中有一个S3 bucket,我们称之为。 在那个桶中有一个图片,我们称之为。 如果我通过浏览器访问这两个URL,我就可以检索那个图片(桶中的所有对象都是公共的)(请记住,这些是示例,而不是现实生活中的URL): https://my-bucket.s3.amazonaws.com/some-file.jpg https://s3-eu-west-1.amazonaws.com/my-buc

  • 我打关键斗篷apihttp://localhost:8080/auth/realms/**/协议/openid-connect/令牌与正确的凭据,它的工作正常,但与错误的凭据 当我添加跨域允许时,它会给我印前检查错误 任何人都可以帮我:)PS:使用CORS插件一切正常

  • 问题内容: 我是django的新手,并将其用作创建用户的应用程序的后端。在前端发布用户名的代码是: 在后端,与url相关的功能处理json,但我收到错误消息“请求的资源上没有’Access-Control-Allow-Origin’标头。 问题答案: 你的前端和后端位于不同的端口上,这意味着你的ajax请求受跨源安全性的约束。 你需要设置后端以接受来自不同来源(或只是不同端口号)的请求。

  • 问题内容: 我有一个在服务器上运行的API,并且有一个与之连接的前端客户端来检索数据。我对跨域问题进行了一些研究,并使其起作用。但是我不确定发生了什么变化。我现在在控制台中收到此错误: XMLHttpRequest无法加载https://api.mydomain/api/status。所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问源“ http