【问题标题】:Ajax anti-forgery POST with CORS preflight OPTIONS request (302 redirect)带有 CORS 预检 OPTIONS 请求的 Ajax 防伪 POST(302 重定向)
【发布时间】:2016-09-25 21:28:33
【问题描述】:

我最近更新了一个我正在开发的网站,以检查所有 POST 请求中的防伪令牌。对于 ajax 请求,我已经放置了一个预过滤器来检查防伪令牌并将其添加到标题中

$.ajaxPrefilter(function (options, localOptions, jqXHR) {
    if (options.type == "POST") {
        var token = GetAntiForgeryToken();
        jqXHR.setRequestHeader(token.name, token.value);
    }
});

当以管理员身份登录时,该站点还具有管理工具,使用 CORS 将数据发送到单独的管理站点。这些工具之一是 AJAX 发布请求。标头已添加到请求中,并且可以正常工作。

另一个工具是 GET 请求,它返回一个表单,该表单显示在一个对话框中。这工作正常。但是,当提交表单时,预检 OPTIONS 请求遇到 302,并且我收到错误“预检响应无效(重定向)”

如果我删除了 ajaxPrefilter,表单发布工作,但直接发布请求没有。启用 Prefilter 后,直接发布请求有效,但表单发布无效。我很迷茫。 Access-Control-Allow-Headers 中允许使用防伪标头。两者的要求是:

OPTIONS http://localhost:64789/Example/Example/?_=1464356730712 HTTP/1.1
Host: localhost:64789
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:64947
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type
Accept: */*
Referer: http://localhost:64947/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6

这个返回 302。

OPTIONS http://localhost:64789/Example2/Example2/ HTTP/1.1
Host: localhost:64789
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:64947
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type
Accept: */*
Referer: http://localhost:64947/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6

这个返回200。

任何帮助都会非常有用。

【问题讨论】:

  • 你的问题不是直截了当的。请仅提供一般和有用的部分...

标签: jquery ajax asp.net-mvc cors antiforgerytoken


【解决方案1】:

已通过将 [HttpGet] 属性添加到表单的 get 方法来解决此问题。

【讨论】:

    【解决方案2】:

    我认为您忘记为表单帖子发送内容类型标题。尝试从这个答案中添加一些内容类型:https://stackoverflow.com/a/35452170/1727132

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 2015-03-01
      • 1970-01-01
      • 2017-11-27
      • 2022-01-21
      • 2015-03-21
      • 2015-08-04
      • 2015-07-29
      • 2016-12-28
      相关资源
      最近更新 更多