angularjs 如何从请求中删除授权标头[重复]

yebdmbv4  于 11个月前  发布在  Angular
关注(0)|答案(2)|浏览(115)

此问题在此处已有答案

Request header field Access-Control-Allow-Headers is not allowed by itself in preflight response(27个回答)
7年前关闭。
我使用MEAN Stack User Registration and Login Example & Tutorial作为我的应用程序的基础。它在run函数中为每个请求添加一个auth头:

$http.defaults.headers.common['Authorization'] = 'Bearer ' + $window.jwtToken;

字符串
我想上传图片到Cloudinary,但我得到这个错误:
XMLHttpRequest无法加载https://api.cloudinary.com/v1_1/xxxx/upload。在preflight响应中,请求头字段Authorization不被EST-Control-Allow-Headers允许。
我如何专门为向Cloudinary的请求删除此头?

muk1a3rh

muk1a3rh1#

你需要一个拦截器来检查请求的URL,如果匹配就清除头部。或者你可以使用$http配置参数。
使用参数:

$http.post('https://api.cloudinary.com/v1_1/' + someId + '/upload', data, { headers: {} });

字符串
使用拦截器:

.factory('cloudinaryInterceptor', function() {
 return {
  request: function(config){
   //Check for the host
   var regex = /api\.cloudinary\.com/i;
   if(regex.test(config.url))
    //Detach the header
    delete config.headers.authorization;
   return config;
  }
 }
});


记住在配置阶段推送拦截器

$httpProvider.interceptors.push('cloudinaryInterceptor');

im9ewurl

im9ewurl2#

这个问题以前有人问过,答案是here
当你开始使用自定义请求头时,你会得到一个CORS preflight。这是一个使用HTTP OPTIONS动词的请求,包括几个头,其中一个是列出客户端想要包括在请求中的头的控制请求头。
您需要使用适当的CORS头来回复该CORS preflight以使其工作。其中一个确实是EST-Control-Allow-Headers。该头需要包含与EST-Control-Request-Headers头包含的值相同的值(或更多)。

相关问题