将HTTP请求发送到其他域

时间:2017-09-26 18:54:18

标签: http cors cross-domain axios

我在一个域app.example.com上托管了一个客户端,在其他子域api.example.com上托管了一个API服务器。在开发模式中,有localhost:3000localhost:4000

我正在尝试发送包含Cookie标头的HTTP请求。这工作得很好,而一切都在同一台服务器和域上。然后我更改了代码并在withCredentials HTTP库上添加了CORS,还包括Axios属性。在开发模式下它可以工作,cookie在请求中发送,但是在生产中它会中断。所有请求似乎都运行良好,OPTIONSPOST次请求获得200响应。

这是我在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标头:

enter image description here

然后我遇到了这个post并且答案说不可能在域之间共享cookie。现在我非常困惑。

我在标头中使用Cookie来检测哪个用户发送了哪个请求。如果我在标题中丢失了Cookie,我就无法再跟踪哪个(未登录)用户发送了哪个请求,因此我无法再将这些数据汇总到统计信息中。

我的应用程序是整体的,但我不得不将API服务器与渲染服务器分开。即使服务器使用不同的域,是否仍然可以读取标题中的cookie?

1 个答案:

答案 0 :(得分:0)

似乎在不同域之间以这种方式共享cookie是相当不可能的〜安全风险,但是有问题的是,还提到了子域之间的共享,并且可以通过在设置cookie时添加domain属性来实现。

cookies.set('cookieName', 'cookieValue' , { path: '/', domain: DEV ? undefined : '.example.com' })

请注意,值以.

开头

同时,在不同域之间发送cookie值的解决方法是发送带有cookie值的自定义标头。

相关问题