自定义 headers 被添加到 Access-Control-Request-Headers

Custom headers get added to Access-Control-Request-Headers

我正在尝试将自定义 header 添加到我的 angular js GET 请求中,如下所示:

    $http({
        method : 'GET',
        url : s,
        headers : {
        "partnerId" : 221,
         "partnerKey" : "heeHBcntCKZwVsQo"
        }
    })

但问题是 header 被添加到 Access-Control-Request-Headers,如下所示,我得到 403 Forbidden 响应:

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0)
Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: GET
Access-Control-Request-Headers: partnerid,partnerkey
Origin: http://localhost:8080
DNT: 1
Connection: keep-alive

我也尝试了以下更改,但没有成功

return $http.get(s, {
    headers : {
        'partnerId' : 221,
        'partnerKey': 'heeHBcntCKZwVsQo'
        }
    })

在 SO 的其他相关答案中,我看到 header partnerId 和 partnerKey 需要在服务器端启用。但是我能够在 POSTMAN 客户端和其他 POST 客户端中添加这些自定义 headers 并且能够获得预期的响应。所以我想我错过了一些东西。有人可以指导我吗?提前致谢

编辑:我注意到的另一件事是在传递请求时将 partnerId 替换为 partnerid。不确定这是否有所作为。

如果您将任何 headers 添加到脚本 cross-origin 请求而不是任何 CORS-safelisted request-headers, it triggers browsers to first do a CORS preflight request.

没有办法阻止用户的浏览器执行 CORS 预检(尽管在进行测试时有办法在您自己的浏览器中本地绕过它;例如,通过使用 Postman)。

因此,为了让用户能够使用您的 Web 应用程序,该应用程序使用自定义 headers 发出脚本化 cross-origin 请求,这些 cross-origin 请求发送到的服务器需要是CORS-aware.

Postman 可以在不进行预检的情况下发出此类请求的原因是,Postman 不是浏览器引擎 — 它是不受 same-origin 政策限制的扩展,因此不需要 CORS。

Postman 基本上可以做任何 curl 或其他类似工具可以做的事情,但只是为了方便 UI 在浏览器中。否则它会绕过浏览器内置的正常 Web-security 功能。