这个错误通常是由于跨域资源共享(CORS)策略导致的。浏览器出于安全考虑,会限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。当你的JavaScript代码尝试从一个不同的源(域、协议或端口)访问资源时,如果服务器没有正确设置CORS头部,就会出现这个错误。
Postman不会执行浏览器的同源策略,因为它不是一个浏览器环境。它直接与服务器通信,所以不会遇到CORS限制。
要解决这个问题,你需要在服务器端设置正确的CORS头部。以下是一些常见的服务器端设置方法:
如果你使用的是Node.js和Express,可以安装cors
中间件:
npm install cors
然后在你的Express应用中使用它:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
app.get('/data', (req, res) => {
res.json({ message: 'Hello from server!' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
如果你使用的是Apache服务器,可以在.htaccess
文件或配置文件中添加以下内容:
Header set Access-Control-Allow-Origin "*"
如果你使用的是Nginx,可以在配置文件中添加以下内容:
server {
listen 80;
server_name example.com;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization';
# 其他配置...
}
}
通过以上设置,你的服务器将能够正确响应CORS请求,浏览器就不会再抛出“No 'Access-Control-Allow-Origin' header is present on the requested resource”错误了。