我有一个关于跨域AJAX请求的问题。
这个问题涉及到三个服务器,我们可以称它们为A1、A2和B。
A1和A2运行相同的应用程序代码。它们是同一个Web应用程序的两个分段实例。B是另一个Web应用程序。
我们需要从A Web应用程序向B应用程序执行跨域AJAX请求。我们尝试启用CORS,但在IE <=8中难以令人满意地工作,因此现在我们使用nginx代理规则。流程是:浏览器ajax请求-> A1或A2-> nginx代理-> B
B是有状态的,并且需要用户的会话cookie才能正常工作。
我们看到的情况是,当使用服务器A1时,这个过程可以正常工作,但当使用服务器A2时,B无法提取cookie。
我查看了来自A1和A2的请求头,它们是相同的。两者都在头部中有cookies行,都有相同的来源等。
在B上,当请求来自A2时,$_COOKIE ['session_key']为空,但当请求来自A1时,它被正确地填充。
奇怪的是,它只缺少从A2的标头中提取一个特定的cookie键,并且只有当请求来自A2时才会出现此问题。它可以正常解析A2的headers中的每个其他cookie,但由于某种原因无法解析用户的会话cookie,但如果请求来自A1,则可以正常解析。
我使用了tcpdump并获取了每个请求的pcap文件,并进行了比较,但是标头中没有什么特别不同的地方。
我发现了这个Stack Overflow的问题,有人说是因为他的cookie头字符串太长了:当$_COOKIE中有值时,为什么在$_SERVER中没有设置cookie。我认为我的cookie长度并不算太长,因为在成功和失败的情况下都只有249个字符。
我已经考虑过从$_SERVER手动解析cookie,但那听起来很愚蠢,我更希望找出潜在的问题。
这个问题涉及到三个服务器,我们可以称它们为A1、A2和B。
A1和A2运行相同的应用程序代码。它们是同一个Web应用程序的两个分段实例。B是另一个Web应用程序。
我们需要从A Web应用程序向B应用程序执行跨域AJAX请求。我们尝试启用CORS,但在IE <=8中难以令人满意地工作,因此现在我们使用nginx代理规则。流程是:浏览器ajax请求-> A1或A2-> nginx代理-> B
B是有状态的,并且需要用户的会话cookie才能正常工作。
我们看到的情况是,当使用服务器A1时,这个过程可以正常工作,但当使用服务器A2时,B无法提取cookie。
我查看了来自A1和A2的请求头,它们是相同的。两者都在头部中有cookies行,都有相同的来源等。
在B上,当请求来自A2时,$_COOKIE ['session_key']为空,但当请求来自A1时,它被正确地填充。
奇怪的是,它只缺少从A2的标头中提取一个特定的cookie键,并且只有当请求来自A2时才会出现此问题。它可以正常解析A2的headers中的每个其他cookie,但由于某种原因无法解析用户的会话cookie,但如果请求来自A1,则可以正常解析。
我使用了tcpdump并获取了每个请求的pcap文件,并进行了比较,但是标头中没有什么特别不同的地方。
我发现了这个Stack Overflow的问题,有人说是因为他的cookie头字符串太长了:当$_COOKIE中有值时,为什么在$_SERVER中没有设置cookie。我认为我的cookie长度并不算太长,因为在成功和失败的情况下都只有249个字符。
我已经考虑过从$_SERVER手动解析cookie,但那听起来很愚蠢,我更希望找出潜在的问题。