请求资源没有Access-Control-Allow-Origin头
时间: 2023-11-28 20:45:46 浏览: 209
跨域请求时,如果请求资源没有设置Access-Control-Allow-Origin头,就会出现No ‘Access-Control-Allow-Origin’ header is present on the requested resource错误。解决思路如下:
1. 在服务端设置Access-Control-Allow-Origin头,允许指定的域名进行跨域请求。
2. 使用JSONP跨域请求,JSONP是一种跨域请求的解决方案,通过动态创建script标签,将请求结果作为回调函数的参数返回。
在使用zuul网关解决跨域问题时,可以在网关中设置response的Access-Control-Allow-Origin为客户端orgin,然后服务网关访问微服务将response中的Access-Control-Allow-Origin:http://localhost:8080带了过去,微服务为了解决跨域,又在Access-Control-Allow-Origin中加了客户端orgin,Access-Control-Allow-Origin:http://localhost:8080,http://localhost:8080。
相关问题
请求资源没有Access-Control-Allow-Origin头解决方法
当请求资源没有Access-Control-Allow-Origin头时,可以通过Nginx配置跨域请求Access-Control-Allow-Origin * 来解决。具体方法如下:
1. 在Nginx配置文件中添加以下代码:
```nginx
location / {
add_header Access-Control-Allow-Origin *;
}
```
2. 重启Nginx服务使配置生效。
另外,还可以通过在后端代码中添加Access-Control-Allow-Origin头来解决该问题。具体方法如下:
1. 在后端代码中添加以下代码:
```python
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/')
def hello_world():
return 'Hello, World!'
```
2. 重启后端服务使配置生效。
不就应该是只给预检请求加个Access-Control-Allow-Origin的请求头就可以实现跨域了吗,为何给所有请求加Access-Control-Allow-Origin的请求头
不仅仅是给预检请求加上Access-Control-Allow-Origin的请求头,而是需要给所有请求加上该请求头。这是因为跨域请求涉及到浏览器的同源策略,同源策略要求浏览器只能发送同源(协议、域名、端口号相同)的请求,否则会被浏览器拦截。
当浏览器发起跨域请求时,会先发送一个预检请求(OPTIONS请求),用于询问服务器是否允许实际请求的跨域访问。服务器需要在预检请求的响应中加上Access-Control-Allow-Origin的请求头,并指定允许跨域访问的域名。
而对于实际请求,服务器也需要在响应中加上Access-Control-Allow-Origin的请求头,以告知浏览器该请求是被允许的跨域请求。这样浏览器才会接收到响应并将其返回给前端。
因此,为了实现跨域请求,需要给所有请求加上Access-Control-Allow-Origin的请求头,以满足浏览器的同源策略要求。
阅读全文