การแบ่งปันทรัพยากรแบบข้ามต้นทาง (CORS) เป็นกลไกที่ใช้ส่วนหัว HTTP เพิ่มเติมเพื่อบอกเบราว์เซอร์เพื่อให้เว็บแอปพลิเคชันทำงานที่ต้นทางเดียว เข้าถึงทรัพยากรที่เลือกจากต้นทางอื่น เว็บแอปพลิเคชันดำเนินการคำขอ HTTP ข้ามต้นทางเมื่อร้องขอทรัพยากรที่มีแหล่งกำเนิดที่แตกต่างกัน (โดเมน โปรโตคอล หรือพอร์ต) จากตัวมันเอง
ตัวอย่างเช่น ให้เราพิจารณาแอปพลิเคชันที่มีส่วนหน้า (UI) และส่วนหลัง (บริการ) สมมติว่า front-end ให้บริการจาก https://demodomain-ui.com และแบ็กเอนด์ให้บริการจาก https://demodomain-service.com/api หากผู้ใช้พยายามเข้าถึงแอปพลิเคชัน ด้วยเหตุผลด้านความปลอดภัย เบราว์เซอร์จะจำกัดคำขอ HTTP ข้ามต้นทางที่เริ่มต้นจาก UI
ในการเอาชนะสิ่งนี้ จำเป็นต้องมีมาตรฐาน CORS เนื่องจากช่วยให้เซิร์ฟเวอร์ระบุได้ไม่เพียงแค่ว่าใครสามารถเข้าถึงสินทรัพย์ของตนได้ แต่ยังรวมถึงวิธีที่สินทรัพย์สามารถเข้าถึงได้ด้วย คำขอข้ามต้นทางถูกสร้างขึ้นโดยใช้วิธีการขอ HTTP มาตรฐาน เซิร์ฟเวอร์ส่วนใหญ่จะอนุญาตคำขอ GET ซึ่งหมายความว่าพวกเขาจะอนุญาตให้แหล่งข้อมูลจากภายนอก (เช่นหน้าเว็บ) อ่านเนื้อหาของพวกเขา วิธีการร้องขอ HTTP เช่น PATCH, PUT หรือ DELETE ต่อไปนี้เป็นส่วนหัว HTTP ที่เพิ่มโดย CORSstandard -
-
Access-Control-Allow-Origin
-
Access-Control-Allow-Credentials
-
Access-Control-Allow-Headers
-
Access-Control-Allow-Methods
-
Access-Control-Expose-Headers
-
การเข้าถึง-การควบคุม-อายุสูงสุด
-
การเข้าถึง-การควบคุม-คำขอ-ส่วนหัว
-
การเข้าถึง-การควบคุม-คำขอ-วิธีการ
-
ที่มา
เปิดใช้งาน CORS ในระดับโลก −
อย่างแรกคือการติดตั้ง Microsoft.AspNet.WebApi.Cors จากตัวจัดการแพ็คเกจ Nuget
จากนั้นเปิดไฟล์ App_Start/WebApiConfig.cs เพิ่มรหัสต่อไปนี้ในวิธี WebApiConfig.Register -
เปิดใช้งาน CORS ที่ระดับตัวควบคุมและการดำเนินการ −
นอกจากนี้เรายังสามารถเปิดใช้งาน CORS ที่ระดับตัวควบคุมหรือวิธีการดำเนินการดังด้านล่าง
ตัวอย่าง
using System.Web.Http; using System.Web.Http.Cors; namespace DemoWebApplication.Controllers{ [EnableCors("*", "*", "*")] //Controller level public class DemoController : ApiController{ [EnableCors("*", "*", "*")] //Action level public IHttpActionResult Get(int id){ return Ok(); } } }
ในทำนองเดียวกัน เราสามารถปิดการใช้งาน cors โดยใช้แอตทริบิวต์ [DisableCors]