mashups ทำงานร่วมกับนโยบายเดียวกันได้อย่างไร


11

หาก Javascript ได้รับอนุญาตให้เข้าถึงสคริปต์จากโดเมนเดียวกันเว็บไซต์จะสร้างข้อมูลผสมที่ต้องอ่านและแก้ไขเนื้อหาจากโดเมนอื่นได้อย่างไร

คำตอบ:


7

โซลูชันข้ามเบราว์เซอร์

JSONP

หาก API ที่คุณพยายามเข้าถึงรองรับJSONPคุณจะต้องระบุชื่อฟังก์ชั่นจาวาสคริปต์ในคำขอของคุณจากนั้น JSONP จะส่งคืนจาวาสคริปต์myfunc({the:data});ที่คุณสามารถใช้งานได้เหมือนจาวาสคริปต์ปกติซึ่งเป็นเหตุผลที่คุณจะสร้าง<script src="www.website.com/somecall?jsonp=myfunc">แท็กใหม่"ส่งคำขอ" (jQuery ทำสิ่งนี้โดยอัตโนมัติหากคุณใช้type: jsonpใน$.ajaxคำขอ)

ข้อเสียคือต้องการผู้ให้บริการของ API เพื่อสนับสนุน JSONP

แฟลช

Flash สามารถเข้าถึงเนื้อหาข้ามโดเมนได้ตราบใดที่เว็บไซต์เป้าหมายมีcrossdomain.xmlไฟล์ที่รูทซึ่งระบุว่าอนุญาตให้ทำได้ซึ่งโดยปกติจะเป็นกรณีบนเซิร์ฟเวอร์ที่ให้บริการ API)

ข้อเสียคือต้องใช้ Flash ในเบราว์เซอร์ของผู้ใช้และเว็บไซต์ที่คุณได้รับข้อมูลจะต้องมี crossdomain.xml ที่อนุญาตการร้องขอข้ามโดเมน

สคริปต์ฝั่งเซิร์ฟเวอร์บนชื่อโดเมนเดียวกัน

ภาษาฝั่งเซิร์ฟเวอร์เช่น PHP ไม่มีข้อ จำกัด โดเมน BS เดียวกันดังนั้นคุณสามารถมีสคริปต์ที่ทำหน้าที่เป็นพร็อกซี (เช่นดาวน์โหลดผ่านหนึ่งในส่วนขยาย http เช่น cURL)

สิทธิประโยชน์เพิ่มเติมคือคุณสามารถล้างข้อมูล (หรือแม้กระทั่งผสมหลายแหล่งที่มา) บนเซิร์ฟเวอร์ก่อนที่จะส่งต่อไปยังหน้าเว็บ / จาวาสคริปต์ของคุณดังนั้นคุณสามารถแยกเฉพาะส่วนที่มีประโยชน์ของข้อมูลซึ่งเป็นสิ่งที่ดีเมื่อทำเว็บมือถือ แบนด์วิธอาจมีปัญหา

ข้อเสียคือคำขอทั้งหมดต้องผ่านเซิร์ฟเวอร์ของคุณเพื่อเพิ่มภาระให้กับเซิร์ฟเวอร์ของคุณ

อย่างไรก็ตามข้อดีคือมันจะทำงานร่วมกับ ressource ใด ๆ เนื่องจากไม่ต้องการเป้าหมายเพื่อสนับสนุน crossdomain หรือ jsonp ดังนั้นหากไม่มีสิ่งใดทำงานได้


โซลูชั่นเฉพาะสำหรับเบราว์เซอร์บางตัว

Internet Explorer

Internet Explorer มีคำขอข้ามโดเมน

Firefox

Firefox 3.5+ มีมาตรฐานการแบ่งปันข้ามจุดกำเนิดแต่ต้องการแหล่งข้อมูลที่คุณพยายามเข้าถึงเพื่อรวมส่วนหัวพิเศษเช่นใน PHP:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

เบราว์เซอร์หลักอื่น ๆ บางตัวรองรับสิ่งนี้เช่นกันดังนั้นหากคุณไม่จำเป็นต้องสนับสนุนเบราว์เซอร์เก่าและหากคุณสามารถรับ ressources ที่คุณพยายามเข้าถึงเพื่อส่งส่วนหัวเหล่านี้นี่อาจเป็นทางออกที่ดีที่สุดของคุณมิฉะนั้นฝั่งเซิร์ฟเวอร์ สคริปต์จะเป็นคำแนะนำของฉัน


Firefox มีการตั้งค่าผู้ใช้capability.policy.default.XMLHttpRequest.openแต่ฉันจะไม่นับการเปลี่ยนการตั้งค่าในเบราว์เซอร์ของผู้ใช้


0

คุณสามารถใช้ API (ของโดเมนอื่น) ได้ Javascript ของคุณจะเรียกไฟล์ PHP (หรือไฟล์สคริปต์อื่น ๆ ) ที่อยู่บนเว็บเซิร์ฟเวอร์ของคุณ (โดเมนของคุณ) ซึ่งจะเรียก API (ของโดเมนอื่นที่ใช้ CURL) และรับการตอบกลับจากคุณ


คำตอบนี้ไม่จำเป็นต้องเฉพาะเจาะจงเกี่ยวกับเทคโนโลยีที่ใช้บนเซิร์ฟเวอร์
funkybro

@funkybro ใช่มันเป็นเพียงเฉพาะตัวอย่างเช่น ... ไม่มีอะไร ...
Harish Kurup
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.