PATCH 요청은 404, POST 및 GET 작업을 반환합니다.

PATCH 요청은 404, POST 및 GET 작업을 반환합니다.

저는 사용자 정의 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 가져오기 요청: ( apiUrlid함수의 앞부분에 설정된 변수입니다):

    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, 그러나 다른 모든 기능은 작동합니다. 또한 "일반" 포트로 전환해 보았으나 동일한 결과를 얻었습니다.

관련 정보