Access to XMLHttpRequest at 'http://10.198.8.102:8081' from origin 'http://localhost:8080' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.哪里出错了
时间: 2023-08-28 14:13:16 浏览: 56
这个错误提示显示在浏览器的控制台中,说明在进行跨域请求时,浏览器发现服务器端返回的响应头部中包含了多个 "Access-Control-Allow-Origin" 头部,即 '*, *'。这种情况下,浏览器会拒绝这个响应,并报错。
出现这个错误通常是因为服务器端配置错误,导致在响应头部中重复设置了 "Access-Control-Allow-Origin" 头部,或者设置了一个不合法的值。要解决这个问题,需要检查服务器端的代码,找到设置响应头部的代码,保证每个响应只有一个 "Access-Control-Allow-Origin" 头部,并且该头部的值是一个合法的源站地址,而不是重复的或者不合法的值。可以考虑在服务器端使用一些跨域请求处理的框架或者库,比如CORS、Express等,这些框架或者库可以自动处理跨域请求的响应头部设置,避免出现这种错误。
相关问题
Access to XMLHttpRequest at 'http://10.198.8.102:8081' from origin 'http://localhost:8080' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.应该设置头部是8080还是8081
在这种情况下,应该将 "Access-Control-Allow-Origin" 头部设置为请求的来源地址,即 'http://localhost:8080'。这是因为浏览器会先发送一个预检请求(OPTIONS请求),来询问服务器端是否允许跨域请求。如果服务器端返回的响应头部中包含了 'Access-Control-Allow-Origin: *',则表示允许任意来源的请求,但是在实际应用中,这通常是不安全的。因此,更好的做法是在服务器端根据请求的来源动态设置 "Access-Control-Allow-Origin" 头部,避免出现安全问题。
在这个例子中,请求的来源是 'http://localhost:8080',因此应该将 "Access-Control-Allow-Origin" 头部设置为 'http://localhost:8080',而不是 'http://10.198.8.102:8081'。这样可以避免浏览器报错,并且保证跨域请求的安全性。
access to xmlhttprequest at 'https://jsonplaceholder.typicode.com/posts/' from origin 'http://localhost:8080' has been blocked by cors policy: no 'access-control-allow-origin' header is present on the requested resource.
### 回答1:
从源'http://localhost:808'访问'https://jsonplaceholder.typicode.com/posts/'的XMLHttpRequest已被CORS策略阻止:请求的资源上没有'access-control-allow-origin'头。
### 回答2:
CORS是Cross Origin Resource Sharing的缩写,指的是跨域资源共享。当一个请求跨域时,需要先向服务器发送一个Option请求,询问是否允许这个跨域请求。如果服务器允许,会返回一个带有Access-Control-Allow-Origin的响应头,告诉浏览器这个跨域请求是允许的。
在本例中,XMLHttpRequest向'https://jsonplaceholder.typicode.com/posts/'这个地址发送了一个跨域请求,但是出现了一个错误:no 'access-control-allow-origin' header is present on the requested resource。即服务器没有返回Access-Control-Allow-Origin这个响应头,因此浏览器认为这个跨域请求是不允许的。
这个问题的解决方法有两种:一种是在服务端添加相应的header,具体用什么语言和框架,添加的header的内容,需要根据实际情况进行调整。另一种方法是使用代理服务器,将所有的请求发送到代理服务器上,然后由代理服务器再转发请求并设置正确的header。这种方法多用于在开发时解决跨域问题,生产环境中并不常用。
总之,解决跨域问题需要理解CORS原理,并根据实际情况选择合适的解决方案。
### 回答3:
跨域资源共享(CORS)是Web浏览器使用的一项安全措施,限制浏览器对不同源的服务器资源的访问。同源策略是浏览器默认的安全策略:浏览器只能向同一源发送Ajax(XMLHttpRequest)请求,即协议、域名和端口号必须完全一致。如果发送的Ajax请求资源是不同源的,浏览器会默认阻止该请求,抛出CORS错误。
这里的错误信息“access to xmlhttprequest at 'https://jsonplaceholder.typicode.com/posts/' from origin 'http://localhost:8080' has been blocked by cors policy: no 'access-control-allow-origin' header is present on the requested resource.” 表示我们在浏览器中试图访问远程服务器(https://jsonplaceholder.typicode.com/posts/)的资源资源,但因为该资源缺少一个约定的头部“Access-Control-Allow-Origin”,浏览器阻止了该请求。
为了解决跨域问题,需要在服务器端添加或修改响应头部信息,从而允许跨域资源共享。常用的解决方案有以下几种:
1、服务器端添加“Access-Control-Allow-Origin”头部,设置为允许的域名或通配符“*”(表示允许所有域名访问),这样浏览器就会将请求成功转发回发起请求的服务器。
2、通过JSONP(JSON with Padding)协议实现跨域请求。JSONP是一种利用<script>标签的GET方式,动态生成<script>标签的src属性指向跨域的URL,JavaScript函数运行时获取JSONP返回数据的方式。
3、使用代理服务器。即在跨域请求发起时,将请求发送给代理服务器,代理服务器再将请求转发给目标服务器,收到响应后再返回给浏览器。
总之,解决跨域问题需要在服务器端进行具体的处理,根据不同的应用场景和技术选择适合的解决方案。
阅读全文