【问题标题】:Symfony Angular No 'Access-Control-Allow-Origin' header is present on the requested resourceSymfony Angular 请求的资源上不存在“Access-Control-Allow-Origin”标头
【发布时间】:2019-07-04 22:37:36
【问题描述】:

当我向 api symfony4 发送 post 请求时出现此错误。我使用 fosrestBundle 创建 api 并使用 nelmioCrosBundle 纠正错误 cros,但我也有此错误:

从源“http://localhost:4200”访问“http://localhost:8000/api/user/upload”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

代码配置nelmio:

nelmio_cors:
        #    defaults:
        #        origin_regex: true
        #        allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
        #        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        #        allow_headers: ['Content-Type', 'Authorization']
        #        max_age: 3600
        #    paths:
        #        '^/': ~
        paths:
            '^/api':
                allow_origin: ['*']
                allow_headers: ['Authorization', 'Content-Type']
                allow_methods: ['GET', 'POST', 'PUT', 'DELETE']
                max_age: 3600

这是将数据角度发送到 symfony4 的函数:

uploadFiles(test) {
      let headers = new Headers({ 'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + localStorage.getItem('token') });

      console.log(test);
      return this._http.post(this.url + '/user/upload',JSON.stringify(test) ,{ headers: headers })
        .pipe(map(res => res.json()));
    }

我使用代理但也有错误,我还创建了侦听器来设置标题以响应但也有错误..如何解决此错误..

【问题讨论】:

    标签: angular symfony


    【解决方案1】:

    尝试在allow_headers数组中添加Access-Control-Allow-Origin

    【讨论】:

      【解决方案2】:

      OPTIONS 添加到allow_methods

      【讨论】:

      • @allow_methods in angular !!
      • 拒绝 Symfony 中的 nelmio_cors 配置。 allow_methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']。您的浏览器向您的 API 发出预检请求,并使用 OPTIONS http 动词
      • 您是否尝试过允许所有标题? allow_headers: ['*']
      • 那我不确定。清除您的 Symfony 和浏览器缓存,尝试不同的浏览器,另一台机器......当您找到时告诉我们
      【解决方案3】:

      您的后端不允许使用“授权”标头。在您的 Symfony 应用程序中,您必须设置一个响应标头,其中包含:

      Access-Control-Allow-Headers : 'Content-Type', 'Authorization'
      

      查看此链接:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers

      【讨论】:

      • 但是如何贴花这个!
      • 你必须像这样尝试:使用 Symfony\Component\HttpFoundation\AcceptHeader; $acceptHeader = AcceptHeader::fromString($request->headers->get('Accept'));我已经为 Laravel 和 Angular 解决了同样的问题。但我不知道 symfony。
      【解决方案4】:

      如果您只想玩捆绑包而不需要CORS,您可以使用此chrome extension 禁用它。启用的扩展程序将出现一个绿色图标,因此您可以取消选中 Enable cross-origin sharing

      【讨论】:

        猜你喜欢
        • 2015-08-29
        • 2018-10-31
        • 2019-07-21
        • 2016-08-17
        • 2018-01-03
        • 2018-06-09
        • 2015-09-01
        • 1970-01-01
        相关资源
        最近更新 更多