使用身份验证标头发出跨域请求
Making a cross domain request with authentication header
首先,服务器(不是我的)返回以下标头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
我正在尝试了解如何使用身份验证令牌将请求传递到站点。我正在本地 apache 服务器上运行代码。
这是我的代码:
function get_data(){
var url = '$URL';
var x = new XMLHttpRequest();
x.open("GET", url, true)
if (x.readyState == 4 && x.status == 200) {
var responseText = x.responseText;
console.log(responseText)
};
x.setRequestHeader("Authentication", "Bearer $TOKEN");
x.withCredentials = true
x.send()
}
控制台返回:
XMLHttpRequest 无法加载$URL。对预检请求的响应不 通过访问控制检查:没有"访问控制允许源"标头 存在于请求的资源上。起源"http://localhost"是 因此不允许访问。响应具有 HTTP 状态代码 403。
在阅读文档时,我看到不允许手动设置标题。当我删除x.setRequestHeader("Authentication", "Bearer $TOKEN");
时,我确实从服务器得到了答案(显然是身份验证错误。那么无论如何我该如何将此信息添加到我的请求中呢?
服务器返回的标头:
Request URL:$serverurl
Request Method:OPTIONS
Status Code:403 Forbidden
Remote Address:$ipaddress
Response Headers
view source
Cache-Control:no-cache
Connection:close
Content-Type:text/html
Request Headers
view source
Accept:"*/*"
Accept-Encoding:gzip, deflate, sdch
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:authentication
Access-Control-Request-Method:GET
Connection:keep-alive
Host:$host
Origin:http://localhost
Referer:http://localhost/mv.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
在实际的GET请求之前,浏览器会发送一个OPTION请求,以检查它有哪些"选项"用于请求(允许的方法,来源等)。
检查网络选项卡以了解浏览器发送的选项请求(印前检查)。此请求必须具有适当的响应标头,例如
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS
看这里: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Methods
由于服务器为选项请求发送 403 状态标头,这意味着服务器没有正确处理选项请求,或者只是为您的主机设置 403 作为安全措施。除非更改,否则无法通过 XHR 访问该 api。
相关文章:
- ajax请求的顺序总是不同的
- Meteor如何接收HTTP请求
- 有没有一种方法可以防止img get请求使用css或js发生
- 从ajax请求中获取javascript对象
- JSONP请求返回结果,但也触发error_callback
- 在localhost Dev Box上测试JSONP请求的最佳方式
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 在openshift node js应用程序中获取请求
- 反应路由器弄乱了请求网址
- 在我的情况下,如何进行http请求
- 使用密码对话框Javascript请求帮助
- servlet中的请求对象,而不是从jsp接收参数值
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- 如何检测第三方广告服务器请求
- 在Rails中更新Div,而不更改更新请求后的视图
- 使用身份验证标头发出跨域请求