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 VÁ 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: (apiUrl
và Tô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ự.