Điểm:0

Yêu cầu PATCH trả về lỗi 404, POST và GET hoạt động

lá cờ sd

Tôi đang làm việc trên một ứng dụng web tương tác với API REST tùy chỉnh. Về cơ bản, đây là một bảng dữ liệu được cập nhật thông qua ứng dụng. Tôi đang cố gắng sử dụng cập nhật, nhưng Apache đang trả về lỗi 404 khi tôi gửi yêu cầu.

Điều kỳ lạ là các yêu cầu GET và POST tới cùng một URL hoạt động tốt. Tôi có thể thay đổi mã cho API REST như một cách giải quyết, nhưng theo hiểu biết của tôi thì PATCH còn hơn cả "Chính xác" về cách chúng tôi đang sử dụng yêu cầu trong API.

Một số chi tiết:

  • Có vẻ như Apache đang chặn yêu cầu trước khi truy cập API REST tùy chỉnh. Tôi có thể thấy cả yêu cầu PATCH và GET trong nhật ký truy cập Apache, nhưng chỉ yêu cầu GET xuất hiện trong nhật ký API REST tùy chỉnh (FWIW, API REST tùy chỉnh được triển khai trong Bình giữ nhiệt) sử dụng cây súng như một máy chủ lưu trữ.

    Ví dụ bản ghi nhật ký truy cập Apache:

    192.168.0.1 - không xác định [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 - quản trị viên [27/Aug/2021:18:23:43 +0000] "GET /admin-api/services/12872 HTTP/1.1" 200 988 "-" ...

  • Một điều tôi nhận thấy là yêu cầu PATCH đang thay thế tên người dùng bằng "không xác định". Điều này khiến tôi tin rằng có gì đó không ổn với CORS. Tôi tìm thấy một "tiêu đề" cấu hình bị thiếu TÙY CHỌN và PATCH nên tôi đã thêm chúng. Vẫn gặp sự cố tương tự. Dưới đây là cấu hình hiện tại của tùy chọn:

    Tiêu đề luôn đặt Access-Control-Allow-Methods "POST, GET, OPTIONS, PATCH"
    
  • Tôi không thấy yêu cầu TÙY CHỌN trước chuyến bay trong nhật ký Apache hoặc cửa sổ bảng điều khiển trình duyệt. Tôi đã thử với Google Chrome (92.0) và Firefox (91.0).

  • Các yêu cầu PATCH có tiêu đề "kiểm soát truy cập-cho phép-xuất xứ" được đặt thành "POST, GET, OPTIONS, PATCH"

  • Cấu hình proxy của Apache sử dụng ổ cắm Unix để ủy quyền cho Gunicorn:

    <Location /admin-api>
      ProxyPass unix:/run/admin-api.sock|http://127.0.0.1
    </Location>
    
  • Yêu cầu tìm nạp JavaScript: (apiUrlTôi là các biến được đặt trước đó trong hàm):

    hãy để resp = đang chờ tìm nạp(`${apiUrl}/services/${id}`, {
       thông tin đăng nhập: "bao gồm",
       phương pháp: "PATCH",
       tiêu đề: {
         "Loại nội dung": "application/json",
         Chấp nhận: "ứng dụng/json",
       },
       nội dung: JSON.opesify ({
         dữ liệu: { tối thiểu: 1, tối đa: 3 },
       }),
     });
    
  • Phiên bản Apache 2.4.6. tôi biết điều đó kỹ thuật Ổ cắm Unix đã được triển khai trong 2.4.7, nhưng tất cả các chức năng khác đều hoạt động. Tôi cũng đã thử chuyển sang các cổng "thông thường", nhưng tôi nhận được kết quả tương tự.

Michael Hampton avatar
lá cờ cz
Kiểm tra định tuyến và nhật ký của ứng dụng của bạn. Đây dường như là một vấn đề với ứng dụng, không phải máy chủ web.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.