首页 >web前端 >js教程 >如何解决'XMLHttpRequest 无法加载。对预检请求的响应未通过访问控制检查”错误?

如何解决'XMLHttpRequest 无法加载。对预检请求的响应未通过访问控制检查”错误?

Linda Hamilton
Linda Hamilton原创
2024-12-05 14:29:09313浏览

How to Solve

访问控制被拒绝:Web 开发中的 CORS 故障排除

问题:

使用 ngResource 访问 REST API 时Amazon Web Services,您遇到以下情况错误:

XMLHttpRequest cannot load <url>. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '<origin>' is therefore not allowed access.

原因:

此问题源于跨源资源共享 (CORS) 限制,该限制会阻止一个域上的 Web 应用程序发出请求没有明确的其他域

解决方案:

解决 CORS 问题的方法有多种:

1.禁用 CORS:

  • 在 Chrome 中,访问 chrome://flags/#disable-web-security
  • 将“禁用网络安全”设置为“启用”
  • 注意:此解决方案只能用于开发目的。

2.浏览器插件:

  • 安装禁用 CORS 检查的浏览器插件,例如 CORS Unblock。

3.代理服务器:

  • 使用代理服务器,例如Nginx,处理跨域请求。这使浏览器相信请求来自本地主机。

4。服务器配置:

  • 配置您的服务器以将 Access-Control-Allow-Origin 标头添加到响应中。请参阅启用 CORS 网站,了解基于您的服务器的具体说明。

5.带有 Promise 的 HTTP 示例:

const makeRequest = (url, options) => {
  return new Promise((resolve, reject) => {
    const request = new XMLHttpRequest();
    request.open(options.method, url);
    request.setRequestHeader('Accept', 'application/json');

    request.onload = () => {
      if (request.status >= 200 && request.status < 300) {
        resolve(request.response);
      } else {
        reject({
          status: request.status,
          statusText: request.statusText
        });
      }
    };

    request.onerror = () => {
      reject({
        status: request.status,
        statusText: request.statusText
      });
    };

    request.send(options.body);
  });
};

以上是如何解决'XMLHttpRequest 无法加载。对预检请求的响应未通过访问控制检查”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn