gpt4 book ai didi

json - IE11 不设置 x-cfrtoken HTTP header ,除非使用 InPrivate 窗口,这会导致服务器响应 HTTP 403 Access Denied

转载 作者:可可西里 更新时间:2023-11-01 16:29:36 26 4
gpt4 key购买 nike

两天来我一直对此感到困惑。情况:

  • 简单的网站,在 Websharper 中运行,登录屏幕,单一 View ,通过带有应用程序/json 响应的 XHR
  • 该站点在具有不同域的 iframe 中运行(我无法更改它,但我可以访问这两个站点)。没有 iframe 就没有问题。
  • 您应该会看到错误登录错误,但这在 Windows 7 上的 IE11 中不起作用。它在 InPrivate 模式下的相同 IE11 和 Windows 10 上的任何 IE11 中都起作用。这不是缓存问题。
  • 该网站设置 cookie,但如果无法设置 cookie(即 iPhone),则无 cookie 运行

似乎在 InPrivate 模式下,x-csfrtoken 已在请求 header 中设置,在 InPrivate 模式外此 header 未设置。然后服务器返回 HTTP 403 错误,这似乎是问题的根源。

我不知道如何指示服务器 (IIS) 忽略此 token 。

要查看此行为的实际效果,请访问该站点并输入任何内容,然后单击“Inloggen”。您应该看到登录错误(荷兰语),但在 Windows 7 的 IE11 中,不会出现此错误。

I tried this solution by Microsoft, on improper rights on LocalLow ,但它并没有解决问题,而且似乎与此无关。

最佳答案

显然这是 Windows 7 和 Windows 8/8.1 上 IE11 中的一个错误。我发现浏览器确实发送了csrftoken cookie,但是忘记了所需的x-csrftoken HTTP header 参数,所有其他浏览器,包括 Windows 10 上的旧版和新版 IE 和 IE11 都可以正确发送。

如果您的工具链通过验证 x-csrftoken(任何框架都推荐)来保护自己,那么这将在 IE11 中失败。它was discussed here for WebSharper ,但还没有一个完整的解决方案。

我发现可以正常工作的解决方法如下。它很老套,它会在到达时更改 HTTP header ,但其他工具也会这样做(例如代理服务器)。如果您使用的是 WebSharper,这里是放置在 F# 中的 global.asax.fs 中的代码(有点乱,但我会把清理作为练习留给读者 ;))。

member __.Application_BeginRequest(sender: obj, args: System.EventArgs) =
HttpContext.Current
|> function
| null -> ()
| ctx ->
match ctx.Request with
| null -> ()
| req ->
match req.Cookies.Item "csrftoken", req.Headers.Item "x-csrftoken" with
| null, null -> ()
| cookie, null ->
// fix for IE11, which does not always set the HTTP Header "x-csrftoken"
try req.Headers.Item "x-csrftoken" <- cookie.Value
with _ -> () // ignore possible errors
| null, _ ->
// if header is set but cookie is not, there's nothing we can do (cookie collection is read-only)
()
| cookie, csrfHeader when cookie.Value <> csrfHeader ->
try req.Headers.Item "x-csrftoken" <- cookie.Value
with _ -> () // ignore possible errors
| _ ->
() // all is fine, the default: cookie "csfrtoken" and header "x-csfrtoken" are equal

关于json - IE11 不设置 x-cfrtoken HTTP header ,除非使用 InPrivate 窗口,这会导致服务器响应 HTTP 403 Access Denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50017916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com