방문자가 버튼을 누릅니다. PHP 서버가 외부 API를 호출합니다. API가 보는 것은 서버의 나가는 연결 또는 그 연결에 구성된 프록시의 출구입니다. 방문자의 브라우저는 귀하의 사이트로 향하는 별도의 연결을 처리합니다.

방문자의 주소를 헤더에 복사해도 PHP 연결을 방문자의 네트워크로 옮길 수는 없습니다. 헤더는 이미 설정된 연결 위로 전송되는 데이터입니다. 목적지가 자체 애플리케이션 로직에서 신뢰하는 전달 헤더를 사용할 수는 있지만, 그것이 헤더 값을 연결의 출발지 주소로 바꾸지는 않습니다.

프록시가 연결을 받아들여야 한다

PHP cURL을 다른 머신을 거쳐 보내려면 그 머신이 요청을 운반할 권한이 있는 접근 가능한 프록시 서비스를 제공해야 합니다. PHP 프로세스가 거기에 연결할 수 있어야 합니다. 방문자의 일반적인 브라우저 세션은 귀하의 서버에 그런 범용 프록시 엔드포인트를 제공하지 않습니다.

libcurl의 프록시 옵션은 cURL이 연결할 서비스를 선택합니다. 임의의 브라우저에게 대신 요청을 시작하라고 요구할 수는 없습니다.

브라우저 요청은 다른 설계다

일부 API에서는 브라우저가 목적지를 직접 호출할 수 있습니다. 그러면 요청은 사용자의 네트워크 경로에 놓이고 사용자 자신의 프록시 구성에 따릅니다. 브라우저 클라이언트용으로 설계된 API도 필요합니다. 교차 출처 접근은 CORS를 따르며, 브라우저 코드로 보낸 자격 증명은 그 클라이언트가 사용할 수 있게 됩니다.

프록시 옵션을 고르기 전에 요청이 어디에 속하는지 정하세요. 서버 자격 증명은 서버에 두고, 서비스가 지원하면 문서화된 브라우저 통합을 사용하세요. 어느 설계도 서버 요청이 방문자의 네트워크 신원을 물려받게 하는 믿을 만한 지름길을 제공하지 않습니다.

관련 글