คำขอข้ามโดเมนใน Dart ฝั่งเซิร์ฟเวอร์

ฉันเขียนสคริปต์จำนวนมากด้วยจาวาสคริปต์และต้องการเปลี่ยนไปใช้โผหรืออย่างน้อยก็เริ่มใช้งาน ฉันมีคำถามหนึ่งข้อ: ฉันรู้ว่า js ไม่รองรับคำขอ x-domain ในเบราว์เซอร์ แต่สิ่งที่เกี่ยวกับการเรียกใช้แอปพลิเคชัน/สคริปต์ dart จากเซิร์ฟเวอร์ มันยังคงเหมือนเดิมหรือไม่ สิ่งนี้สามารถทำได้เหรอ?

โดยพื้นฐานแล้ว เนื่องจากฉันไม่สามารถเข้าถึงเว็บเซิร์ฟเวอร์ที่ฉันค้นหาได้ ความสามารถข้ามโดเมนจึงมีความจำเป็นอย่างยิ่ง


person Tar At Work    schedule 21.03.2013    source แหล่งที่มา


คำตอบ (3)


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

สิ่งนี้เป็นไปได้ด้วย Dart ไม่มีข้อจำกัดข้ามแหล่งกำเนิดในกรณีนี้

ดูคลาส HttpClient หรือคุณสามารถใช้แพ็คเกจ http://pub.dartlang.org/packages/http บน pub

ฉันแนะนำให้ใช้แพ็คเกจ http เนื่องจากมีอินเทอร์เฟซระดับสูงที่เรียบง่ายกว่า

นี่คือตัวอย่างการใช้แพ็คเกจ http:

import 'dart:io';
import 'package:http/http.dart' as http;

main() {
    http.read("http://google.com").then((content) {
        print(content);
    });
}

คุณจะต้องอัปเดตไฟล์ pubspec.yaml เพื่อเพิ่มการอ้างอิงต่อไปนี้:

name: Http Example
   dependencies:
     http: any
     pathos: any

(จริงๆ แล้ว คุณควรรวม http เท่านั้น แต่ฉันคิดว่าแพ็คเกจ http ไม่มีการพึ่งพาสิ่งที่น่าสมเพชในไฟล์ pubspec.yaml)

ฉันไม่พบเอกสารที่สวยงามสำหรับ http แต่มีความคิดเห็นเกี่ยวกับเอกสารบางส่วนใน ไฟล์ต้นฉบับ

person Greg Lowe    schedule 21.03.2013
comment
ฉันได้เพิ่มตัวอย่าง หากเหมาะกับคุณ โปรดทำเครื่องหมายคำถามว่าตอบแล้ว ;) - person Greg Lowe; 24.03.2013

การรักษาความปลอดภัยข้ามโดเมนมีอยู่ในเบราว์เซอร์ ดังนั้นจึงไม่ใช่คุณสมบัติของ Dart หรือ JavaScript

มีประโยชน์สำหรับการทดสอบ: คุณสามารถส่งแฟล็กไปยัง Chrome ซึ่งจะปิดการใช้งานคุณสมบัติความปลอดภัยนี้ ดูที่นี่: http://joshuamcginnis.com/2011/02/28/how-to-disable-same-origin-policy-in-chrome/

หากคุณต้องการส่งคำขอ GET คุณสามารถใช้การทำงานร่วมกันของ Dart JavaScript ได้ ดูหัวข้อนี้ในบทความนี้: http://www.dartlang.org/articles/json-web-service/#note-on-cors

ในทางกลับกัน หากคุณต้องการส่งคำขอ POST คุณจะประสบปัญหา เว้นแต่เซิร์ฟเวอร์เป้าหมายรองรับ CORS รายละเอียดเพิ่มเติมที่นี่: https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

แก้ไข: วิธีการที่ถูกต้องคือให้โค้ดฝั่งไคลเอ็นต์ของคุณสื่อสารกับเซิร์ฟเวอร์ที่คุณเป็นเจ้าของ และให้เซิร์ฟเวอร์นั้นสื่อสารกับเซิร์ฟเวอร์บุคคลที่สาม

person Chris Buckett    schedule 21.03.2013
comment
โดยพื้นฐานแล้วโผนั้นเป็นจาวาสคริปต์ที่น่ารังเกียจและไม่มีประโยชน์ในบริบทของฉันใช่ไหม ฉันไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์ ดังนั้นฉันจึงไม่สามารถเปลี่ยนส่วนหัวหรือทำ CORS ได้ - person Tar At Work; 22.03.2013
comment
ทั้ง Dart และ JavaScript เมื่อทำงานในเบราว์เซอร์ (ซึ่งต่างจาก VM แบบสแตนด์อโลน ฝั่งเซิร์ฟเวอร์) จะอยู่ภายใต้ข้อจำกัดด้านความปลอดภัยเดียวกันกับที่กำหนดโดยเบราว์เซอร์ (เพื่อความปลอดภัยของคุณเอง) มิฉะนั้น อะไรจะหยุดบางคนที่ใช้ Dart เพื่อเขียนสคริปต์ที่เป็นอันตรายแทน JS ได้ ตามที่ระบุไว้ในคำตอบอื่น วิธีที่ถูกต้องคือให้โค้ดฝั่งไคลเอ็นต์ของคุณสื่อสารกับเซิร์ฟเวอร์ที่คุณเป็นเจ้าของ และให้เซิร์ฟเวอร์นั้นสื่อสารกับเซิร์ฟเวอร์บุคคลที่สาม - person Chris Buckett; 22.03.2013

คุณสามารถเปิดใช้งานคำขอข้ามต้นทางบนเซิร์ฟเวอร์ได้โดยการตั้งค่าส่วนหัว Access-Control-Allow-Origin บนการตอบสนอง http ค่าจะเป็น * เพื่ออนุญาตให้ต้นทางเข้าถึงทรัพยากรได้ แต่จะปลอดภัยกว่าแน่นอนหากระบุต้นทางที่ถูกต้อง

person w.brian    schedule 21.03.2013