- CORS (Cross-Origin Resource Sharing)
- กลไกความปลอดภัยของเบราว์เซอร์ที่กำหนดโดย W3C ช่วยให้เซิร์ฟเวอร์ประกาศว่า origin ใดมีสิทธิ์เข้าถึงทรัพยากรใด โดยเพิ่มชุดส่วนหัวการตอบสนองที่ขึ้นต้นด้วย Access-Control- ในระดับโปรโตคอล HTTP
- นโยบายต้นทางเดียวกัน (Same-Origin Policy)
- กลไกความปลอดภัยหลักประการหนึ่งของเบราว์เซอร์ ห้าม JavaScript ส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ต้นทางอื่นตามค่าเริ่มต้น ป้องกันไม่ให้ไซต์ที่เป็นอันตรายอ่านข้อมูลละเอียดอ่อนจากเว็บไซต์อื่น
- คำขอ Preflight (Preflight Request)
- ก่อนส่งคำขอข้ามโดเมนที่อาจมีผลกับข้อมูลเซิร์ฟเวอร์ เบราว์เซอร์จะส่งคำขอ OPTIONS ล่วงหน้าเพื่อสอบถามเซิร์ฟเวอร์ เซิร์ฟเวอร์ต้องตอบกลับด้วยส่วนหัว CORS ที่ถูกต้อง มิฉะนั้นเบราว์เซอร์จะไม่ส่งคำขอจริง
- คำขออย่างง่าย (Simple Request)
- คำขอที่ตรงตามเงื่อนไขทั้งหมด: วิธีคือ GET/HEAD/POST, Content-Type เป็น text/plain/multipart/form-data/application/x-www-form-urlencoded เท่านั้น ไม่มีส่วนหัวคำขอที่กำหนดเอง จะถูกส่งโดยตรงโดยไม่ส่ง OPTIONS preflight
- Access-Control-Allow-Origin (ACAO)
- ส่วนหัว CORS ที่สำคัญที่สุด ระบุ origin ที่ได้รับอนุญาตให้เข้าถึงทรัพยากร ค่าอาจเป็น * หรือ origin ที่ระบุ เมื่อส่ง credentials ไม่สามารถใช้ * ได้
- Access-Control-Allow-Methods (ACAM)
- ส่วนหัวตอบสนอง preflight ระบุวิธี HTTP ทั้งหมดที่เซิร์ฟเวอร์รองรับ คั่นด้วยจุลภาค ต้องระบุทุกวิธีที่ใช้
- Access-Control-Allow-Headers (ACAH)
- ส่วนหัวตอบสนอง preflight ระบุส่วนหัวคำขอทั้งหมดที่อนุญาต เมื่อคำขอมีส่วนหัวที่กำหนดเองต้องประกาศที่นี่
- Access-Control-Allow-Credentials (ACAC)
- ระบุว่าอนุญาตให้ส่ง credentials ในการขอข้ามโดเมนหรือไม่ ค่าต้องเป็น true ตัวพิมพ์เล็ก
- Access-Control-Max-Age (ACMA)
- ระบุเวลาที่ผลลัพธ์ preflight สามารถแคชได้ (หน่วยวินาที) ลดคำขอ OPTIONS ซ้ำที่ไม่จำเป็น
- Vary: Origin
- ส่วนหัวตอบสนองที่บอก CDN/reverse proxy ว่าส่วนหัว Origin ส่งผลต่อเนื้อหาการตอบสนอง จำเป็นต้องมีเมื่อส่งคืน Allow-Origin แบบไดนามิก
- ส่วนหัวคำขอที่ CORS อนุญาต (CORS-safelisted request headers)
- ส่วนหัวพื้นฐานที่ CORS อนุญาตโดยไม่ต้องประกาศใน Allow-Headers ได้แก่ Accept, Accept-Language, Content-Language, Content-Type (เฉพาะบางประเภท)
- ชื่อส่วนหัวที่ห้าม (Forbidden header name)
- ส่วนหัวที่เบราว์เซอร์ห้ามไม่ให้ JavaScript ตั้งค่าเองได้ เช่น Host, Connection, Cookie, Origin เป็นต้น ถูกควบคุมโดยเบราว์เซอร์เอง
- คำขอส่ง Credentials (Credentialed Request)
- คำขอข้ามโดเมนที่ส่งข้อมูลรับรองตัวตน เช่น withCredentials=true หรือ credentials: 'include' จะนำ Cookie และส่วนหัว Authorization ไปด้วย
- Access-Control-Expose-Headers
- ระบุส่วนหัวการตอบสนองที่อนุญาตให้ JavaScript อ่านได้ นอกเหนือจากส่วนหัวพื้นฐานที่เปิดเผยตามค่าเริ่มต้น
- วิธี OPTIONS
- วิธี HTTP ที่ใช้สอบถามความสามารถของเซิร์ฟเวอร์ ใน CORS เบราว์เซอร์ใช้วิธีนี้ส่ง preflight request อัตโนมัติ
- ส่วนหัว Origin
- ส่วนหัวคำขอที่เบราว์เซอร์เพิ่มอัตโนมัติ ระบุ origin ของหน้าเว็บที่ส่งคำขอ เซิร์ฟเวอร์ใช้ค่านี้ตัดสินใจอนุญาตหรือไม่
- แอตทริบิวต์ crossorigin
- แอตทริบิวต์ HTML ที่ระบุวิธีจัดการคำขอข้ามโดเมนเมื่อโหลดทรัพยากร จำเป็นเมื่อใช้ Canvas จัดการรูปภาพข้ามโดเมน
- โหมดคำขอ no-cors
- โหมดพิเศษของ fetch API ส่งได้เฉพาะ simple request และ JavaScript ไม่สามารถอ่านการตอบสนองได้ (opaque response)