2017-03-17 9 views
2

바리 : 오리진액세스 제어 - 최대 - 연령 헤더를 포함하는 CORS 프리 플라이트 응답을 브라우저가 어떻게 처리하는지 알고 싶습니다.CORS 프리 플라이트 응답에는 Vary : Origin 및 Access-Control-Max-Age가 포함됩니까?

이 문장은 여러 기원과 공유 할 자신을 수 있도록하고자하지만, "*"연습 에 액세스-Control-Allow-Origin :을 생성해야합니다 균일하게 반응하지 않는 https://www.w3.org/TR/cors/

자료에서입니다 헤더를 동적으로 허용하려는 모든 요청에 ​​대해 에 응답합니다. 결과적으로, 이러한 자원의 저자는 다름 보내야합니다 : 다시 사용할 경우 방지 정확하지 않을 수 있습니다 같은 응답의 캐싱를 원점 HTTP 헤더 또는 는 다른 적절한 제어 명령을 제공에서-기원

내가 을 이해하고이 문장에서

비바리 : 원산지은 브라우저 프리 플라이트 응답의 캐시를 방지 말할 것이다 (사례 수 있도록 기원에서 : * 사용되지 않음)

액세스 제어 - 최대 에이지 말할 것이다 브라우저 프리 플라이트 캐시합니다응답.

질문 :

  1. 인가 그것은 유효한 헤더 모두 프리 플라이트 응답 존재하는 경우?

  2. 응답에 헤더가 모두 포함 된 경우 브라우저가 프리 플라이트 응답을 처리하는 방법은 무엇입니까?

고마워요!

답변

2

사양 요구 사항 Vary: Origin에 따라 CORS-preflight cache의 동작에는 영향을주지 않습니다.

프리 플라이트 응답에 두 헤더가 모두 존재하면 유효합니까?

예 유효합니다. 그러나 Vary 헤더가 있으면 CORS-preflight 캐시에 영향을 미치지 않습니다. 응답이 완전히 Vary 헤더를 무시하고 단지 Access-Control-Max-Age 헤더의 값을 사용하는 브라우저에서의 상시 관측소 프리 플라이트 캐시

를 헤더가 모두 포함되어있는 경우

브라우저는 프리 플라이트 응답을 처리하는 방법. 이해의 나

비바리입니다 : 원산지 브라우저가 프리 플라이트 결과 페치 사양의 요구 사항을 말하는 게 아니에요

를 캐시하지 않습니다 말할 것이다.

CORS-preflight cache은 HTTP 사양의 요구 사항에서 다루는 일반 HTTP 캐시가 아닙니다. 그것은 행동이 독점적으로 페치 사양에 의해 정의 된 특별한 캐시입니다. 그리고 Fetch 스펙은 Vary 응답 헤더에 의해 영향을받는 CORS- 프리 플라이트 캐시의 동작에 대한 간접적 인 요구 사항을 명시하지 않습니다. 대신 the Fetch spec says just this

:

최대 사용 기간 헤더 목록의Access-Control-Max-Age응답 주어진 헤더 목록 값을 추출하는 결과하자.

최대 사용 기간을 설정하기 전에 Vary 헤더의 값을 컨설팅에 대해 아무 말도하지 않습니다

.

그리고 CORS - 프리 플라이트 캐시를 채울 여부를 결정할 때 어떻게 Vary을 사용/경우 사양이 명시 적으로 언급하지 않기 때문에, 다음 그것을하지 사용 Vary을 수행해야 할 때 브라우저를

.

브라우저에서 CORS-preflight 캐시를 처리 할 때 Vary을 사용한 경우 해당 브라우저는 CORS-preflight 캐시의 사양 요구 사항을 벗어납니다.

+0

Upvoted. w3 사이트는 Vary : Origin 헤더가 캐시를 막을 것이라고 말합니다. 좀 봐 주시겠습니까? 감사! – Loc

+0

https://www.w3.org/TR/cors/에서 인용 한 텍스트는 단지 규범적인 요구 사항에 대한 설명이 아닌 유익한 참고 사항이지만 CORS 프리 플라이트에 대해서는 아무 말도하지 않습니다. cache &는 CORS-preflight 캐시와 관련이있는 것은 아닙니다. 대신 "응답과 같은 캐싱을 방지합니다."라는 문맥에서 정상적인 HTTP 응답을 의미합니다. 'Vary' 헤더는 HTTP 사양에 의해 일반 HTTP 캐싱에 영향을주는 것으로 정의됩니다. 브라우저는 브라우저가 의존하는 모든 네트워크 스택에 구현되며, 핵심 브라우저 코드에서도 필요하지는 않습니다 – sideshowbarker