우리는 우리의 사이트에 잘 알려진 CORS의 오류가 표시됩니다프리 플라이트 요청을 할 때 Access-Control-Allow-Origin CORS 헤더가 필요합니까?
은 XMLHttpRequest https://my-site.com/api를로드 할 수 없습니다. 'Access-Control-Allow-Origin'헤더가 요청 된 리소스에 없습니다. 따라서 원점 'https://my-other-site.com'은 액세스 할 수 없습니다.
것은이의 Access-Control-Allow-Origin
는
OPTIONS https://my-site.com/api HTTP/1.1 Host: my-site.com Access-Control-Request-Method: POST Origin: https://my-other-site.com Access-Control-Request-Headers: my-custom-header, accept, content-type Accept: */* Referer: https://my-other-site.com/ ...other stuff... HTTP/1.1 200 OK Access-Control-Allow-Origin: https://my-other-site.com Access-Control-Allow-Methods: POST Access-Control-Allow-Headers: my-custom-header, accept, content-type Access-Control-Expose-Headers: my-custom-header ...other stuff...
... 그러나, 이후의 요청에 하지 세트입니다 ... 프리 플라이트 요청에 올바르게 설정입니다.
POST https://my-site.com/api HTTP/1.1
Host: my-site.com
Accept: */*
My-Custom-Header: abcd123
Origin: https://my-other-site.com
Referer: https://my-other-site.com/
...other stuff...
HTTP/1.1 200 OK
My-Custom-Header: abcd123
...other stuff...
나는이 문제를 이해하지 못한다. 에 따르면 모든 것 온라인으로 읽었습니다. 프리 플라이트 요청을 사용하는 경우 실제 요청에 CORS 헤더를 추가 할 필요가 없습니다. 그러나 분명히 그렇지 않습니다.
모든 예제 here 및 here는 실제 응답에 Access-Control-Allow-Origin
헤더를 포함하지만 다른 "필요" CORS 헤더 중 하나를 포함하지 않는다. 실제 응답에 하나의 헤더를 추가하면 오류가 사라집니다. 그래서 제 질문은, 실제로 모두 요청에 필요한 Access-Control-Allow-Origin
헤더는
이다? 어디에 명시되어 있습니까? 왜 그게 사실입니까?
* ""실제 요청 "은 프리 플라이트에 관계없이 CORS 헤더를 확인하면서 동일한 동작을 따릅니다. * - 예외는 사실이 아닌 것으로 보입니다. 실제 요구는'Access-Control-Allow-Methods' 또는'Access-Control-Allow-Headers' 헤더없이 올바르게 동작합니다. 그러나 * (지금 방금 발견 했음) *,'Access-Control-Expose-Headers' 헤더는 프리 플라이트와 실제 요청 모두에 필요합니다. WTF !? –