如何设置从服务器发送到不同端口上的客户端的cookie
How set cookie sent from server to a client on a different port
我有一个后端服务器(由 Rails 提供支持),其 API 由 HTML5 前端使用,运行 在 Node 简单开发服务器上。
两者都在同一台主机上:我的机器。
当我从前端登录到后端时,rails 向我发送了会话 cookie。我可以在响应头中看到它,问题是浏览器不保存它。
政策是正确的,如果我直接从 rails 应用程序提供相同的前端,cookie 设置正确。
我能看到的唯一区别是,当前端 运行 在节点服务器上时,它 运行 在端口 8080
上, rails 在端口上3000
。我知道 cookie 不应该是特定于端口的,所以我错过了这里发生的事情。
有什么想法吗?解决方案?
(我需要能够以这种方式保持设置,以便让前端从 Node 提供服务,而后端在 rails 上在不同的端口上提供服务)
你是对的,cookie 是端口不可知的,浏览器将向 myapp.local:3000 发送与 myapp.local:8080 相同的 cookie-- 除了不通过XMLHttpRequest (XHR, a.k.a., AJAX) 在执行 cross-site 请求 (CORS) 时。
解决方案: 通过在任何 XMLHttpRequest object。参见:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
或者如果使用 Fetch API,请设置选项 credentials: 'include'
。参见:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
备选方案: 由于您在问题中标记了 webpack-dev-server,您可能有兴趣通过代理请求 Rails API webpack-dev-server 首先避免任何 CORS 问题。这是在您的 weback.config:
中完成的
proxy: {
'/some/path': {
target: 'https://other-server.example.com',
secure: false
}
}
参见:https://webpack.js.org/configuration/dev-server/#devserverproxy
我有一个后端服务器(由 Rails 提供支持),其 API 由 HTML5 前端使用,运行 在 Node 简单开发服务器上。
两者都在同一台主机上:我的机器。
当我从前端登录到后端时,rails 向我发送了会话 cookie。我可以在响应头中看到它,问题是浏览器不保存它。
政策是正确的,如果我直接从 rails 应用程序提供相同的前端,cookie 设置正确。
我能看到的唯一区别是,当前端 运行 在节点服务器上时,它 运行 在端口 8080
上, rails 在端口上3000
。我知道 cookie 不应该是特定于端口的,所以我错过了这里发生的事情。
有什么想法吗?解决方案?
(我需要能够以这种方式保持设置,以便让前端从 Node 提供服务,而后端在 rails 上在不同的端口上提供服务)
你是对的,cookie 是端口不可知的,浏览器将向 myapp.local:3000 发送与 myapp.local:8080 相同的 cookie-- 除了不通过XMLHttpRequest (XHR, a.k.a., AJAX) 在执行 cross-site 请求 (CORS) 时。
解决方案: 通过在任何 XMLHttpRequest object。参见:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
或者如果使用 Fetch API,请设置选项 credentials: 'include'
。参见:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
备选方案: 由于您在问题中标记了 webpack-dev-server,您可能有兴趣通过代理请求 Rails API webpack-dev-server 首先避免任何 CORS 问题。这是在您的 weback.config:
中完成的proxy: {
'/some/path': {
target: 'https://other-server.example.com',
secure: false
}
}
参见:https://webpack.js.org/configuration/dev-server/#devserverproxy