2017-09-26 5 views
0

app.example.com 한 도메인에 클라이언트가 있고 다른 하위 도메인에 api.example.com의 API 서버가 있습니다. 개발 모드에는 localhost:3000localhost:4000이 있습니다.다른 도메인에 HTTP 요청을 보낼 때 헤더의 쿠키가 손실됩니다.

Cookie 헤더가 포함 된 HTTP 요청을 보내려고합니다. 모든 것이 동일한 서버 및 도메인에있는 동안 이것은 정상적으로 작동했습니다. 그런 다음 코드를 변경하고 CORS를 추가하여 Axios HTTP 라이브러리에 withCredentials 속성을 포함 시켰습니다. 개발 모드에서는 작동하지만 쿠키는 요청으로 보내지 만, 프로덕션 환경에서는 이것이 중단됩니다. 모든 요청은 잘 작동하는 것 같습니다. OPTIONS 다음에 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, 
    }) 

enter image description here

post과 대답은 도메인간에 쿠키를 공유하는 것이 불가능하다고 말합니다. 이제 나는 매우 혼란 스럽다.

내 헤더에 쿠키를 사용하여 어떤 사용자가 어떤 요청을 보내는 지 검색합니다. 헤더에서 쿠키를 잃어 버리면 어떤 요청이 어떤 사용자 (로그인하지 않은 사용자)가 보낸 것인지 더 이상 추적 할 수 없으므로이 데이터를 더 이상 통계로 수집 할 수 없습니다.

내 응용 프로그램은 모 놀리 식 이었지만 렌더링 서버에서 API 서버를 분리해야했습니다. 서버가 다른 도메인을 사용하더라도 헤더의 쿠키를 읽을 수 있습니까?

답변

0

쿠키를 다른 도메인간에 공유하는 것은 보안 위험이 아닌 것으로 보이지만 문제는 하위 도메인간에 공유가 언급되었으며 쿠키를 설정하는 동안 domain 속성을 추가하여 가능하다는 것입니다.

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

참고이 값은 .

한편, 다른 도메인들 사이에서 쿠키 값을 전송하는 해결 방법은 쿠키 값을 사용자 정의 헤더를 보낼 것입니다 시작합니다.