การตอบสนองแบบทึบคืออะไรและมีจุดประสงค์อะไร


172

ฉันพยายามfetchURL ของเว็บไซต์เก่าและเกิดข้อผิดพลาด:

Fetch API cannot load http://xyz.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://abc' is therefore not allowed access.
If an opaque response serves your needs, set the request's mode to 'no-cors'
to fetch the resource with CORS disabled.

ฉันเข้าใจข้อความและพยายามทำคำขอที่ส่งคืนการตอบกลับที่ทึบแสง:

fetch("http://xyz", {'mode': 'no-cors'})

ตกลงตอนนี้มันใช้งานได้ ... แต่ฉันอ่านไม่ออก = \

อะไรคือจุดประสงค์ของการตอบกลับแบบทึบ

คำตอบ:


149

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

นี่คือสิ่งที่{ mode: 'no-cors' }ถูกสร้างขึ้นมาเพื่อ


2
แต่Status codeเป็นเสมอ0วิธีการตรวจสอบว่ามันประสบความสำเร็จถ้าstatus is never 200?
Angshuman Agarwal

3
คุณไม่สามารถ. มันเป็นส่วนหนึ่งของกล่องดำ
ซัลวา

67

JavaScript ไม่สามารถเข้าถึงการตอบกลับที่ทึบได้ แต่คุณยังสามารถแคชด้วยCache APIและตอบกลับด้วยfetchตัวจัดการเหตุการณ์ในพนักงานบริการ ดังนั้นมันจึงมีประโยชน์สำหรับการทำให้แอปของคุณออฟไลน์รวมถึงแหล่งข้อมูลที่คุณไม่สามารถควบคุมได้ (เช่นแหล่งข้อมูลบน CDN ที่ไม่ได้ตั้งค่าส่วนหัว CORS)


1

นอกจากนี้ยังมีโซลูชันสำหรับแอป Node JS CORS Anywhere เป็นพร็อกซี NodeJS ซึ่งเพิ่มส่วนหัว CORS ลงในคำขอพร็อกซี

URL ไปยังพร็อกซีนั้นมาจากพา ธ ที่ผ่านการตรวจสอบและพร็อกซีอย่างแท้จริง ส่วนโปรโตคอลของ URI ที่พร็อกซีเป็นตัวเลือกและเป็นค่าเริ่มต้นที่ "http" หากระบุพอร์ต 443 โปรโตคอลจะมีค่าเริ่มต้นเป็น "https"

แพ็คเกจนี้ไม่มีข้อ จำกัด ใด ๆ เกี่ยวกับวิธีการ http หรือส่วนหัวยกเว้นคุกกี้ การร้องขอข้อมูลรับรองผู้ใช้ไม่ได้รับอนุญาต แอพสามารถกำหนดค่าให้ต้องใช้ส่วนหัวสำหรับการร้องขอคำขอตัวอย่างเช่นเพื่อหลีกเลี่ยงการเยี่ยมชมโดยตรงจากเบราว์เซอร์ https://robwu.nl/cors-anywhere.html


-2

จาวาสคริปต์นั้นค่อนข้างยากหากได้รับคำตอบฉันจะแก้ไขมันโดยรับ api จากแบ็กเอนด์จากนั้นโทรไปที่ส่วนหน้า

public function get_typechange () {

    $ url = "https://........";
    $ json = file_get_contents ($url);
    $ data = json_decode ($ json, true);
    $ resp = json_encode ($data);
    $ error = json_last_error_msg ();
    return $ resp;

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