XMLHttpRequest 'Access-Control-Allow-Origin'...当请求的凭据模式为 'include' 时,响应不能是通配符 '*'

Posted

技术标签:

【中文标题】XMLHttpRequest \'Access-Control-Allow-Origin\'...当请求的凭据模式为 \'include\' 时,响应不能是通配符 \'*\'【英文标题】:XMLHttpRequest 'Access-Control-Allow-Origin'... the response must not be the wildcard '*' when the request's credentials mode is 'include'XMLHttpRequest 'Access-Control-Allow-Origin'...当请求的凭据模式为 'include' 时,响应不能是通配符 '*' 【发布时间】:2020-11-10 19:58:12 【问题描述】:

我在后端使用带有云功能的 Express Js,在前端使用 Angular。我尝试了在 *** 上发布的几种解决方案,但没有任何变化。 这是我的后端代码

    const app = express();
    const main = express();
    main.use('/v1', app);
    main.use(bodyParser.json());
    main.use(bodyParser.urlencoded( extended: false ));
    // ROUTES
    app.get('/posts/:postId', function(req, res, next)
            res.set('Access-Control-Allow-Origin', '*');
            res.set('Access-Control-Allow-Methods', 'GET, PUT, POST, OPTIONS');
            res.set('Access-Control-Allow-Headers', '*');
  
            if (req.method === 'OPTIONS') 
           // Send response to OPTIONS requests
           res.set('Access-Control-Allow-Methods', 'GET');
           res.set('Access-Control-Allow-Headers', 'Content-Type');
           res.set('Access-Control-Max-Age', '3600');
           return next();
            else 
           return next();
            , function(req, res)
           firebaseHelper.firestore.getDocument(db, 'posts', req.params.postId).then(
            (doc) => res.status(200).send(doc),
             (err) =>  res.status(400).send('error about getting post')); );

角度代码

 onGetPost(postId) 
          const header = new HttpHeaders(  'application/json'  );
          const option = headers: header;
          this.subscription = this.http.get(`https://my-url.web.app/v1/post/$postId`, 
          option).subscribe(
            (data: any[]) =>  this.post.next(data); resolve('ok'); ,
            (err) => reject(err)
          );


提前感谢您的帮助

【问题讨论】:

【参考方案1】:

你确定你没有发送请求

withCredentials: true

? (您可能定义了拦截器以将其添加到请求中)如果是这样,则在不需要时将其删除。

否则,请将您的来源设置在后端以反映前端的来源。见this detailed answer for more information

【讨论】:

以上是关于XMLHttpRequest 'Access-Control-Allow-Origin'...当请求的凭据模式为 'include' 时,响应不能是通配符 '*'的主要内容,如果未能解决你的问题,请参考以下文章

访问 XMLHttpRequest 时访问 XMLHttpRequest 已被 CORS 策略阻止

XMLHttpRequest 封装

XMLHttpRequest 对象

XMLHttpRequest 对象

AJAX - 创建 XMLHttpRequest 对象

XMLHTTPRequest 错误:不推荐使用主线程上的同步 XMLHttpRequest ...(SoundCloud API)