
저는 사용자 정의 REST API와 상호 작용하는 웹 애플리케이션을 개발 중입니다. 기본적으로 애플리케이션을 통해 업데이트되는 데이터 테이블입니다. 나는반점방법을 사용했지만 요청을 보낼 때 Apache가 404 오류를 반환합니다.
이상한 점은 동일한 URL에 대한 GET 및 POST 요청이 제대로 작동한다는 것입니다. 해결 방법으로 REST API의 코드를 변경할 수 있지만 PATCH가 더 많은 것으로 이해됩니다."옳은" API에서 요청을 사용하는 방법에 대해 알아보세요.
일부 세부정보:
Apache가 사용자 정의 REST API에 도달하기 전에 요청을 차단하는 것으로 보입니다. Apache 액세스 로그에서 PATCH 및 GET 요청을 모두 볼 수 있지만 사용자 지정 REST API 로그에는 GET 요청만 나타납니다(FWIW, 사용자 지정 REST API는 다음에서 구현됨).플라스크) 사용군니콘호스팅 서버로.
Apache 액세스 로그 레코드 예시:
192.168.0.1 - 알 수 없음 [27/Aug/2021:18:23:27 +0000] "PATCH /admin-api/services/12872 HTTP/1.1" 404 14 "https://www.example.com/admin-dashboard /" ...
192.168.0.1 - adminuser [27/Aug/2021:18:23:43 +0000] "GET /admin-api/services/12872 HTTP/1.1" 200 988 "-" ...
내가 알아차린 한 가지는 PATCH 요청이 사용자 이름을 "알 수 없음"으로 대체한다는 것입니다. 이로 인해 CORS에 문제가 있다고 믿게 되었습니다. 나는 "를 찾았습니다.머리글" 구성에 OPTIONS 및 PATCH가 누락되어 추가했습니다. 여전히 동일한 문제가 나타납니다. 다음은 옵션의 현재 구성입니다.
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, PATCH"
Apache 로그 또는 브라우저 콘솔 창에 실행 전 OPTIONS 요청이 표시되지 않습니다. Google Chrome(92.0) 및 Firefox(91.0)를 사용해 보았습니다.
PATCH 요청에는 "access-control-allow-origin" 헤더가 "POST, GET, OPTIONS, PATCH"로 설정되어 있습니다.
Apache 프록시 구성은 Unix 소켓을 사용하여 Gunicorn으로 프록시합니다.
<Location /admin-api> ProxyPass unix:/run/admin-api.sock|http://127.0.0.1 </Location>
JavaScript 가져오기 요청: (
apiUrl
및id
함수의 앞부분에 설정된 변수입니다):let resp = await fetch(`${apiUrl}/services/${id}`, { credentials: "include", method: "PATCH", headers: { "Content-Type": "application/json", Accept: "application/json", }, body: JSON.stringify({ data: { min: 1, max: 3 }, }), });
아파치 버전 2.4.6. 나는 그것을 안다기술적으로Unix 소켓은 다음에서 구현되었습니다.2.4.7, 그러나 다른 모든 기능은 작동합니다. 또한 "일반" 포트로 전환해 보았으나 동일한 결과를 얻었습니다.