当前位置:  开发笔记 > 编程语言 > 正文

自定义标头已添加到Access-Control-Request-Headers中

如何解决《自定义标头已添加到Access-Control-Request-Headers中》经验,为你挑选了1个好方法。

我正在尝试向我的有角js GET请求中添加自定义标头,如下所示:

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

但是问题是标题被添加到如下所示的Access-Control-Request-Headers中,并且我收到403禁止响应:

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的其他相关答案中,我看到需要在服务器端启用标头partnerId和partnerKey。但是我能够在POSTMAN客户端和其他POST客户端中添加这些自定义标头,并能够获得预期的响应。所以我想我缺少了一些东西。有人可以在这方面指导我。提前致谢

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



1> sideshowbark..:

如果您向脚本化的跨域请求添加任何标头,而不添加任何CORS安全列出的请求标头,则会触发浏览器首先执行CORS预检请求。

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

因此,为了使用户能够使用您的Web应用程序(该Web应用程序使用自定义标头发出脚本化的跨域请求),这些跨域请求所到达的服务器必须支持CORS。

Postman可以发出这样的请求而不会引起预检的原因是,Postman不是浏览器引擎,它是不受相同来源策略限制的扩展,因此不需要CORS。

邮递员基本上可以执行任何curl其他工具或其他此类工具可以执行的操作,但为方便起见,仅在浏览器用户界面中即可。否则,它将绕过浏览器内置的常规Web安全功能。

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有