当前位置: 首页 > 知识库问答 >
问题:

邮件应用编程接口:请求标头字段授权不允许访问控制允许标头

李飞翼
2023-03-14

如何在AngularJS应用程序上设置我的. htaccess以防止以下错误消息:

加载https://api.mailgun.net/v3/example.com/messages失败:请求标头字段授权在飞行前响应中不被访问控制允许标头允许。

这是我的.htaccess文件:

<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Content-Type, Authorization"
Header add Access-Control-Allow-Methods "GET, POST"
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
RewriteRule ^ index.html
</IfModule>

每当用户试图提交联系表单时,我都会在我的网站上收到错误消息。

这是我的流程代码:

function send(apiUrl, from, to, subject, body, apiKey) {
  var url = apiUrl;
  var dataJSON = {
    from: from,
    to: to,
    subject: subject,
    text: body,
    multipart: true
  };

  var req = {
    method: 'POST',
    url: url,
    headers: {
      'content-type': 'application/x-www-form-urlencoded',
      'Authorization': 'Basic ' + $base64.encode('api:'+apiKey)
    },
    transformRequest: function (obj) {
      var str = [];
      for (var p in obj) {
        str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
      }
      return str.join('&');
    },
    data: dataJSON
  };

  $http(req).then(function (data) {
    if(data.data) {
      if(data.data.message === 'Queued. Thank you.') {
        $window.alert('Sent. Thank you.');
      }
      else {
        $window.alert(data.data.message);
      }
    }
    else {
      $window.alert('An error has occured. Please try again.');
    }
  }, function (data) {
    if(data.data) {
      if(data.data.message === 'Queued. Thank you.') {
        $window.alert('Sent. Thank you.');
      }
      else {
        $window.alert(data.data.message);
      }        }
    else {
      $window.alert('An error has occured. Please try again.');
    }
  });
}

共有1个答案

周和志
2023-03-14

您不能从浏览器中运行的前端JavaScript代码向Mailgun API发出经过身份验证的请求。根据他们自己的文档,Mailgun API故意不支持:

注意:如果在浏览器中使用,由于cors限制,需要使用代理与Mailgun api通信。另外,不要在前端代码中发布您的私有api密钥。

具体来说,对于来自在浏览器中运行的前端JavaScript代码的请求,Mailagle API不允许使用[代码]授权[代码]请求标头。您可以通过curl或以下方式验证:

$ curl -X OPTIONS -H "Origin: https://marquesslondon.com" \
       -i https://api.mailgun.net/v3/marquesslondon.com/messages

HTTP/1.1 200 OK
Access-Control-Allow-Headers: Content-Type, x-requested-with
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 600
Allow: POST, OPTIONS

请注意,终结点返回的Access-Control-允许-头响应头的值不包括Authoration。这意味着浏览器将阻止您的前端JavaScript代码向该APIendpoint发送任何包含授权请求标头的请求。

对于http://marquesslondon.comsite,这些都是不必要和不相关的;从该(您的)站点返回什么CORS头并不重要,因为它只是发起请求的站点—您没有跨源向它发送任何请求。

相反,重要的是您实际发送跨源请求的站点返回的CORS标头,即https://api.mailgun.net。如上所述,该站点返回一个CORS访问控制允许头响应头,它告诉浏览器不允许包含授权头的请求,这就是导致您看到请求头字段不允许授权的原因问题中引用的错误信息。

 类似资料:
  • 我正在创建一个单页应用程序使用sails.js和reactjs,并使用JWT作为受保护请求的身份验证。在登录过程中,登录请求按预期工作,并能够成功登录。之后,当我试图用无记名请求其他请求时,浏览器显示以下错误消息。 从源访问位于“http://localhost:1337/monitoring URL”的XMLHttpRequest 以下是我在帆config/security.js中的cors设置

  • 我正在从主机(http://abc.com.au)向主机http://localhost:8081上运行的Spring Cloud API网关发送ajax请求。 jquery AJAX请求代码。 SimplifiedAdoptionBulkUpload.jsp spring cloud gateway cors配置。 我在chrome控制台中遇到以下错误。 SimplifiedAdoptionBu

  • 我在后端使用spring boot服务,在前端使用angular 6。 在spring boot中,我使用启用了cors。 并且我正在为每个服务使用拦截器。 在前端呼叫服务中: 如果使用拦截器,我会得到以下异常。如果不使用隔膜,我不会得到cors错误。 加载失败http://localhost:7070/example/myservice:飞行前响应中的访问控制允许标头不允许请求标头字段访问控制允

  • 如何解决以下错误; 加载资源失败:服务器响应状态为500(内部服务器错误)cdn。安普项目。org/v0。js:68响应必须包含AMP访问控制允许源代码源标题Yd@cdn。安普项目。org/v0。js:68 cdn。安普项目。org/v0。js:68表单提交失败:错误:响应必须包含AMP Access Control Allow Source Origin标头​​​ 报道 遵循CORS上AMP G

  • 我使用axios调用api和承载令牌的方式进行授权,我的代码: 在用户存储库中。js时,将导入存储库并通过以下方式调用api: 然后错误是"未授权",但当我更新头: 错误是:在'http://example.com/users“起源”http://localhost:8080'已被CORS策略阻止:飞行前响应中的访问控制允许标头不允许请求标头字段访问控制允许来源。

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您