2017-05-17 5 views
0

상황은 :Chrome에서 Origin HTTP 헤더를 보내지 못하게하려면 어떻게해야하나요?

  1. I 프로덕션 웹 서버를 가지고,의 허용 기원의 제한된와 상시 관측소로 구성 https://example.com을 가정 해 봅시다. 이 세트에는 로컬 호스트가 포함되지 않습니다.
  2. localhost에서 개발자는 개발 중에도 AJAX를 통해 프로덕션 웹 서버를 호출하는 데 필요한 페이지/모듈/것을 개발합니다. 이를 위해 Chrome은 CLI 인수 인 --disable-web-security --user-data-dir = chromeNoCors를 사용하여 Chrome을 실행하므로 Chrome이 Origin 헤더없이 AJAX를 전송합니다.
  3. 문제는 헤더없이 GET 요청 만 전송된다는 것입니다. POST 요청에는 여전히 헤더가 포함되어 있으므로 프로덕션 서버는 헤더 값 (http://localhost:5678)을 허용 된 출처 세트와 비교하고 요청 된 리소스에 대한 액세스를 금지합니다.

질문 : 어떻게 원천 HTTP 헤더를 보내지 못하게 할 수 있습니까?

"localhost"(또는 개발자가/etc/hosts에 추가해야하는 특정 호스트)를 프로덕션 서버에서 허용 된 출처 집합으로 허용하여이 상황을 해결할 수있는 해결 방법이 있음을 알고 있지만 가능하다면 이것을하지 않는 것이 좋습니다.

+0

"를 수정할 수 있습니다 https://chrome.google.com/webstore/detail/requestly-redirect-url-mo/mdnleldcmiljblolnjhpnblkcekpdkpa

이 확장을 시도 크롬을 사용하는 경우, 개발자는 생산 웹을 호출해야 어떤 페이지/모듈/개발 서버를 통해 AJAX (심지어 개발 중에) "- 당신이 일을까지 dev에 환경을 가지고 해킹하려고하는 것처럼 들리 네요. 대신 * that * 문제를 해결해야합니다. – Quentin

답변

1

너희들은 로컬 호스트에 즉시 요청, 심지어 헤더

+0

감사합니다.이 기능은 매우 훌륭하게 작동하며 설치가 간단하여 필요한 항목이므로 답변으로 받아 들일 것입니다. 일반적으로 프록시를 사용하는 것이 더 강력한 방법입니다. – mareolan

+0

@Lorenzo 요청 개발자는 여기에 있습니다. 요청에 따라 Firefox에서도 작동합니다. Checkout http://www.requestly.in – sachinjain024

0

간단하게 "프록시 서버"(짧은 node.js 또는 python 스크립트로 충분)를 설치하는 것이 좋습니다. 이 서버가 모든 요청을 원격 API 서버로 전달하도록하지만 헤더의 원본에 대한 정보를 삭제하십시오. 이는 단순한 정규 표현식의 문제입니다.

이것은 다른 서버로 이식 할 수있는 간단한 솔루션입니다. AJAX 측에서는 테스트 호스트 서버의 로컬 호스트 또는 IP로 호스트 이름을 변경하기 만하면됩니다.

+0

예, 사용 된 모든 URL이 내 통제하에 있으므로 역방향 프록시를 사용하면 localhost로 이동하도록 변경할 수 있습니다. 필자의 경우 프로덕션 웹 서버에서 사용 된 모듈 중 일부는 하드 코딩 된 URL을 사용하여 작동하지 않을 수 있습니다. – mareolan

+0

일반 (역방향이 아닌) 프록시를 사용하는 것은 실제로 솔루션이며 브라우저와 모바일 장치에서도 작동하지만 https로 인해 설치가 간단하지는 않습니다. 프록시는 MITM의 역할을하며 자체 서명 된 인증서가 있어야합니다.이 인증서는 신뢰할 수있는 것으로 설치되거나 개발자가 매회 예외를 수락해야합니다. 브라우저는 프록시를 사용하도록 구성되어야합니다. HSTS Key Pinning에 문제가있을 수 있습니다 (아마 너무 제거해야합니다). – mareolan

+0

첫째, afaik 로컬 프록시 서버는 HTTPS에 문제가 없습니다. 하지만 가장 중요한 점은 프록시 서버 URL에 대한 디버깅 프로세스를 위해 클라이언트 측 스크립트에서 대상 URL을 변경해야한다는 것입니다. 코드는 그렇게 할 수있을만큼 모듈화되어야합니다. 원격 서버에서 오는 임의의 하드 코딩 된 URL은 프록시 스크립트에 의해 변경 될 수 있습니다. –