ปัญหาเกี่ยวกับการแบ่งปันทรัพยากรข้ามแหล่งกำเนิด: ทั้ง OSX Safari และ iOS Safari ล้มเหลวหลังจากการร้องขอล่วงหน้า

เมื่อเร็ว ๆ นี้ฉันประสบปัญหากับคำขอ CORS (Cross Origin Resource Sharing) บน Safari ทั้ง OSX และ iOS ในขณะที่คำขอเดียวกันนั้นทำงานได้อย่างสมบูรณ์บน Chrome และ Firefox ฉันปฏิบัติตามเอกสารประกอบของ W3C และจัดการคำขอ preflight ทางฝั่งเซิร์ฟเวอร์ การตอบสนองของฉันเป็นดังนี้:

HTTP/1.0 200 OK
Access-Control-Allow-Origin: http://192.168.1.96:4399
Access-Control-Allow-Methods: POST
Access-Control-Allow-Methods: GET
Access-Control-Allow-Methods: OPTIONS
Access-Control-Allow-Headers: Origin
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Headers: Accept
Access-Control-Allow-Headers: Access-Control-Request-Method
Access-Control-Allow-Headers: Access-Control-Request-Headers
Access-Control-Allow-Headers: DNT
Access-Control-Allow-Headers: X-CustomHeader
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 0
Date: Fri, 25 Nov 2016 08:45:25 GMT
Origin: http://192.168.1.96:4399
Access-Control-Expose-Headers: Origin
Content-Encoding: gzip
Transfer-Encoding: chunked

การตอบสนองดังกล่าวทำงานได้ดีบนเบราว์เซอร์ Chrome, Firefox และ Android: คำขอ POST จะถูกส่งทันทีหลังจากคำขอ preflight แต่ใน Safari หลังจากที่เซิร์ฟเวอร์ตอบกลับคำขอ reflight ฉันได้รับข้อความแสดงข้อผิดพลาดจากคอนโซล:

Failed to load resource: The network connection was lost.

ฉันตรวจสอบการตอบสนองของ preflight จากเซิร์ฟเวอร์ แต่พบว่าเหมือนกับด้านบน... หลังจากค้นหาและลองหลายครั้ง แต่ก็ยังไม่สามารถทำงานได้ :-(
มีใครเคยเจอปัญหามาก่อนบ้างไหม มีใครทราบบ้างไหมว่าฉันได้ทำผิดพลาดอะไร
ขอบคุณมากล่วงหน้า!


person BenMiracle    schedule 25.11.2016    source แหล่งที่มา
comment
ดูเหมือนคุณเป็นข้อบกพร่องใน Safari ที่คุณสามารถรายงานได้ที่ bugs.webkit.org   -  person sideshowbarker    schedule 26.11.2016
comment
@sideshowbarker ขอบคุณมากครับ แต่ที่น่าสนใจและบางครั้งฉันพบว่ามันใช้งานได้เมื่อฉันเลือกตัวเลือกปิดการใช้งานข้อ จำกัด ข้ามต้นกำเนิดจากเมนูพัฒนาบน OSX Safari! ฉันสงสัยว่าปัญหานี้อาจเกี่ยวข้องกับนโยบายความปลอดภัยของเบราว์เซอร์ และฉันจะพยายามแก้ไขปัญหาต่อไป   -  person BenMiracle    schedule 28.11.2016
comment
ฉันคิดว่าเป็นเรื่องปกติที่เมื่อคุณปิดการใช้งานข้อจำกัดสำหรับ Cross Origin คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์เป้าหมายได้โดยไม่มีปัญหาใดๆ และมันก็ไม่น่าสนใจเลยเพราะเบราว์เซอร์ตั้งใจใช้ข้อจำกัดสำหรับการแบ่งปันทรัพยากรข้ามแหล่งกำเนิดเพื่อปรับปรุงความปลอดภัยของเรา ใช่แล้ว ปัญหาเกี่ยวข้องกับเบราว์เซอร์อย่างแน่นอน   -  person haͣrͬukaͣreͤrͬu    schedule 22.04.2019


คำตอบ (1)


มันคือทั้งหมดที่เกี่ยวกับ Safari เพิ่ม origin ในส่วนหัวคำขอ OPTIONS Access-Control-Request-Headers

ดังนั้นเพื่อแก้ไขคุณควรเปิดใช้งานส่วนหัวนี้ใน Access-Control-Allow-Headers เพื่อตอบสนอง

PS: ดูคำถามที่คล้ายกัน คำขอ CORS ไม่ทำงานใน Safari

person brutto    schedule 08.12.2016
comment
OP เห็นว่าคำขอ preflight ล้มเหลวในระดับเครือข่าย สิ่งที่คุณอ้างถึงคือการตอบกลับ OPTIONS ที่กำหนดค่าไม่ถูกต้อง แต่เขาไม่เคยได้รับคำตอบนั้นตั้งแต่แรกเลย - person RavenHursT; 12.09.2017
comment
@RavenHursT ไม่ brutto กำลังพูดถึงส่วนหัวคำขอที่มีรูปแบบไม่ถูกต้อง ดังนั้นนี่คือคำตอบที่ถูกต้อง (ฉันเพิ่งตรวจสอบแล้วและมันก็ใช้กลอุบายสำหรับฉัน) - person thomaux; 16.11.2017