javascript - 使用身份验证 header 发出跨域请求

标签 javascript api xmlhttprequest

首先,服务器(不是我的)返回以下 header :

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

我正在尝试找出如何使用身份验证 token 将请求传递到站点。我在本地 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 cannot load $URL. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 403.

在阅读文档时,我看到不允许手动设置标题。当我删除 x.setRequestHeader("Authentication", "Bearer $TOKEN"); 我确实从服务器得到了答案(显然是身份验证错误。)那么我将如何添加此信息无论如何我的要求?

服务器返回的 header :

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 请求,以检查它有哪些请求“选项”(允许的方法、来源等)。

检查浏览器发送的选项请求(预检)的网络选项卡。此请求必须具有适当的响应 header ,例如

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 状态 header ,这意味着服务器没有正确处理选项请求,或者只是为您的主机设置 403 作为安全措施。除非更改,否则您无法通过 XHR 访问该 api。

关于javascript - 使用身份验证 header 发出跨域请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35037590/

相关文章:

java - 如何在eclipse动态web项目中使用rest api?

http - curl POST 有效,但 ionic this.http.post 无效

javascript - XMLHttpRequest.upload.onprogress 不适用于 HTTPS

javascript - canviasjs 没有多次显示图表

javascript - 使用 Javascript - 如何单击没有 ID、值或名称的提交按钮

javascript - 如何使用dom(数据表)进行操作?

javascript - 正在获取 API json 数据警报 : Content Security Policy: The page’s settings blocked the loading of a resource at

javascript - TinyMCE,将 HTML 插入特定的 TinyMCE 实例

android - 如何使用 flightstatus api 它在 android 上返回 null

javascript - 为什么 XMLHttpRequest 没有返回响应?