2016-10-21 30 views
5

Tôi muốn sử dụng API tìm nạp để lấy toàn bộ tài liệu HMTL từ URL.Tại sao tìm nạp trả về phản hồi với trạng thái = 0?

let config = { 
method: 'GET', 
headers: { 
    'Content-Type': 'application/json', 
    'Accept': 'text/html', 
    'Accept-Language': 'zh-CN', 
    'Cache-Control': 'no-cache' 
}, 
mode: 'no-cors'}; 

fetch('http://www.baidu.com', config).then((res)=> { 
console.log(res);}).then((text)=> {}); 

chạy mã bằng chrome, Nó kích hoạt yêu cầu và trả về html trong mạng chrome. nhưng lấy lại res:

enter image description here

Tại sao tình trạng là gì và làm thế nào tôi có thể nhận được res đúng như những gì trong newwork chrome?

+0

Trạng thái 0 phụ thuộc vào thư viện, thư viện nào là hàm 'fetch' từ? – tcooc

+0

'fetch' là một hàm gốc (hiện tại). – Brian

Trả lời

5

Trên no-cors phần của config.mode:

không CORS - Ngăn chặn phương pháp này không bị bất cứ điều gì khác hơn là HEAD, GET hoặc POST. Nếu bất kỳ ServiceWorkers nào chặn các yêu cầu này, họ có thể không thêm hoặc ghi đè bất kỳ tiêu đề nào ngoại trừ các tiêu đề này. Ngoài ra, JavaScript không thể truy cập bất kỳ thuộc tính nào của Phản hồi kết quả. Điều này đảm bảo rằng ServiceWorkers không ảnh hưởng đến ngữ nghĩa của Web và ngăn ngừa các vấn đề bảo mật và riêng tư phát sinh từ rò rỉ dữ liệu trên các tên miền.

có hiệu quả, đáp ứng bạn nhận được từ thực hiện một yêu cầu như vậy (với no-cors quy định như một chế độ) sẽ không chứa thông tin về việc yêu cầu thành công hay thất bại, làm cho mã trạng thái 0. Loại bỏ mode từ fetch cuộc gọi của bạn sẽ cho thấy thực tế CORS đã thất bại.

Để tìm hiểu ý nghĩa của 0 trong trường hợp cụ thể của bạn, hãy tham khảo các câu trả lời khác của SO.

+0

Thx, nếu tôi xóa 'no-cors': – pingfengafei

+1

Thx, nếu tôi xóa 'no-cors': Phản hồi yêu cầu preflight không vượt qua kiểm soát kiểm soát truy cập: Không có tiêu đề 'Access-Control-Allow-Origin' trên tài nguyên được yêu cầu. Do đó, gốc 'http: // localhost: 8888' không được phép truy cập. Nếu phản hồi mờ đáp ứng nhu cầu của bạn, hãy đặt chế độ yêu cầu thành 'no-cors' để tìm nạp tài nguyên có CORS bị vô hiệu hóa. làm thế nào để giải quyết các CORS? – pingfengafei

+0

Điều đó là chính xác. CORS là một tính năng an toàn của trình duyệt mà không thể vô hiệu hóa khỏi chính trang đó. Bạn phải liên hệ với baidu.com nếu bạn muốn yêu cầu các trang của họ từ trình duyệt của bạn. – Brian

0

Tôi không biết cách thực hiện điều này trong môi trường trình duyệt, nhưng tôi biết nó có sẵn cho fetch một cái gì đó từ trang web có nguồn gốc chéo trong Nút.

require('es6-promise').polyfill(); 
require('isomorphic-fetch'); 
fetch('https://www.baidu.com', { 
    mode: 'no-cors' 
}) 
    .then((res) => { 
    console.log(res.status); //=> 200 
    }); 

Vì vậy, bạn có thể sử dụng một máy chủ Node để fetch những gì bạn muốn và sau đó respond để khách hàng của bạn.

Tôi cũng muốn fetch điều gì đó từ một số trang web trong trình duyệt, điều này dường như là không thể. Có lẽ nó là thực sự không thể làm điều này, bởi vì Internet cần phải bảo vệ những trang web mà từ đó chúng tôi muốn nhận được tài nguyên.

Các vấn đề liên quan