Phản hồi máy chủ 428 Precondition Required
Mã trạng thái HTTP 428 (Precondition Required)
Mã trạng thái HTTP 428 được sử dụng để chỉ ra rằng máy chủ yêu cầu các điều kiện nhất định phải được thực hiện trước khi xử lý yêu cầu. Điều này có thể xảy ra trong nhiều tình huống, đặc biệt là khi tương tác với API, nơi mà việc xem xét các trạng thái trước đó của tài nguyên là rất quan trọng.
Các ví dụ về việc sử dụng và phát sinh mã trạng thái 428
-
Tình huống thay đổi tài nguyên
Ví dụ: Khách hàng cố gắng cập nhật một tài nguyên nhưng không cung cấp các điều kiện cần thiết cho việc cập nhật đó.
Giải thích: Máy chủ có thể không thực hiện yêu cầu nếu khách hàng không cung cấp các điều kiện cần thiết, chẳng hạn như khi tài nguyên đã bị thay đổi bởi một khách hàng khác.
-
Kiểm soát phiên bản
Ví dụ: Khi cố gắng xóa hoặc thay đổi tài nguyên, khách hàng cần chỉ ra rằng họ đang làm việc với phiên bản tài nguyên hiện tại (ví dụ: sử dụng tiêu đề If-Match).
Giải thích: Mã trạng thái 428 có thể được trả về nếu khách hàng không chỉ định tiêu đề cần thiết để kiểm tra phiên bản của tài nguyên.
-
Bộ nhớ đệm và trạng thái
Ví dụ: Khách hàng yêu cầu dữ liệu có thể đã thay đổi nhưng không chỉ ra rằng họ chỉ muốn làm việc với dữ liệu hiện tại (ví dụ: tiêu đề If-None-Match).
Giải thích: Máy chủ có thể yêu cầu các điều kiện để tránh cung cấp thông tin lỗi thời.
Ví dụ thực tiễn về cách khắc phục lỗi 428 trên các ngôn ngữ lập trình khác nhau
-
JavaScript (sử dụng Fetch API)
const url = 'https://api.example.com/resource'; const headers = new Headers({ 'If-Match': 'etag_value' // Chỉ định ETag để kiểm tra phiên bản }); fetch(url, { method: 'PUT', headers: headers, body: JSON.stringify({ data: 'new data' }) }) .then(response => { if (response.status === 428) { console.error('Cần có điều kiện để thực hiện yêu cầu.'); } });
-
Python (sử dụng requests)
import requests url = 'https://api.example.com/resource' headers = { 'If-Match': 'etag_value' # Chỉ định ETag để kiểm tra phiên bản } response = requests.put(url, headers=headers, json={'data': 'new data'}) if response.status_code == 428: print('Cần có điều kiện để thực hiện yêu cầu.')
-
PHP
$url = 'https://api.example.com/resource'; $options = [ 'http' => [ 'header' => "If-Match: etag_value\r\n", // Chỉ định ETag để kiểm tra phiên bản 'method' => 'PUT', 'content' => json_encode(['data' => 'new data']), ], ]; $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if ($http_response_header[0] === 'HTTP/1.1 428 Precondition Required') { echo 'Cần có điều kiện để thực hiện yêu cầu.'; }
Tóm tắt các thông tin về mã trạng thái 428
Tình huống | Giải thích | Tiêu đề cần thiết |
---|---|---|
Thay đổi tài nguyên | Máy chủ yêu cầu điều kiện trước khi cập nhật tài nguyên. | N/A |
Kiểm soát phiên bản | Cần chỉ định phiên bản tài nguyên để thực hiện yêu cầu. | If-Match |
Bộ nhớ đệm | Khách hàng cần chỉ định làm việc với dữ liệu hiện tại. | If-None-Match |
Trong bài viết này, chúng ta đã xem xét các khía cạnh chính của việc sử dụng mã trạng thái HTTP 428, những ví dụ thực tiễn và cách khắc phục các lỗi có thể xảy ra trong mã trên các ngôn ngữ lập trình khác nhau. Mã trạng thái này đóng vai trò quan trọng trong việc đảm bảo rằng các yêu cầu được thực hiện một cách chính xác và nhất quán.