Một phản ứng mờ đục là gì, và nó phục vụ mục đích gì?


172

Tôi đã thử fetchURL của một trang web cũ và đã xảy ra lỗi:

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.

Tôi hiểu thông điệp và cố gắng thực hiện một yêu cầu trả về phản hồi mờ:

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

Ok, bây giờ nó hoạt động ... nhưng tôi không thể đọc nó. = \

Mục đích sau đó của một phản ứng mờ đục là gì?

Câu trả lời:


149

Hãy xem xét trường hợp trong đó một nhân viên dịch vụ hoạt động như một bộ đệm bất khả tri. Mục tiêu duy nhất của bạn là phục vụ cùng các tài nguyên mà bạn sẽ nhận được từ mạng, nhưng nhanh hơn. Tất nhiên, bạn không thể đảm bảo tất cả các tài nguyên sẽ là một phần của nguồn gốc của bạn (ví dụ, xem xét các thư viện được phục vụ từ CDN). Vì nhân viên dịch vụ có khả năng thay đổi các phản hồi mạng, bạn cần đảm bảo rằng bạn không quan tâm đến nội dung của phản hồi, cũng như các tiêu đề của nó, thậm chí cả kết quả. Bạn chỉ quan tâm đến phản hồi dưới dạng hộp đen để có thể lưu trữ bộ đệm và phục vụ nó nhanh hơn.

Đây là những gì { mode: 'no-cors' }đã được thực hiện cho.


2
Nhưng Status codeluôn luôn là 0, làm thế nào để kiểm tra nếu nó đã thành công nếu status is never 200?
Angshuman Agarwal

3
Bạn không thể. Nó là một phần của hộp đen .
Salva

67

Các phản hồi mờ không thể được truy cập bằng JavaScript, nhưng bạn vẫn có thể lưu trữ chúng bằng API Cache và phản hồi với chúng trong fetchtrình xử lý sự kiện trong một nhân viên dịch vụ. Vì vậy, chúng hữu ích để làm cho ứng dụng của bạn ngoại tuyến, cũng cho các tài nguyên mà bạn không thể kiểm soát (ví dụ: tài nguyên trên CDN không đặt tiêu đề CORS).


1

Ngoài ra còn có giải pháp cho ứng dụng Node JS. CORS Anywhere là proxy NodeJS có thêm tiêu đề CORS vào yêu cầu ủy quyền.

Url đến proxy theo nghĩa đen được lấy từ đường dẫn, được xác thực và ủy quyền. Phần giao thức của URI ủy quyền là tùy chọn và mặc định là "http". Nếu cổng 443 được chỉ định, giao thức mặc định là "https".

Gói này không đặt bất kỳ hạn chế nào đối với các phương thức hoặc tiêu đề http, ngoại trừ cookie. Yêu cầu thông tin người dùng không được phép. Ứng dụng có thể được cấu hình để yêu cầu một tiêu đề để ủy quyền một yêu cầu, ví dụ để tránh truy cập trực tiếp từ trình duyệt. https://robwu.nl/cors-anywhere.html


-2

javascript hơi khó để nhận được câu trả lời, tôi đã sửa nó bằng cách lấy api từ phần phụ trợ và sau đó gọi nó đến frontend.

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;

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.