cors 에러

시하·2022년 5월 3일
0

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

일반 cors에러는 응답헤더에

header("Access-Control-Allow-Origin: *");

이처럼 허용하는 origin을 추가해주면 되는데 이후에 또 위같은 에러가날때

ajax는 다른도메인에 api요청을 할때 다른도메인일 경우에만 preflight요청을 사전에 날리는데 이때 제대로된 header값을 못받아서 에러가 난다

header("Access-Control-Allow-Headers: *");

위 헤더값을 세팅한후(옵션중 Content-Type처럼 하나만 넣어도되기도 하고 Authorization처럼 안되는것도 있어서 *로처리함)

아래처럼 preflight요청일때 분기하여 전체 flow를 타지않고 리턴해주면된다

if ($_SERVER["REQUEST_METHOD"] === "OPTIONS") {
  return 0; // require 등으로 불러와진 파일에서는 return으로 종료가 안되므로 die()를 써준다
}

웹호스팅 사용시(ex php)

Access-Control-Allow-Origin를 잘 설정했음에도 불구하고
프론트에서 fetch등으로 요청을 보낼때 동일하게 allow-orogin을 받지못하며 cors에러가 나는경우가 있는데
브라우저가 localhost가 아니라 127.0.0.1 이거나 내부ip를통해서 브라우저를 열었을때
fetch에서 allow-origin을 정상적으로 받는 경우가 있다
아마도 웹서버쪽 앞단의 프록시서버나 아파치 설정에서 레퍼러헤더에 localhost가 있을경우
그냥 리턴하는게 아닐까 의심된다...

profile
물을 많이마시자

0개의 댓글