如何解决这个“http://localhost:8080”已被 CORS 策略阻止:对预检请求的响应未通过 vueJS 中的访问控制?

Posted

技术标签:

【中文标题】如何解决这个“http://localhost:8080”已被 CORS 策略阻止:对预检请求的响应未通过 vueJS 中的访问控制?【英文标题】:How to solve this 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control in vueJS? 【发布时间】:2020-04-04 08:16:35 【问题描述】:

从源“http://localhost:8080”访问“http://localhost/webserivcedemo/state.php”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:Access-Control-Allow-Origin 标头包含多个值 *, *,但只允许一个。

我使用 $http 来调用网络服务。 这是我的请求代码。

export default 
  data() 
    return 
      name: "",
      number: "",
      email: "",
      submitdata: false
    ;
  ,
  methods: 
    handleSubmit: function() 
      var data1 = 
        title: this.name,
        body: this.number + this.email
      ;
      this.$http
        .post("http://localhost/webserivcedemo/state.php", 
          data: data1
        )
        .then(function(data) 
          console.log(data);
          this.submitdata = true;
        );
    
  
;

【问题讨论】:

这不是$http 调用的问题,而是您的服务器返回错误标头的问题。它必须是*,而不是*, * 我尝试使用 axios 但无法正常工作。我的网络服务和我的 vue 项目都在我的本地服务器中。我使用 nginx 它们都在您的本地服务器上并不重要,如果它们使用不同的端口号,则适用 CORS。为了使 CORS 工作,您必须从服务器返回一个合适的 Access-Control-Allow-Origin 标头。如错误消息所述,您当前返回的值 *, * 无效。这可能是因为标头* 被添加到两个不同的位置,并且某些东西将它们组合成*, *。避免 CORS 的一种解决方法是通过单个服务器代理所有内容。 在您的问题中添加一个 php 代码的 sn-p 代码,负责发送答案。特别是,我们对片段设置标头感兴趣。 @Ashruti 返回Access-Control-Allow-Origin 标头的片段。 【参考方案1】:

您需要创建新文件vue.config.js,并需要添加如下需要访问的url。

module.exports = 
  devServer: 
        proxy: 'endpoint',
    

【讨论】:

【参考方案2】:

解决方案 1:请检查第一个与 http://127.0.0.1:8080 相同的端口/服务器是否运行扭曲? 如果扭转然后关闭一个。然后检查。

解决方案 2:有时会出现额外的 / API 端点问题。删除多余的/ 然后检查。

谢谢

【讨论】:

以上是关于如何解决这个“http://localhost:8080”已被 CORS 策略阻止:对预检请求的响应未通过 vueJS 中的访问控制?的主要内容,如果未能解决你的问题,请参考以下文章

如何让任务在 Swift 3 中等待完成

React Native 未在 localhost 上运行

Tomcat 403错误!!!

Laravel 路由和 Vue 路由冲突

spring-boot-plus V1.2.1 发布 文件上传下载和静态资源访问

175210《网络对抗技术》Exp9 Web安全基础