了解响应标头中的差异

时间:2017-02-03 09:04:25

标签: http-headers jqxhr

我需要了解以下内容: 我尝试调用外部API,我无法控制服务器。 供应商为我提供了静态X-Auth-Token。

使用PHP脚本我能够按预期检索JSON数组:

$headers = array();
$headers[] = 'X-Auth-Token:myValidKeyString';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

现在我想从客户端使用Ajax调用访问API,并且可能将其嵌入到Angular中。但这就是我得到的。

使用测试模块(Chrome中的Restlet的DHC)获取请求时,返回200和以下响应标题

Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Connection:keep-alive
Content-Type:application/json;charset=utf-8
Date:Fri, 03 Feb 2017 08:21:49 GMT
Expires:0
Pragma:no-cache
Server:Apache-Coyote/1.1
transfer-encoding:chunked
X-Application-Context:application:qa:8080
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block

使用以下请求标头:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Connection:keep-alive
DNT:1
Host:myApihost.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
X-Auth-Token:my-key-string

然后使用以下功能

$.ajax({
    type: 'GET',
    url: 'myApihost.com',
    headers: {'X-Auth-Token' : 'my-key-string'},
    success: function (dxddata) {
        console.log(dxddata);
    }
});

状态通过响应标题转到401:

Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Connection:keep-alive
Content-Length:55
Content-Type:application/json;charset=utf-8
Date:Fri, 03 Feb 2017 08:58:25 GMT
Expires:0
Pragma:no-cache
Server:Apache-Coyote/1.1
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block

并请求标题:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Access-Control-Request-Headers:x-auth-token
Access-Control-Request-Method:GET
Connection:keep-alive
DNT:1
Host:myApihost.com
Origin:null
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36

我如何进入并调用标头X-Auth-Token:my-key-string正确传递?

此时我不禁用CORS控件以避免交叉原点错误。

1 个答案:

答案 0 :(得分:0)

需要在托管apis的服务器上处理CORS。您无法在客户端上自行绕过此安全限制。 如果您想在您的机器上进行测试,您可以尝试安装CORS chrome扩展程序,如https://chrome.google.com/webstore/detail/cors-toggle/omcncfnpmcabckcddookmnajignpffnh。 否则,您需要从服务器端拨打电话。