向其他域发送HTTP请求时,标头中的Cookie丢失
我在一个域向其他域发送HTTP请求时,标头中的Cookie丢失,http,cookies,cross-domain,Http,Cookies,Cross Domain,我在一个域app.example.com上托管了一个客户端,在另一个子域API.example.com上托管了一个API服务器。在开发模式中,有localhost:3000和localhost:4000 我正在尝试发送包含Cookie头的HTTP请求。当所有东西都在同一个服务器和域上时,这种方法工作得很好。然后我更改了代码,并在AxiosHTTP库中添加了CORS,其中还包括withCredentialsproperty。在开发模式下,cookie是在请求中发送的,但在生产模式下会中断。所有请求
app.example.com
上托管了一个客户端,在另一个子域API.example.com
上托管了一个API服务器。在开发模式中,有localhost:3000
和localhost:4000
我正在尝试发送包含Cookie
头的HTTP请求。当所有东西都在同一个服务器和域上时,这种方法工作得很好。然后我更改了代码,并在Axios
HTTP库中添加了CORS,其中还包括withCredentials
property。在开发模式下,cookie是在请求中发送的,但在生产模式下会中断。所有请求似乎都工作正常,选项
和后续的POST
请求都得到200
ish响应
这是我在API服务器上的CORS设置:
server.all('/*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', DEV ? 'http://localhost:3000' : 'https://example.com')
res.header('Access-Control-Allow-Headers', '')
res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
res.header('Access-Control-Allow-Credentials', 'true')
next()
})
这就是我的axios
请求的样子:
axios(`${API_URL}/someEndpoint`, {
method: 'post',
withCredentials: true,
data,
})
但是,我的请求不包括Cookie头:
然后我遇到了这个问题,答案是不可能在域之间共享cookies。现在我非常困惑
我在邮件头中使用cookies来检测哪个用户发送了哪个请求。如果我丢失了标头中的cookie,我将无法再跟踪哪个用户(未登录)发送了哪个请求,因此我无法再聚合这些数据进行统计
我的应用程序是monolith,但我必须将API服务器和渲染服务器分开。即使服务器使用不同的域,仍然可以读取标头中的cookie吗?看来,在不同域之间以这种方式共享cookie是不可能的~安全风险,但是在问题中也提到了在子域之间共享,这可以通过在设置cookie时添加
域
属性来实现
cookies.set('cookieName', 'cookieValue' , { path: '/', domain: DEV ? undefined : '.example.com' })
请注意,该值以
同时,在不同域之间发送cookie值的解决方法是发送带有cookie值的自定义头