【问题标题】:AJAX function w/ Mailgun, getting "ERROR Request header field Authorization is not allowed by Access-Control-Allow-Headers"带有 Mailgun 的 AJAX 功能,获取“访问控制允许标头不允许错误请求标头字段授权”
【发布时间】:2015-05-24 08:42:18
【问题描述】:

我正在做一个 AJAX 调用,该调用命中 Mailgun API 以发送电子邮件。 Mailgun 上的文档说,应该向“https://api.mailgun.net/v3/domain.com/messages”提出发布请求。我已经包含了mailgun指定的我的api密钥(他们指示使用'api'的用户名)。由于这涉及 CORS,我无法克服错误:Access-Control-Allow-Headers 不允许请求标头字段授权。

但是,我检查了“网络”选项卡中的请求/响应,并且 Mailgun 响应中的“Access-Control-Allow-Origin”设置为“*”......这应该表明它应该允许它? (请参阅下面的请求/响应):我已经编辑了实际域和我的 API 密钥。

Remote Address:104.130.177.23:443
Request URL:https://api.mailgun.net/v3/domain.com/messages
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, authorization
Access-Control-Request-Method:POST
Connection:keep-alive
Host:api.mailgun.net
Origin:null
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
Response Headersview source
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
Connection:keep-alive
Content-Length:0
Content-Type:text/html; charset=utf-8
Date:Fri, 20 Mar 2015 19:47:29 GMT
Server:nginx/1.7.9 

我的 ajax 调用代码如下,其中我在标题中包含了我的凭据以及帖子应该去的域。不知道是什么导致这不起作用。是因为我在本地主机上测试吗?我认为这不会有什么不同,因为响应标头中的“访问控制允许来源:*”。任何帮助将不胜感激!谢谢你。

function initiateConfirmationEmail(formObj){

  var mailgunURL;
  mailgunURL = "https://api.mailgun.net/v3/domain.com/messages"
  var auth = btoa('api:MYAPIKEYHERE');

    $.ajax({
    type     : 'POST',
    cache    : false,
    headers: {"Authorization": "Basic " + auth},
    url      : mailgunURL,
    data     : {"from": "emailhere", "to": "recipient", etc}, 
    success  : function(data) {
      somefunctionhere();
    },
    error  : function(data) {
      console.log('Silent failure.');
    }
  });
  return false;
}

【问题讨论】:

  • 您可能需要根据错误添加Access-Control-Allow-Headers: Authorization
  • @Drazisil 感谢您的回复,但我不需要访问 mailgun 的服务器才能执行此操作(因为它是从 localhost 到 mailgun 的请求)?我会在哪里添加这个?
  • 抱歉,我以为那些是请求标头。我认为问题可能是您试图通过基本身份验证,这通常是 API 密钥的用途。我在documentation.mailgun.com/api-sending.html#examples 中没有看到,我可能会听从了解 API 的人的意见。
  • 如果您不需要回复,您可以使用表单而不是ajax来发布它
  • @Coluhuru 我和 Mailgun 的某个人交谈是因为我很好奇,他们说在使用 Ajax/JS 时你会遇到身份验证和 Access-Control-Allow-Headers 的问题。他们需要的身份验证不适用于 Access-Control-Allow-Headers,他们故意这样做,这样用户就不会暴露 API 密钥。我原以为有办法解决这个问题,但我想不是。

标签: javascript ajax cors email mailgun


【解决方案1】:

Drazisil 在上面是正确的。响应需要包含 Access-Control-Allow-Headers: Authorization,因为您在请求中包含该标头,并且 Authorization 不是 simple header

【讨论】:

    猜你喜欢
    • 2018-10-09
    • 2012-05-19
    • 2019-07-09
    • 2014-07-07
    • 2022-06-25
    • 1970-01-01
    • 2017-12-19
    • 2018-01-23
    • 2017-08-31
    相关资源
    最近更新 更多