假设我有一个PHP / Python(Django)网站。 该网站在多个实例服务器上运行。 这意味着该网站的URL是www.test.com,从负载均衡器,它可以将客户端发送到www.server1.com或www.server2.com等。
当网站上有表格时,此表格的处理位于同一页面上: 可能存在以下情况吗? : - 用户访问www.test.com - 在幕后,通过负载均衡器,他可以访问www.server * 1 *。com。他填写表格。 - 表单操作(URL)适用于www.test.com - 所以在幕后,通过负载均衡器,他可以访问www.server * 2 *。com。 所以在这里,所需的表单数据,对我的问题更重要的可能是 - '请求'数据(如Python Django中的request.SOMETHING)将丢失?因为它可能是在会议之前保存的,在www.server * 1 *。com,现在它在www.server * 2 *。com?中丢失了/ p>
答案 0 :(得分:0)
请求将始终包含所有数据,因为它将转发到边缘服务器。 request.POST
和request.GET
将包含请求中的所有数据。但问题是会话数据可能在该边缘服务器上不可用。例如,您在server1上启动了会话,然后从server2请求另一个页面。 server2可能会分配一个新会话,并禁止您访问某些内容。
要解决此会话问题,您可以执行以下两项操作之一:
答案 1 :(得分:0)
是的,这是一个有效的问题。由于Web(HTTP)的性质,其他请求可能最终在另一台服务器上。此问题称为持久性或粘性。
这里的解决方案是在客户端保存所有这些信息(使用cookie),而不是依赖服务器端会话。因此,您可以使用Python / Django来实现它。使用客户端方法可以提供最佳性能,并且应该是最容易实现的。
请记住,此解决方案对于中间人攻击具有相当大的安全风险,除非您使用SSL / TSL(使用HTTPS)加密连接,因为所有客户端数据都存储在Cookie中这可能是截获的。