一尘不染

CORS-如何“预检” httprequest?

javascript

我试图向WCF服务(我拥有)发出跨域HTTP请求。我已经阅读了几种处理跨域脚本限制的技术。因为我的服务必须同时容纳GET和POST请求,所以我无法实现某些动态脚本标签,其src是GET请求的URL。由于我可以自由地在服务器上进行更改,因此我开始尝试实现一种变通方法,该变通方法包括配置服务器响应以包括“Access-Control-Allow-Origin”标头以及带有和OPTIONS请求的“预检”请求。我从这篇文章中得到了一个主意:

在服务器端,我的网络方法是在HTTP响应中添加“ Access-Control-Allow-
Origin:*”。我可以看到响应现在确实包含此标头。我的问题是:如何“预检”请求(选项)?我正在使用jQuery.getJSON发出GET请求,但是浏览器立即声名狼藉地取消了该请求:

Access-Control-Allow-Origin不允许使用原始http:// localhost

有人熟悉这种CORS技术吗?客户需要对我的请求进行哪些更改?

谢谢!


阅读 265

收藏
2020-04-25

共1个答案

一尘不染

在预检请求期间,您应该看到以下两个标题:Access-Control-Request-Method和Access-Control-Request-
Headers。这些请求标头向服务器询问发出实际请求的权限。飞行前响应需要确认这些标头,才能使实际请求正常工作。

例如,假设浏览器使用以下标头发出请求:

Origin: http://yourdomain.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header

然后,您的服务器应使用以下标头进行响应:

Access-Control-Allow-Origin: http://yourdomain.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: X-Custom-Header

要特别注意Access-Control-Allow-Headers响应标头。此标头的值应与Access-Control-Request-
Headers请求标头中的标头相同,并且不能为“ *”。

2020-04-25