개발 중인 플러그인에 HTTP 헤더 추가하기

상황:

플러그인을 개발 중이며 nginx를 리버스 프록시로 사용하여 rails:3000으로 요청을 전달하고 있습니다. 전체적으로 잘 동작하지만, CORS 오류 때문에 API에 접근하는 데 어려움을 겪고 있습니다. 이 오류는 우리가 모두 잘 알고 “사랑하는”(비꼬는 표현) 것이죠.

Access to XMLHttpRequest at 'blah blah blah' from origin 'foo bar bing' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

지금까지 nginx에 헤더를 추가하는 방법을 시도해 보았지만, 어떤 이유에서인지 Chrome에서 디버깅할 때 해당 헤더가 헤더 목록에 나타나지 않습니다.

또한 nginx를 사용하여 rails에서 nginx로 전달되는 proxy_headers를 수정하는 방법도 시도해 보았지만, 역시 효과가 없었습니다.

Chrome 확장 플러그인을 사용하여 헤더를 삽입하는 방법도 시도해 보았지만, CORS 테스트 사이트를 통해 브라우저의 CORS 설정을 확인했을 때 모든 것이 허용된 것으로 나타나는데도 불구하고 이 방법도 작동하지 않았습니다.

그 다음 rack-cors 지엄(gem)을 추가하는 방법을 시도해 보았지만, freeze 오류 때문에 config.middleware가 작동하지 않았습니다.

이 문제로 인해 개발이 지연되고 있으며, 벽에 부딪힌 것 같습니다. :frowning:

discourse의 설정 파일(또는 더 좋다면 플러그인 내부)에서 직접 이러한 헤더를 추가하여 개발 환경에서 테스트하고 전송하려는 다양한 HTTP 헤더를 보낼 수 있는 방법이 있을까요?

아니면, rack-cors 지엄을 작동시킬 수 있을까요? 가능하다면, 플러그인의 어디에 코드를 추가해야 할까요?

참고: RubyDoc.info: File: README – Documentation for rack-cors (0.4.0) – RubyDoc.info

앞서 언급했듯이, 지금까지 시도해 본 많은 것들과 rubydocs에 나와 있는 모든 방법은 "여기서는 일어나지 않는다"라는 동일한 결과를 낳았습니다.

일단 CORS 문제를 잊고 단일 HTTP 캐싱 헤더만 추가하는 방법도 시도해 보았지만, 제 경우에도 이는 실패로 끝났습니다.

모두가 이러한 CORS 관련 문제를 비웃을 것 같지만, 저 역시 그렇습니다. 하지만 개발 테스트 환경에서 제 테스트 헤더(CORS든 아니든)를 추가하는 방법을 공유해 주신다면 매우 감사하겠습니다.

감사합니다.

우리의 표준 CORS 지원과 cors_origins 사이트 설정이 작동하지 않는 이유가 있나요?

안녕하세요 @sam

CORS 지원이 내 환경에서 작동하지 않는 이유는 모르겠지만, wild-card 항목을 포함한 다양한 항목을 시도해 보았습니다. 제가 잘못하고 있는 건가요?

죄송합니다. 첫 게시물(OP)에서 이 부분을 언급했어야 했는데…

아마 이 ENV를 설정해야 하는 걸까요?

  if env['REQUEST_METHOD'] == ('OPTIONS') && env['HTTP_ACCESS_CONTROL_REQUEST_METHOD']
    return [200, Discourse::Cors.apply_headers(cors_origins, env, {}), []]
  end

ENV 변수를 설정해야 하나요? 그렇다면 어디에서 설정해야 할까요? 아마 제 실수인 것 같습니다.

감사합니다!

참고로, 플러그인 초기화 파일에 이렇게 설정했습니다:

Discourse.SiteSettings.discourse_enable_cors = true;
Discourse.SiteSettings.discourse_cors_origin = "*";

그리고 console.log로 확인해 보니 이 설정들은 정상으로 보입니다… 하지만 콘솔에는 여전히 무서운 ‘접근 거부’ 오류가 남아 있습니다 :frowning: