ฉันกำลังทำงานกับเว็บแอปพลิเคชันที่โต้ตอบกับ REST API ที่กำหนดเอง โดยทั่วไปจะเป็นตารางข้อมูลที่อัปเดตผ่านแอปพลิเคชัน ฉันกำลังพยายามใช้ ปะ วิธีการสำหรับการอัปเดต แต่ Apache ส่งคืนข้อผิดพลาด 404 เมื่อฉันส่งคำขอ
สิ่งที่แปลกคือคำขอ GET และ POST ที่ส่งไปยัง URL เดียวกันนั้นใช้ได้ดี ฉันสามารถเปลี่ยนรหัสสำหรับ REST API เป็นวิธีแก้ปัญหาได้ แต่ความเข้าใจของฉันคือ PATCH นั้นมากกว่า "ถูกต้อง" สำหรับวิธีที่เราใช้คำขอใน API
รายละเอียดบางอย่าง:
ดูเหมือนว่า Apache กำลังบล็อกคำขอก่อนที่จะได้รับ REST API ที่กำหนดเอง ฉันเห็นทั้งคำขอ PATCH และ GET ในบันทึกการเข้าถึง Apache แต่เฉพาะคำขอ GET เท่านั้นที่ปรากฏในบันทึก REST API ที่กำหนดเอง (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 - ผู้ดูแลระบบ [27/ส.ค./2021:18:23:43 +0000] "GET /admin-api/services/12872 HTTP/1.1" 200 988 "-" ...
สิ่งหนึ่งที่ฉันสังเกตเห็นคือคำขอ PATCH กำลังแทนที่ชื่อผู้ใช้ด้วย "unknown" สิ่งนี้ทำให้ฉันเชื่อว่ามีบางอย่างผิดปกติกับ CORS ฉันพบ "หัวข้อ" การกำหนดค่าที่ไม่มี OPTIONS และ PATCH ดังนั้นฉันจึงเพิ่มเข้าไป แต่ก็ยังพบปัญหาเดิม ด้านล่างนี้คือการกำหนดค่าปัจจุบันของตัวเลือก:
ส่วนหัวตั้งค่า Access-Control-Allow-Methods เสมอ "POST, GET, OPTIONS, PATCH"
ฉันไม่เห็นคำขอ OPTIONS ก่อนการบินในบันทึก Apache หรือหน้าต่างคอนโซลเบราว์เซอร์ ฉันได้ลองกับ Google Chrome (92.0) และ Firefox (91.0) แล้ว
คำขอ PATCH มีส่วนหัว "การเข้าถึงการควบคุมอนุญาตต้นทาง" ที่ตั้งค่าเป็น "POST, GET, OPTIONS, PATCH"
การกำหนดค่าพร็อกซี Apache ใช้ซ็อกเก็ต Unix เพื่อพร็อกซีไปยัง Gunicorn:
<Location /admin-api>
ProxyPass unix:/run/admin-api.sock|http://127.0.0.1
</Location>
คำขอดึง JavaScript: (apiUrl
และ รหัส
เป็นตัวแปรที่ตั้งค่าก่อนหน้าในฟังก์ชัน):
ให้ resp = wait fetch(`${apiUrl}/services/${id}`, {
ข้อมูลรับรอง: "รวม",
วิธีการ: "PATCH",
ส่วนหัว: {
"ประเภทเนื้อหา": "แอปพลิเคชัน/json",
ยอมรับ: "application/json",
},
เนื้อความ: JSON.stringify({
ข้อมูล: { นาที: 1, สูงสุด: 3 },
}),
});
อาปาเช่ เวอร์ชั่น 2.4.6. ฉันรู้แล้ว ในทางเทคนิค ซ็อกเก็ต Unix ถูกนำมาใช้ใน 2.4.7แต่ฟังก์ชันอื่นๆ ใช้งานได้ทั้งหมด ฉันได้ลองเปลี่ยนไปใช้พอร์ต "ปกติ" แล้ว แต่ได้ผลลัพธ์เดียวกัน