首页 > 其他分享 >解决“Access to XMLHttpRequest at ‘XXX’ from origin ‘http://localhost’ has been blocked by CORS policy”

解决“Access to XMLHttpRequest at ‘XXX’ from origin ‘http://localhost’ has been blocked by CORS policy”

时间:2024-08-23 18:50:50浏览次数:13  
标签:origin Web http 请求 XXX Access CORS 服务器 XMLHttpRequest

解决“Access to XMLHttpRequest at ‘http://127.0.0.1:3000/’ from origin ‘http://localhost:8080’ has been blocked by CORS policy”

在日常的Web开发中,跨源资源共享(CORS)错误是一个常见的问题,尤其是当你尝试从一个源(origin)向另一个源发送HTTP请求时。本文将深入探讨一个特定的CORS错误信息,并提供详细的解决思路和方法,特别是针对客户端(前端)Vue项目的跨域解决方案。

在这里插入图片描述

目录

一、常见报错问题

当你尝试从一个Web应用(例如,运行在http://localhost:8080的Vue项目)向另一个不同源的服务器(例如,http://127.0.0.1:3000)发送XMLHttpRequest(XHR)请求时,你可能会遇到以下错误:

Access to XMLHttpRequest at 'http://127.0.0.1:3000/' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这个错误表明,目标资源没有返回CORS策略所需的Access-Control-Allow-Origin响应头,因此浏览器阻止了跨源请求。

二、解决思路

要解决CORS错误,你可以从以下几个方面入手:

  1. 修改服务器设置:确保服务器配置了正确的CORS策略,允许来自你Web应用的源。
  2. 使用代理:在客户端和服务器之间设置一个代理,将所有请求转发到目标服务器,并添加必要的CORS头。
  3. JSONP:如果只需要GET请求,可以使用JSONP方法绕过CORS限制。
  4. 配置Web服务器:在Web服务器上配置CORS中间件或模块。
  5. 开发环境配置:在开发环境中,使用如webpack的devServer代理设置等工具来绕过CORS。

三、解决方法

接下来,详细解释每一种解决方法,特别是针对Vue项目的客户端解决方案:

  1. 修改服务器设置

    • 在你的服务器上添加Access-Control-Allow-Origin响应头。例如,在Node.js的Express框架中,你可以使用cors中间件:
      const express = require('express');
      const cors = require('cors');
      const app = express();
      
      app.use(cors({
        origin: 'http://localhost:8080'
      }));
      
      app.listen(3000, () => {
        console.log('Server is running on port 3000');
      });
      
  2. 使用代理(特别是针对Vue项目)

    • 在你的Vue项目中,你可以配置webpack的devServer代理来解决跨域问题。在vue.config.js文件中添加如下配置:
      module.exports = {
        devServer: {
          proxy: {
            '/api': {
              target: 'http://127.0.0.1:3000',
              changeOrigin: true,
              ws: true,
              pathRewrite: {
                '^/api': ''
              }
            }
          }
        }
      };
      
    • 这样配置后,所有以/api开头的请求都会被代理到http://127.0.0.1:3000,并且会添加适当的CORS头。
  3. JSONP

    • 使用JSONP方法,在HTML中添加一个<script>标签,其src属性指向目标URL。服务器需要返回一个JavaScript函数调用,其中包含JSON数据。
  4. 配置Web服务器

    • 在Web服务器上安装和配置CORS模块。例如,在Apache服务器上,你可以使用mod_headers模块来添加CORS头:
      Header set Access-Control-Allow-Origin "http://localhost:8080"
      
  5. 开发环境配置

    • 使用开发工具提供的CORS绕过功能。例如,在Chrome浏览器中,你可以使用CORS Unblock扩展来临时解决CORS问题。

四、常见场景分析

  1. 开发环境与生产环境不一致

    • 在开发环境中,你可能使用了不同的端口或域名,导致CORS问题。确保你的开发环境配置与生产环境一致,或适当配置CORS策略。
  2. 第三方API集成

    • 当你尝试集成第三方API时,可能会遇到CORS问题。确保你了解并遵守第三方API的CORS策略。
  3. 前后端分离

    • 在前后端分离的应用中,前端和后端可能部署在不同的源上。确保后端配置了正确的CORS策略,允许前端源的访问。
  4. 使用CDN

    • 当你的资源部署在CDN上时,你需要确保CDN配置了正确的CORS策略。
  5. 浏览器插件或扩展

    • 某些浏览器插件或扩展可能会修改HTTP请求或响应头,导致CORS问题。尝试禁用这些插件或扩展,看看问题是否解决。

五、扩展与高级技巧

  1. 使用Access-Control-Allow-Credentials

    • 当你需要发送包含凭据(如Cookies或HTTP认证信息)的请求时,你需要在服务器上设置Access-Control-Allow-Credentialstrue
  2. 预检请求(Preflight Request)

    • 了解并处理预检请求。当请求满足某些条件(如使用自定义头部、请求方法不是GET/HEAD/POST等)时,浏览器会自动发送一个OPTIONS请求作为预检。
  3. 动态CORS策略

    • 根据请求的不同,动态设置CORS策略。例如,基于请求的某些参数或头部来决定是否允许跨源请求。
  4. 使用HTTPS

    • 考虑使用HTTPS来增强安全性。当使用HTTPS时,浏览器对CORS策略的处理可能更加严格。
  5. 调试和日志记录

    • 在服务器上添加详细的日志记录,以帮助调试CORS问题。确保记录所有相关的请求和响应头。

六、总结与展望

CORS错误是Web开发中常见的问题,但通过适当的配置和策略,你可以有效地解决这些问题。了解CORS的工作原理和浏览器的安全策略是关键。对于Vue项目,使用webpack的devServer代理是一个简单而有效的解决方案。随着Web技术的不断发展,我们期待看到更简洁、更安全的跨源资源共享机制。作为开发者,我们需要不断学习和适应这些变化,以确保我们的应用能够在各种环境中顺利运行。

看到这里的小伙伴,欢迎点赞、评论,收藏!

如有前端相关疑问,博主会在第一时间解答,也同样欢迎添加博主好友,共同进步!!!

标签:origin,Web,http,请求,XXX,Access,CORS,服务器,XMLHttpRequest
From: https://blog.csdn.net/qq_34419312/article/details/141472890

相关文章

  • nextjs 客户端图片 因跨域 strict-origin-when-cross-origin 无法展示
    使用next.config.js配置跨域规则Next.js提供了一个配置文件next.config.js,你可以在其中配置images选项,以允许跨域加载图片。在Next.js中,remotePatterns配置用于定义允许加载远程图像的域名及路径。不过,remotePatterns并不支持传统的正则表达式,而是使用类似正则表达式......
  • 【C#】.NET报错:所生成项目的处理器框架“MSIL”与引用“xxx”的处理器架构“AMD64”不
    一、现象所生成项目的处理器架构“MSIL”与引用“System.Data.SQLite,Version=1.0.60.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139,processorArchitecture=x86”的处理器架构“AMD64”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改您的项目的......
  • Origin绘制投影能带气泡图
    http://【Origin教程(5)——以投影能带为例绘制气泡图】https://www.bilibili.com/video/BV1bY4y1H7cS?vd_source=ef6b729b4f55ce688e98f754cad88d00本文参考上述B站视频,建议先看视频再看笔记,综合看容易看懂。前提:vasp计算能带时INCAR中要设置LORBIT=11用vaspkit导出每种元素......
  • Origin2024如何制作双Y轴图?
    日常科研中,我们经常会用到x-y轴图,但有时候一个x对应两个y值甚至多个y值,那应该怎么做呢?下面给大家分享绘制双Y轴图的操作方法;操作步骤:1、先打开Origin2024软件,然后在Book1中输入如下示例数据: 2、选中所有数据:3、点击菜单栏中【绘图】→【多面板/多轴】→【双Y轴点线柱状......
  • 关于解决Qt配置clang format插件后打开Qt时报缺少pythonxxx.dll的问题
    前言原本安装过程中没有出现任何问题,但是当我退出Qt,再次打开Qt时报虽然也不影响正常编程,但是架不住每次打开它都提示,于是准备探究下这个问题,并将其解决掉第一步:在官网下载:clangformat,我下载的是这个第二步:安装LLVM,安装时选择为所有用户添加环境变量,然后全程一步就......
  • P10238 [yLCPC2024] F. PANDORA PARADOXXX
    这里主要是了解一下套路,首先说一下树的直径的性质。1.任何一个点到它所在的联通块中距离最远的点一定是树的直径两点之一。2.两个连通块合并以后,新的树的直径一定为原先两个连通块中树的直径中的两个。了解完这个,我们来看这道题,根据树的直径的性质,我们可以来维护连通块,那一个......
  • http request-01-XMLHttpRequest XHR 简单介绍
    http请求系列httprequest-01-XMLHttpRequestXHR简单介绍httprequest-01-XMLHttpRequestXHR标准Ajax详解-01-AJAX(AsynchronousJavaScriptandXML)入门介绍AjaxXHR的替代方案-fetchAjaxXHR的替代方案-fetch标准Ajax的替代方案-axios.jshttp请求-04-promise......
  • P10238 [yLCPC2024] F. PANDORA PARADOXXX 题解
    题目传送门前置知识树链剖分|树的直径|最近公共祖先|并查集解法正着删边不太可做,考虑离线下来反着加边。一个显而易见的结论:设点集\(A\)的直径的两个端点为\(u_{1},v_{1}\),另一个点集\(B\)的直径的两个端点为\(u_{2},v_{2}\),则\(A\bigcupB\)的直径端点一定是......
  • linux xxx is not in the sudoers file. This incident will be reported.
    前言linux报错:xxxisnotinthesudoersfile.Thisincidentwillbereported.这意味着用户xxx没有在sudoers文件中被授权使用sudo命令。解决su切换到root用户,报错:su:Authenticationfailure使用su-root命令,切换登录root用户成功。su:默认情况下,su命......
  • Taro——Error: Can't resolve '@/api/xxx'
    前言在使用@去import的时候,报错提示不能够载入,看了下tsconfig.json已经配置了paths,所以考虑是不是taro本身上还有些配置没有完善,查询taro文档后解决;taro版本:3.6.34alias:https://docs.taro.zone/docs/config-detail#alias内容config在配置文件config/index.ts中的config中......