AJAX ข้ามโดเมน (CORS/JSONP)
ทำความเข้าใจและประยุกต์ใช้เทคนิคการส่งคำขอ AJAX ข้ามโดเมนโดยใช้ JSONP หรือกำหนดค่าส่วนหัว CORS บนเซิร์ฟเวอร์เพื่อแลกเปลี่ยนข้อมูลอย่างปลอดภัย
AJAX ข้ามโดเมน (CORS/JSONP) เป็นบทเรียน jQuery Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน jQuery Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส jQuery Academy มีบทเรียนทั้งหมด 3 บทเรียน
AJAX ข้ามโดเมน: ความท้าทาย
เมื่อเว็บไซต์ของคุณพยายามดึงข้อมูลจากเว็บไซต์อื่น จะเรียกว่าคำขอ AJAX ข้ามโดเมน ซึ่งมักจัดการได้ค่อนข้างยาก
โดยค่าเริ่มต้น เบราว์เซอร์จะมีกฎด้านความปลอดภัยที่ป้องกันไม่ให้หน้าเว็บส่งคำขอไปยังโดเมนอื่นนอกเหนือจากโดเมนต้นทาง กฎนี้ช่วยปกป้องข้อมูลของคุณ
ทำความเข้าใจนโยบายแหล่งกำเนิดเดียวกัน
กฎด้านความปลอดภัยที่กล่าวถึงนี้เรียกว่านโยบายแหล่งกำเนิดเดียวกัน (SOP) ซึ่งเป็นคุณลักษณะด้านความปลอดภัยพื้นฐานของเบราว์เซอร์
SOP กำหนดว่าเบราว์เซอร์จะอนุญาตให้สคริปต์ในหน้าเว็บแรกเข้าถึงข้อมูลในหน้าเว็บที่สองได้ก็ต่อเมื่อหน้าเว็บทั้งสองมีแหล่งกำเนิดเดียวกัน (โดเมน โปรโตคอล และพอร์ต)
- ตัวอย่าง: หน้าเว็บจาก
mywebsite.comไม่สามารถดึงข้อมูลจากapi.anotherdomain.comได้โดยตรง
CORS: โซลูชันสมัยใหม่
เพื่ออนุญาตคำขอข้ามโดเมนอย่างปลอดภัย ชุมชนเว็บจึงพัฒนาการแบ่งปันทรัพยากรข้ามแหล่งกำเนิด (CORS) ซึ่งเป็นวิธีมาตรฐานสมัยใหม่สำหรับจัดการเรื่องนี้
CORS ทำงานโดยให้เซิร์ฟเวอร์ระบุอย่างชัดเจนแก่เบราว์เซอร์ว่าโดเมนอื่นใดบ้างที่สามารถเข้าถึงทรัพยากรของเซิร์ฟเวอร์ได้
CORS: การกำหนดค่าฝั่งเซิร์ฟเวอร์
CORS จะกำหนดค่าหลักบนเซิร์ฟเวอร์ที่ให้ข้อมูล เซิร์ฟเวอร์จะส่งส่วนหัว HTTP พิเศษในการตอบกลับ เพื่อระบุว่าแหล่งกำเนิดใดได้รับอนุญาต
ส่วนหัวสำคัญคือ Access-Control-Allow-Origin ซึ่งระบุว่าโดเมนใดสามารถเข้าถึงทรัพยากรได้
Access-Control-Allow-Origin: *(อนุญาตทุกโดเมน)Access-Control-Allow-Origin: https://yourdomain.com(อนุญาตเฉพาะโดเมนที่ระบุ)
CORS: คำขอฝั่งไคลเอ็นต์ด้วย jQuery
ในฝั่งไคลเอ็นต์ (โดยใช้ jQuery) การส่งคำขอ CORS มักไม่แตกต่างจากคำขอ AJAX ทั่วไป หากเซิร์ฟเวอร์กำหนดค่าไว้อย่างถูกต้อง
jQuery จัดการการสื่อสารระดับเบราว์เซอร์ให้ คุณเพียงระบุ URL ข้ามโดเมนในคำเรียกใช้ $.ajax()
$.ajax({
url: "https://api.example.com/data", // Server must allow CORS
method: "GET",
success: function(data) {
console.log("CORS success:", data);
},
error: function(jqXHR, textStatus, errorThrown) {
console.error("CORS Error:", textStatus, errorThrown);
}
});CORS: คำขอก่อนตรวจสอบ (OPTIONS)
สำหรับคำขอ CORS บางประเภทที่มีความ "ซับซ้อน" เบราว์เซอร์จะส่งคำขอก่อนตรวจสอบก่อนส่งคำขอจริง ซึ่งเป็นขั้นตอนรักษาความปลอดภัยเพิ่มเติม
คำขอก่อนตรวจสอบใช้เมธอด HTTP OPTIONS เพื่อขออนุญาตจากเซิร์ฟเวอร์ หากเซิร์ฟเวอร์อนุญาต เบราว์เซอร์จึงจะส่งคำขอจริง (เช่น PUT, DELETE หรือคำขอที่มีส่วนหัวกำหนดเอง)
JSONP: ทางเลือกแบบเก่า
ก่อนที่ CORS จะถูกนำมาใช้อย่างแพร่หลาย JSONP (JSON with Padding) เป็นวิธีแก้ปัญหาชั่วคราวที่ใช้กันทั่วไปสำหรับคำขอข้ามโดเมน โดยเฉพาะในเบราว์เซอร์หรือ API รุ่นเก่า
JSONP หลีกเลี่ยงนโยบายแหล่งกำเนิดเดียวกันด้วยการใช้ความสามารถของเบราว์เซอร์ในการโหลดแท็ก <script> จากโดเมนใดก็ได้อย่างสร้างสรรค์
JSONP: กลไกการทำงาน
JSONP ทำงานดังนี้:
- คุณสร้างแท็ก
<script>แบบไดนามิก และกำหนดค่าsrcเป็น URL ข้ามโดเมน - เซิร์ฟเวอร์ซึ่งคาดว่าจะได้รับคำขอ JSONP จะห่อข้อมูล JSON ไว้ในการเรียกใช้ฟังก์ชัน (ส่วนที่เรียกว่า 'padding')
- เบราว์เซอร์จะทำงานตามสคริปต์นี้ โดยเรียกใช้ฟังก์ชันที่กำหนดไว้ทั่วทั้งหน้าเว็บพร้อมส่งข้อมูลเป็นอาร์กิวเมนต์
JSONP: การใช้งานด้วย jQuery
jQuery ช่วยให้การใช้งาน JSONP ง่ายขึ้นอย่างมาก คุณเพียงระบุ dataType: "jsonp" ในคำเรียกใช้ $.ajax()
jQuery จะจัดการสร้างแท็ก <script> แบบไดนามิก สร้างชื่อฟังก์ชันเรียกกลับที่ไม่ซ้ำกัน และเรียกใช้ฟังก์ชันดังกล่าวเมื่อได้รับการตอบกลับโดยอัตโนมัติ
$.ajax({
url: "https://api.example.com/jsonp-data?callback=?", // Server must support JSONP
dataType: "jsonp",
success: function(data) {
console.log("JSONP success:", data);
},
error: function(jqXHR, textStatus, errorThrown) {
console.error("JSONP Error:", textStatus, errorThrown);
}
});CORS กับ JSONP: ความแตกต่างสำคัญ
แม้ทั้งสองจะใช้แก้ปัญหาการข้ามโดเมน แต่ CORS และ JSONP ก็มีลักษณะแตกต่างกัน:
- CORS: มาตรฐานสมัยใหม่ ใช้ส่วนหัว HTTP มีความปลอดภัย รองรับเมธอด HTTP ทั้งหมด และต้องกำหนดค่าฝั่งเซิร์ฟเวอร์
- JSONP: วิธีแก้ปัญหาชั่วคราวแบบเก่า ใช้แท็ก
<script>มีความปลอดภัยน้อยกว่า รองรับเฉพาะคำขอ GET เป็นเทคนิคฝั่งไคลเอ็นต์ และต้องให้เซิร์ฟเวอร์ห่อการตอบกลับ
ตรวจสอบอย่างรวดเร็ว: การข้ามโดเมน
ข้อความใดต่อไปนี้เป็น TRUE เกี่ยวกับคำขอ AJAX ข้ามโดเมน
ทบทวน: เชี่ยวชาญ AJAX ข้ามโดเมน
คุณได้เรียนรู้วิธีหลีกเลี่ยงนโยบายแหล่งกำเนิดเดียวกันสำหรับคำขอ AJAX ข้ามโดเมนแล้ว
- CORS เป็นมาตรฐานสมัยใหม่ที่ปลอดภัย โดยอาศัยส่วนหัว HTTP ฝั่งเซิร์ฟเวอร์เพื่อกำหนดสิทธิ์
- JSONP เป็นวิธีแก้ปัญหาชั่วคราวแบบเก่าที่ปลอดภัยน้อยกว่า สำหรับคำขอ GET โดยใช้แท็ก
<script>แบบไดนามิก
ควรเลือกใช้ CORS whenever possible เนื่องจากมีความปลอดภัยและยืดหยุ่นกว่า ส่วน JSONP เหมาะเป็นหลักสำหรับระบบเก่าหรือสถานการณ์เฉพาะ
เรียนรู้ JavaScript ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 22
- บทเรียน
- 48
คำถามที่พบบ่อย
บทเรียน “AJAX ข้ามโดเมน (CORS/JSONP)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “AJAX ข้ามโดเมน (CORS/JSONP)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส jQuery Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส jQuery Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “AJAX ข้ามโดเมน (CORS/JSONP)”
ทำความเข้าใจและประยุกต์ใช้เทคนิคการส่งคำขอ AJAX ข้ามโดเมนโดยใช้ JSONP หรือกำหนดค่าส่วนหัว CORS บนเซิร์ฟเวอร์เพื่อแลกเปลี่ยนข้อมูลอย่างปลอดภัย คุณปฏิบัติ jQuery Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน jQuery Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน jQuery Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “AJAX ข้ามโดเมน (CORS/JSONP)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน jQuery Academy นี้ได้ไหม
ได้ บทเรียน jQuery Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดค่าคำขอ AJAX อย่างมีประสิทธิภาพ
- การจัดการข้อผิดพลาดและความสำเร็จของ AJAX
- AJAX ข้ามโดเมน (CORS/JSONP)