Fetch API cung cấp giao diện JavaScript để truy cập và thao tác các phần của giao thức, chẳng hạn như yêu cầu và phản hồi. Nó cũng cung cấp một phương thức
fetch['//example.com', {
credentials: 'include'
}];
0 toàn cầu cung cấp một cách dễ dàng, hợp lý để tìm nạp tài nguyên không đồng bộ trên mạngLoại chức năng này trước đây đã đạt được bằng cách sử dụng
fetch['//example.com', {
credentials: 'include'
}];
1. Tìm nạp cung cấp giải pháp thay thế tốt hơn có thể dễ dàng sử dụng bởi các công nghệ khác như fetch['//example.com', {
credentials: 'include'
}];
2. Tìm nạp cũng cung cấp một vị trí hợp lý duy nhất để xác định các khái niệm liên quan đến HTTP khác như CORS và tiện ích mở rộng cho HTTPThông số kỹ thuật của
fetch['//example.com', {
credentials: 'include'
}];
3 khác với fetch['//example.com', {
credentials: 'include'
}];
4 theo những cách quan trọng sau- Lời hứa được trả về từ
0 sẽ không từ chối trạng thái lỗi HTTP ngay cả khi phản hồi là HTTP 404 hoặc 500. Thay vào đó, ngay sau khi máy chủ phản hồi với các tiêu đề, Lời hứa sẽ giải quyết bình thường [với thuộc tínhfetch['//example.com', { credentials: 'include' }];
6 của phản hồi được đặt thành false nếu phản hồi không nằm trong phạm vi 200–299] và nó sẽ chỉ từ chối khi lỗi mạng hoặcfetch['//example.com', { credentials: 'include' }];
- Trừ khi
0 được gọi với tùy chọnfetch['//example.com', { credentials: 'include' }];
8 được đặt thànhfetch['//example.com', { credentials: 'include' }];
9,fetch['//example.com', { credentials: 'include' }];
0fetch['//example.com', { credentials: 'include' }];
- sẽ không gửi cookie trong các yêu cầu có nguồn gốc chéo
- sẽ không đặt bất kỳ cookie nào được gửi lại trong các phản hồi trên nhiều nguồn gốc
- Kể từ tháng 8 năm 2018, chính sách thông tin đăng nhập mặc định đã thay đổi thành cùng nguồn gốc. Firefox cũng được sửa đổi trong phiên bản 61. 0b13]
Yêu cầu tìm nạp cơ bản thực sự đơn giản để thiết lập. Hãy xem đoạn mã sau
fetch['//example.com', {
credentials: 'include'
}];
1Ở đây chúng tôi đang tìm nạp một tệp JSON trên mạng và in nó ra bảng điều khiển. Cách sử dụng đơn giản nhất của
fetch['//example.com', {
credentials: 'include'
}];
0 nhận một đối số — đường dẫn đến tài nguyên bạn muốn tìm nạp — và không trực tiếp trả về nội dung phản hồi JSON mà thay vào đó trả về một lời hứa giải quyết bằng đối tượng fetch['//example.com', {
credentials: 'include'
}];
32Đổi lại, đối tượng
fetch['//example.com', {
credentials: 'include'
}];
32 không trực tiếp chứa nội dung phản hồi JSON thực tế mà thay vào đó là biểu diễn của toàn bộ phản hồi HTTP. Vì vậy, để trích xuất nội dung phần thân JSON từ đối tượng fetch['//example.com', {
credentials: 'include'
}];
32, chúng tôi sử dụng phương thức fetch['//example.com', {
credentials: 'include'
}];
35, phương thức này trả về một lời hứa thứ hai giải quyết bằng kết quả phân tích văn bản nội dung phản hồi dưới dạng JSONGhi chú. Xem phần Nội dung để biết các phương pháp tương tự để trích xuất các loại nội dung nội dung khác
Các yêu cầu tìm nạp được kiểm soát bởi chỉ thị
fetch['//example.com', {
credentials: 'include'
}];
36 của Chính sách bảo mật nội dung thay vì chỉ thị của các tài nguyên mà nó đang truy xuấtCung cấp tùy chọn yêu cầu
Phương thức
fetch['//example.com', {
credentials: 'include'
}];
0 có thể tùy chọn chấp nhận tham số thứ hai, đối tượng fetch['//example.com', {
credentials: 'include'
}];
38 cho phép bạn kiểm soát một số cài đặt khác nhauXem
fetch['//example.com', {
credentials: 'include'
}];
0 để biết các tùy chọn đầy đủ có sẵn và biết thêm chi tiếtfetch['//example.com', {
credentials: 'include'
}];
1Lưu ý rằng
fetch['//example.com', {
credentials: 'include'
}];
20 chỉ cho phép một bộ tiêu đề giới hạn trong yêu cầu
21fetch['//example.com', { credentials: 'include' }];
22fetch['//example.com', { credentials: 'include' }];
23fetch['//example.com', { credentials: 'include' }];
24 với giá trị làfetch['//example.com', { credentials: 'include' }];
25,fetch['//example.com', { credentials: 'include' }];
26 hoặcfetch['//example.com', { credentials: 'include' }];
27fetch['//example.com', { credentials: 'include' }];
Gửi yêu cầu có kèm theo thông tin xác thực
Để khiến các trình duyệt gửi yêu cầu có thông tin đăng nhập được bao gồm trong cả lệnh gọi cùng nguồn gốc và nguồn gốc chéo, hãy thêm
fetch['//example.com', {
credentials: 'include'
}];
28 vào đối tượng fetch['//example.com', {
credentials: 'include'
}];
38 mà bạn chuyển đến phương thức fetch['//example.com', {
credentials: 'include'
}];
0fetch['//example.com', {
credentials: 'include'
}];
Ghi chú.
fetch['//example.com', {
credentials: 'include'
}];
41 bị cấm sử dụng ký tự đại diện cho các yêu cầu với fetch['//example.com', {
credentials: 'include'
}];
28. Trong những trường hợp như vậy, nguồn gốc chính xác phải được cung cấp; Ghi chú. Các trình duyệt không được gửi thông tin đăng nhập trong các yêu cầu chiếu trước bất kể cài đặt này. Để biết thêm thông tin xem. CORS > Yêu cầu có thông tin đăng nhập
Nếu bạn chỉ muốn gửi thông tin đăng nhập nếu URL yêu cầu có cùng nguồn gốc với tập lệnh gọi, hãy thêm
fetch['//example.com', {
credentials: 'include'
}];
43fetch['//example.com', {
credentials: 'include'
}];
3Thay vào đó, để đảm bảo các trình duyệt không bao gồm thông tin xác thực trong yêu cầu, hãy sử dụng
fetch['//example.com', {
credentials: 'include'
}];
44fetch['//example.com', {
credentials: 'include'
}];
2Tải lên dữ liệu JSON
Sử dụng
fetch['//example.com', {
credentials: 'include'
}];
0 để ĐĂNG dữ liệu được mã hóa JSONfetch['//example.com', {
credentials: 'include'
}];
4Tải lên một tập tin
Các tệp có thể được tải lên bằng phần tử đầu vào HTML
fetch['//example.com', {
credentials: 'include'
}];
46, fetch['//example.com', {
credentials: 'include'
}];
47 và fetch['//example.com', {
credentials: 'include'
}];
0fetch['//example.com', {
credentials: 'include'
}];
5Tải lên nhiều tệp
Các tệp có thể được tải lên bằng phần tử đầu vào HTML
fetch['//example.com', {
credentials: 'include'
}];
49, fetch['//example.com', {
credentials: 'include'
}];
47 và fetch['//example.com', {
credentials: 'include'
}];
0fetch['//example.com', {
credentials: 'include'
}];
9Xử lý từng dòng tệp văn bản
Các đoạn được đọc từ phản hồi không bị ngắt gọn gàng ở ranh giới dòng và là Uint8Arrays, không phải chuỗi. Nếu bạn muốn tìm nạp một tệp văn bản và xử lý từng dòng một, thì bạn phải xử lý những phức tạp này. Ví dụ sau đây cho thấy một cách để thực hiện việc này bằng cách tạo trình lặp dòng [để đơn giản, nó giả sử văn bản là UTF-8 và không xử lý lỗi tìm nạp]
fetch['//example.com', {
credentials: 'include'
}];
0Kiểm tra xem quá trình tìm nạp đã thành công chưa
Một lời hứa
fetch['//example.com', {
credentials: 'include'
}];
0 sẽ từ chối với một fetch['//example.com', {
credentials: 'include'
}];
53 khi gặp lỗi mạng hoặc CORS bị định cấu hình sai ở phía máy chủ, mặc dù điều này thường có nghĩa là các vấn đề về quyền hoặc tương tự - chẳng hạn như 404 không phải là lỗi mạng. Kiểm tra chính xác cho một fetch['//example.com', {
credentials: 'include'
}];
0 thành công sẽ bao gồm kiểm tra xem lời hứa đã được giải quyết chưa, sau đó kiểm tra xem thuộc tính fetch['//example.com', {
credentials: 'include'
}];
55 có giá trị true. Mã sẽ trông giống như thế nàyfetch['//example.com', {
credentials: 'include'
}];
5Cung cấp đối tượng yêu cầu của riêng bạn
Thay vì chuyển một đường dẫn đến tài nguyên mà bạn muốn yêu cầu vào lệnh gọi
fetch['//example.com', {
credentials: 'include'
}];
0, bạn có thể tạo một đối tượng yêu cầu bằng cách sử dụng hàm tạo fetch['//example.com', {
credentials: 'include'
}];
57 và chuyển nó vào dưới dạng đối số phương thức fetch['//example.com', {
credentials: 'include'
}];
0fetch['//example.com', {
credentials: 'include'
}];
10fetch['//example.com', {
credentials: 'include'
}];
57 chấp nhận chính xác các tham số giống như phương thức fetch['//example.com', {
credentials: 'include'
}];
0. Bạn thậm chí có thể chuyển vào một đối tượng yêu cầu hiện có để tạo một bản sao của nófetch['//example.com', {
credentials: 'include'
}];
11Điều này khá hữu ích, vì các nội dung yêu cầu và phản hồi chỉ có thể được sử dụng một lần. Tạo một bản sao như thế này cho phép bạn sử dụng lại yêu cầu/phản hồi một cách hiệu quả trong khi thay đổi các tùy chọn
fetch['//example.com', {
credentials: 'include'
}];
38 nếu muốn. Bản sao phải được thực hiện trước khi cơ thể được đọcGhi chú. Ngoài ra còn có một phương pháp
fetch['//example.com', {
credentials: 'include'
}];
92 tạo một bản sao. Cả hai phương pháp tạo bản sao sẽ không thành công nếu nội dung của yêu cầu hoặc phản hồi ban đầu đã được đọc, nhưng việc đọc nội dung của phản hồi hoặc yêu cầu được sao chép sẽ không khiến nó được đánh dấu là đã đọc trong bản gốctiêu đề
Giao diện
fetch['//example.com', {
credentials: 'include'
}];
93 cho phép bạn tạo đối tượng tiêu đề của riêng mình thông qua hàm tạo fetch['//example.com', {
credentials: 'include'
}];
94. Một đối tượng tiêu đề là một bản đồ đơn giản gồm nhiều tên thành các giá trịfetch['//example.com', {
credentials: 'include'
}];
12Điều tương tự có thể đạt được bằng cách chuyển một mảng các mảng hoặc một đối tượng bằng chữ cho hàm tạo
fetch['//example.com', {
credentials: 'include'
}];
13Nội dung có thể được truy vấn và truy xuất
fetch['//example.com', {
credentials: 'include'
}];
14Một số thao tác này chỉ hữu ích trong
fetch['//example.com', {
credentials: 'include'
}];
95, nhưng chúng cung cấp API đẹp hơn nhiều để thao tác với tiêu đềTất cả các phương thức Tiêu đề đưa ra một
fetch['//example.com', {
credentials: 'include'
}];
53 nếu tên tiêu đề được sử dụng không phải là tên Tiêu đề HTTP hợp lệ. Các hoạt động đột biến sẽ ném một fetch['//example.com', {
credentials: 'include'
}];
53 nếu có một người bảo vệ bất biến [xem bên dưới]. Nếu không, họ thất bại âm thầm. Ví dụfetch['//example.com', {
credentials: 'include'
}];
15Một trường hợp sử dụng tốt cho tiêu đề là kiểm tra xem loại nội dung có chính xác hay không trước khi bạn xử lý thêm. Ví dụ
fetch['//example.com', {
credentials: 'include'
}];
16Bảo vệ
Vì các tiêu đề có thể được gửi trong các yêu cầu và nhận được trong các phản hồi và có nhiều hạn chế khác nhau về thông tin nào có thể và nên thay đổi, các đối tượng của tiêu đề có thuộc tính bảo vệ. Điều này không được hiển thị trên Web, nhưng nó ảnh hưởng đến hoạt động đột biến nào được phép trên đối tượng tiêu đề
Các giá trị bảo vệ có thể là
98. mặc địnhfetch['//example.com', { credentials: 'include' }];
99. bảo vệ cho một đối tượng tiêu đề thu được từ một yêu cầu [______500]fetch['//example.com', { credentials: 'include' }];
01. bảo vệ đối tượng tiêu đề thu được từ yêu cầu được tạo bằngfetch['//example.com', { credentials: 'include' }];
02fetch['//example.com', { credentials: 'include' }];
03fetch['//example.com', { credentials: 'include' }];
04. bảo vệ đối tượng tiêu đề thu được từ phản hồi [fetch['//example.com', { credentials: 'include' }];
05]fetch['//example.com', { credentials: 'include' }];
06. bảo vệ hiển thị đối tượng tiêu đề chỉ đọc;fetch['//example.com', { credentials: 'include' }];
Ghi chú. Bạn không thể thêm hoặc đặt tiêu đề
fetch['//example.com', {
credentials: 'include'
}];
07 trên đối tượng tiêu đề được bảo vệ cho một fetch['//example.com', {
credentials: 'include'
}];
04. Tương tự, không được phép chèn fetch['//example.com', {
credentials: 'include'
}];
09 vào tiêu đề phản hồi. ServiceWorkers không được phép đặt cookie thông qua phản hồi tổng hợpđối tượng phản hồi
Như bạn đã thấy ở trên,
fetch['//example.com', {
credentials: 'include'
}];
32 trường hợp được trả lại khi fetch['//example.com', {
credentials: 'include'
}];
0 lời hứa được giải quyếtCác thuộc tính phản hồi phổ biến nhất mà bạn sẽ sử dụng là
52 — Một số nguyên [giá trị mặc định 200] chứa mã trạng thái phản hồifetch['//example.com', { credentials: 'include' }];
53 — Một chuỗi [giá trị mặc định ""], tương ứng với thông báo mã trạng thái HTTP. Lưu ý rằng HTTP/2 không hỗ trợ thông báo trạng tháifetch['//example.com', { credentials: 'include' }];
55 — được sử dụng ở trên, đây là cách viết tắt để kiểm tra xem trạng thái có nằm trong phạm vi bao gồm 200-299 không. Điều này trả về một giá trị booleanfetch['//example.com', { credentials: 'include' }];
Chúng cũng có thể được tạo theo chương trình thông qua JavaScript, nhưng điều này chỉ thực sự hữu ích trong
fetch['//example.com', {
credentials: 'include'
}];
95, khi bạn đang cung cấp phản hồi tùy chỉnh cho yêu cầu đã nhận bằng phương pháp fetch['//example.com', {
credentials: 'include'
}];
56fetch['//example.com', {
credentials: 'include'
}];
17Hàm tạo
fetch['//example.com', {
credentials: 'include'
}];
57 nhận hai đối số tùy chọn — một phần thân cho phản hồi và một đối tượng init [tương tự như đối tượng mà fetch['//example.com', {
credentials: 'include'
}];
57 chấp nhận. ]Ghi chú. Phương thức tĩnh
fetch['//example.com', {
credentials: 'include'
}];
59 trả về phản hồi lỗi. Tương tự, fetch['//example.com', {
credentials: 'include'
}];
100 trả về phản hồi dẫn đến chuyển hướng đến một URL được chỉ định. Những điều này cũng chỉ liên quan đến Service WorkerThân thể
Cả yêu cầu và phản hồi đều có thể chứa dữ liệu cơ thể. Một cơ thể là một thể hiện của bất kỳ loại nào sau đây
101fetch['//example.com', { credentials: 'include' }];
102 [Uint8Array và những người bạn]fetch['//example.com', { credentials: 'include' }];
103fetch['//example.com', { credentials: 'include' }];
104fetch['//example.com', { credentials: 'include' }];
105fetch['//example.com', { credentials: 'include' }];
106, hoặc một chuỗi ký tựfetch['//example.com', { credentials: 'include' }];
107fetch['//example.com', { credentials: 'include' }];
108fetch['//example.com', { credentials: 'include' }];
Giao diện
fetch['//example.com', {
credentials: 'include'
}];
109 và fetch['//example.com', {
credentials: 'include'
}];
32 chia sẻ các phương thức sau để trích xuất phần thân. Tất cả đều trả lại một lời hứa cuối cùng được giải quyết với nội dung thực tế
111 /fetch['//example.com', { credentials: 'include' }];
112fetch['//example.com', { credentials: 'include' }];
113 /fetch['//example.com', { credentials: 'include' }];
114fetch['//example.com', { credentials: 'include' }];
115 /fetch['//example.com', { credentials: 'include' }];
116fetch['//example.com', { credentials: 'include' }];
117 /fetch['//example.com', { credentials: 'include' }];
118fetch['//example.com', { credentials: 'include' }];
119 /fetch['//example.com', { credentials: 'include' }];
120fetch['//example.com', { credentials: 'include' }];
Điều này làm cho việc sử dụng dữ liệu phi văn bản dễ dàng hơn nhiều so với XHR
Nội dung yêu cầu có thể được đặt bằng cách chuyển tham số nội dung
fetch['//example.com', {
credentials: 'include'
}];
18Cả yêu cầu và phản hồi [và bằng cách mở rộng chức năng
fetch['//example.com', {
credentials: 'include'
}];
0], sẽ cố gắng xác định loại nội dung một cách thông minh. Một yêu cầu cũng sẽ tự động đặt tiêu đề fetch['//example.com', {
credentials: 'include'
}];
24 nếu không có tiêu đề nào được đặt trong từ điểnphát hiện tính năng
Hỗ trợ Fetch API có thể được phát hiện bằng cách kiểm tra sự tồn tại của
fetch['//example.com', {
credentials: 'include'
}];
93, fetch['//example.com', {
credentials: 'include'
}];
109, fetch['//example.com', {
credentials: 'include'
}];
32 hoặc fetch['//example.com', {
credentials: 'include'
}];
0 trên phạm vi fetch['//example.com', {
credentials: 'include'
}];
127 hoặc fetch['//example.com', {
credentials: 'include'
}];
128. Ví dụ