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

浏览器中不允许跨源调用

贺运良
2023-03-14
     List<String> originList = Arrays.asList(origins.trim().split("( )*,( )*"));
    String origin = request.getHeader("Origin");
    if (originList.contains(origin)) {
        originAllow = origin;
    } else {
        originAllow = originList.get(0);
    }
     response.setHeader("Access-Control-Allow-Origin", originAllow);
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Methods", "PUT, POST, GET, OPTIONS, DELETE, PATCH");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with, accept, authorization");
    response.setHeader("Access-Control-Expose-Headers", "Location");

在originAllow中,我正在传递我试图访问的url,但我得到以下错误,

     XMLHttpRequest cannot load http://<<url>>. Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response.

请查找浏览器请求和响应头,响应头

Access-Control-Allow-Headers:x-requested-with, content-type
    Access-Control-Allow-Methods:GET OPTIONS
    Access-Control-Allow-Origin:*
    Access-Control-Max-Age:3600
    Allow:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
    Connection:close
    Content-Length:0
    Content-Type:text/plain; charset=UTF-8
    Server:Apache-Coyote/1.1
    X-Application-Context::8080
    
    Request Header
    Accept:/
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ms;q=0.6
Access-Control-Request-Headers:authorization, x-requested-with
Access-Control-Request-Method:GET
Connection:keep-alive
Host:myrestapi-dev
Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36

选项<>?page=0&search_param=test&size=10,desc HTTP/1.1 主机:myrestapi-dev 连接:keep-alive access-control-request-method: 来源:http://localhost:9000 用户代理:Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,像Gecko一样)Chrome/52.0.2743.116 Safari/537.36 access-control-request-headers:授权,x-requested-with 接受:/ 引用人:http://localhost:9000/ 接受编码:gzip,deflate,sdch 接受语言:en-US,en;q=0.8,ms;q=0.6

请让我知道有什么我需要添加的访问url从ui(角度)的授权,而且它是工作在其他浏览器,但不是在chrome

共有1个答案

文心思
2023-03-14

这是因为您的服务器不允许授权头。要解决这个问题:

response.setHeader("Access-Control-Allow-Headers", "Content-Type, authorization");

应该能帮到你。由于我不确定您的后端,我需要解释更多一点。这是因为由服务器指定它接受跨源请求(并且它允许content-type请求头)。此外,您需要从同一域进行AJAX调用或进行服务器端更改,以允许来自外部域的请求。为了解决这一问题,您需要在http://yourdomain.com上通过允许外部域在头中进行更改:

Access-Control-Allow-Origin: *

1-ref1

AngularJS$HTTP服务有一个名为“jsonp”的内置方法。

var url = "some REST API Url" + "?callback=JSON_CALLBACK";

$http.jsonp(url)
    .success(function(data){
       // whatever 
    });

此外,url必须附加?callback=json_callback。

我将使用JSONP扩展这个解决方案

exampleurl = 'http://wikidata.org/w/api.php?whatever....&format=json'

 //Number 1 : 
 $.ajax({
  dataType: "jsonp",
  url: exampleurl ,
  }).done(function ( data ) {
  // do whatever
});
//Number 2 : 
$.ajax({
  dataType: "json",
  url: exampleurl + '&callback=?',
  }).done(function ( data ) {
  // do whatever
});
//Number 3 : 
$.getJSON( exampleurl + '&callback=?', function(data) {
  // do whatever
});
 类似资料:
  • 问题内容: 哪些浏览器允许跨域ajax调用?我正在设置REST服务,并尝试确定是否需要支持JSONP以允许跨域javascript访问,或者是否足以设置Access-Control-Allow- Origin标头。 问题答案: 这是一个参考,建议在现代浏览器中的支持是合理的(但请参阅此答案末尾的注释),假设客户端代码有意处理IE问题。(IE8和IE9支持CORS,但不支持CORS,而 您必须使用C

  • 问题内容: 为了澄清当我询问浏览器到浏览器的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的功能。如果无法在websockets中使用p2p,是否有类似的选择?任何帮助表示赞赏。 问题答案: 否。浏览器只能启动WebSockets连接,不能接收它们。在W3C的浏览器API规范只定义了如何启动出站连接。 您可以创建一个既可以启动也可以接受WebSockets连接的应用程序,但是浏览器

  • 问题内容: 专业的网页设计师如何创建跨浏览器的CSS?通常是手动完成,还是像YUI针对JavaScript那样可以简化流程的工具包?我希望远离Dreamweaver之类的所见即所得编辑器。谢谢! 问题答案: 通常是手工完成的。 通常从对比赛场地应用CSS重置开始。 而且,您应该针对符合标准的CSS,然后作为对IE的最后手段,才可以使用hacks(是的,我刚刚说过)。

  • 问题内容: 除了JSONP,为什么要遵循相同的域策略? 问题答案: 出于安全原因,已实施“同源起源策略”;引用维基百科的相关句子: 这种机制对现代Web应用程序具有特殊的意义,因为Web服务器广泛依赖于HTTP cookie来维护经过身份验证的用户会话,因为服务器基于HTTP cookie信息进行操作以揭示敏感信息或执行状态更改操作。 必须在客户端维护不相关站点提供的内容之间的严格分隔,以防止丢失

  • 什么能解释这一点呢?在这种情况下,Edge可能更好,因为我不确定它是否能在Safari中工作。 密码链接!

  • 问题内容: 我正在从Firefox 3.5开始为新服务开发Web应用程序。 界面设计是无表的,仅使用divs + CSS和性能良好的做法。 现在,尽管与Safari兼容仅花费了很少的时间,但IE还是很痛苦。 我的问题是:有什么可以用来加速跨浏览器检查的吗?例如,我已经知道FF和IE之间的许多区别,但是使用特定工具可能会有所帮助。 你能建议一个吗? 谢谢, 猩红 问题答案: 跨浏览器开发 没有工具可