向其他域发送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值的自定义头