Score:0

การปรับลดรุ่น IIS http/2 ที่ไม่ต้องการสำหรับคำขอ laminas-api-tools DELETE พร้อมรหัสสถานะ 204 (และสำหรับ DELETE เท่านั้น)

ธง br

เรากำลังประสบกับพฤติกรรมการปรับลดรุ่น http2-to-http1.1 ของ IIS 10 ที่เราไม่เข้าใจจริงๆ เราได้ติดตั้ง REST API (ส่วนหน้า: เชิงมุม, แบ็กเอนด์: php (โดยใช้ laminas-api-tools) สำหรับคำขอ GET, POST และ PUT ของเรา ทุกอย่างปกติดี อย่างไรก็ตาม เมื่อเราส่งคำขอ DELETE ที่ควรได้รับคำตอบ ตามรหัสสถานะ 204 สิ่งต่อไปนี้จะเกิดขึ้น:

  • สามารถดูคำขอได้ในบันทึก IIS ซึ่งมาทาง http/2 ซึ่งได้รับคำตอบจากสถานะ 204 และ win32 87 (ความหมาย: พารามิเตอร์ไม่ถูกต้อง)
  • ถัดไป คำขอเดิมสามารถเห็นได้อีกครั้งในบันทึก IIS คราวนี้ใช้ http/1.1 ตอบกลับด้วย 406 (ไม่ยอมรับ)
    2022-03-02 13:29:38 192.168.76.64 ลบ /myapplication/90/public/api/v1/elements/7 - 443 - 10.0.0.21 HTTP/2 Mozilla/5.0+(Macintosh;+Intel+Mac+OS +X+10_15_7)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/98.0.4758.109+Safari/537.36 https://my.server.de/myapplication/90/public/ui/elements 204 0 87 125
    2022-03-02 13:29:39 192.168.76.64 ลบ /myapplication/90/public/api/v1/elements/7 - 443 - 10.0.0.21 HTTP/1.1 Mozilla/5.0+(Macintosh;+Intel+Mac+OS +X+10_15_7)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/98.0.4758.109+Safari/537.36 https://my.server.de/myapplication/90/public/ui/elements 406 0 0 189
406 เกิดขึ้นเนื่องจากในคำขอแรก องค์ประกอบถูกลบจริง (ดังนั้นคำขอที่สองจึงล้มเหลวโดย "ไม่มีองค์ประกอบ")

ในเบราว์เซอร์ เราจะเห็นเฉพาะการตอบกลับครั้งที่สองเท่านั้น (406) คำขอ DELETE ที่ตามมาทั้งหมด (ไปยังองค์ประกอบอื่นๆ) ทำงานได้ดีจากที่นั่น (เนื่องจากเกิดขึ้นที่ http/1.1 สำหรับเซสชันเบราว์เซอร์ที่เหลือ) แม้ว่าองค์ประกอบจะถูกลบไปแล้วและการลบที่ตามมาจะทำงานได้อย่างไม่มีที่ติ พฤติกรรมนี้เป็นประสบการณ์ที่ไม่พึงประสงค์ของผู้ใช้

อย่างไรก็ตาม เราไม่สามารถทราบได้ว่าอะไรเป็นสาเหตุของการดาวน์เกรด http1.1 นี้ เอกสาร IIS พูดต่อไปนี้เท่านั้น (จาก https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis#when-is-http2-not-supported):

HTTP/2 ไม่รองรับเมื่อใด

ในบางกรณี ไม่สามารถใช้ HTTP/2 ร่วมกับอย่างอื่นได้ คุณสมบัติ. ในสถานการณ์เหล่านี้ Windows จะถอยกลับไปใช้ HTTP/1.1 และ ทำรายการต่อไป ซึ่งอาจเกี่ยวข้องกับการเจรจา HTTP/1.1 ในระหว่าง การจับมือหรือส่งรหัสข้อผิดพลาดไปยังไคลเอนต์ที่สั่ง เพื่อลองอีกครั้งผ่านการเชื่อมต่อ HTTP/1.1

  • HTTP/2 ไม่รองรับการรับรองความถูกต้องของ Windows (NTLM/Kerberos/Negotiate) ในกรณีนี้ IIS จะถอยกลับเป็น HTTP/1.1
  • ข้อความที่ชัดเจน - ตามที่กล่าวไว้ข้างต้น ปัจจุบัน IIS รองรับ HTTP/2 ผ่าน TLS เท่านั้น อีกครั้ง IIS จะถอยกลับเป็น HTTP/1.1
  • การควบคุมปริมาณแบนด์วิดท์ - IIS มีคุณสมบัติในการจำกัดแบนด์วิดท์ (ใน Inetmgr ให้เลือกไซต์ 'จำกัด ' ภายใต้การกำหนดค่าของการดำเนินการ บานหน้าต่าง). สิ่งนี้ใช้กับ HTTP/1.1 แต่ไม่ได้บังคับใช้กับ HTTP/2 (จะ ดำเนินการโดยไม่มีข้อผิดพลาดหรือจำกัดแบนด์วิธ)

อย่างไรก็ตาม เราไม่ได้ใช้การรับรองความถูกต้องของ windows (หากเป็นเช่นนั้น การเรียก API ใดๆ จะล้มเหลว ไม่ใช่แค่ DELETE) หรือการควบคุมปริมาณแบนด์วิดท์ นอกจากนี้ ฉันพบว่าไม่น่าเป็นไปได้อย่างมากที่หัวข้อ "ข้อความที่ชัดเจน" จะมีบทบาทสำหรับเรา เนื่องจากการสื่อสารใดๆ เกิดขึ้นผ่าน https/TLS

จึงต้องมีเหตุอื่น

เรายังวิเคราะห์การตอบสนองจากลามินา แต่ไม่สามารถหาคำอธิบายที่เป็นไปได้ - สิ่งที่เราพบคือการส่งรหัสสถานะที่แตกต่างจาก 204 ช่วยแก้ปัญหาได้จริง นั่นคือวิธีแก้ปัญหาปัจจุบันของเรา: ส่ง 200 แทน 204 เป็นรหัสตอบกลับ DELETE

อย่างไรก็ตาม เราคิดว่าน่าจะเป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับผู้ใช้ 204 แทน

แหล่งข้อมูลอื่น ๆ สำหรับการวิจัย ได้แก่ :

ใครสามารถช่วยเราในการทำความเข้าใจสิ่งที่อาจทำให้เกิดปัญหาที่นี่?

ขอบคุณมากล่วงหน้า Jan

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา