![](/img/trans.png)
[英]AJAX function w/ Mailgun, getting “ERROR Request header field Authorization is not allowed by Access-Control-Allow-Headers”
[英]Mailgun API: Request header field Authorization is not allowed by Access-Control-Allow-Headers
如何在AngularJS应用程序上设置我的.htaccess以防止出现以下错误消息:
无法加载
https://api.mailgun.net/v3/example.com/messages
:请求标头字段预检响应中的Access-Control-Allow-Headers不允许授权。
这是我的.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.');
}
});
}
您无法从浏览器中运行的前端JavaScript代码向Mailgun API发出经过身份验证的请求。 根据他们自己的文档 ,Mailgun API故意不支持它:
注意:如果在浏览器中使用,由于cors限制,需要代理与Mailgun api通信。 另外,不要在前端代码中发布私有api密钥。
具体来说,对于在浏览器中运行的前端JavaScript代码的请求,Mailgun API不允许Authorization
请求标头。 您可以使用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-Allow-Headers
响应标头的值不包括Authorization
。 这意味着浏览器将阻止您的前端JavaScript代码向包含Authorization
请求标头的任何请求发送该API端点。
至于您对http://marquesslondon.com
网站的.htaccess
文件的更改,这些都是不必要的,无关紧要的; 它是什么并不重要CORS你从(你的)站点返回头,因为它只是网站发起请求-你不发送给它的任何请求跨域。
相反,重要的是您实际向跨域发送请求的站点返回的CORS标头,即https://api.mailgun.net
。 并且如上所述,该站点返回CORS Access-Control-Allow-Headers
响应标头,该标头告知浏览器不允许包含Authorization
标头的请求 - 这就是导致您看到Request头字段不允许授权的错误消息引用的错误消息在问题中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.