Ẩn số từ những HTTP status code
White

Touka viết ngày 17/05/2019

Trạng thái phản hồi từ những HTTP code nói lên điều gì?

Sau quá trình gọi API việc trả về những mã Trước tiên chúng ta sẽ tìm hiểu một chút về HTTP Response. Khi nhận và phiên dịch một HTTP Request, Server sẽ gửi tín hiệu phản hồi là một HTTP Response bao gồm các thành phần sau :

  • Một dòng trạng thái (Status-Line)
  • Không hoặc nhiều hơn các trường Header (General|Response|Entity) được theo sau CRLF
  • Một dòng trống chỉ dòng kết thúc của các trường Header
  • Một phần thân thông báo tùy ý Status code ( MÃ hóa trạng thái ) là 1 số nguyên gồm 3 kí tự . Trong đó kí tự đầu tiên của status code địng nghĩa loại Response còn 2 mã cuối dùng để đặc tả loại respone đó như thế nào . Chúng được chia thành 5 nhóm sau :

Phản hồi thông tin 1XX

  • 100 Continue

Chỉ 1 phần của request được nhận bởi server (có thể là header và Client cần gửi tiếp body ) .Việc phản hồi tạm thời này sẽ báo cho ta hiểu rằng mọi thứ đã ổn để từ đó phía client sẽ quyết định tiếp tục request hay hủy bỏ, Client nên tiếp tục với request

  • 101 Switching Protocols

Mã này sẽ gửi phản hồi để nâng cấp request header bởi phía Client và đồng thời chỉ ra phương thức mà máy chủ đang chuyển đổi tới

  • 102 Xử lý (WebDAV)

Lúc này thì request của client đã được nhận và đang trong quá trình xử lý nhưng vẫn chưa có thể phản hồi trả về

  • 103 gợi ý sớm

Trạng thái code này là 1 cái dự định được sử dụng với LINK header cho phép người dùng tải trước dữ liệu trong quá trình server vẫn còn đang loay hoay chuẩn bị phản hồi request

Phản hồi thành công 2XX

  • 200 OK

Yêu cầu đã thành công , tuy nhiên mỗi success request lại có ý nghĩa khác nhau tùy thuộc vào từng phương thức HTTP

  • GET : dữ liệu đã được lấy và truyền vào thông báo trong body
  • HEAD : các tiêu đề đã có trong thông báo
  • PUT or POST : các dữ liệu miêu tả kết quả của các hành động được truyền vào thông báo của body
  • TRACE : thông báo trong body được tổng hợp từ các thông báo requset nhận được gần đây nhất từ server
  • 201 Created

1 phản hồi REST API với mã code 201 là bất kì khi nào dữ liệu được tạo mới trong collection. đó cũng có thể là số lần khi nguồn dữ liệu mới được tạo như mong muốn từ controller
Tài nguyên mới được tạo cũng có thể tham chiếu bới URI(s) được trả về trong thực thể của phản hồi . với cái riêng nhất của URI cho dữ liệu được cung cấp bởi vị tí của phần header
Phía server phải tạo dữ liệu trước khi hành động trả về code 201. nếu hành động không thể thực hiện ngay thì server nên phản hồi mã 202 (Accept)

  • 202 Accept

Yêu cầu đã được nhận nhưng vẫn chưa hành động theo. 1 hành động không ủy quyền, nghĩa là chẳng có cách nào trong HTTP để gửi sau 1 cái phản hồi bất đồng bộ liên quan tới kết qủa của quá trình xử lý yêu cầu

  • 203 Non-Authoritative Information

Mã này nghĩa là trả lại thông tin meta nhưng nó không chính xác từ server nguồn

  • 204 No Content

Ở đây sẽ chẳng có nội dung gì để gửi cho yêu cầu. Mã này thường gửi cho những phản hồi từ những yêu cầu PUT, POST hoặc DELETE khi REST API từ chối gửi lại bất kỳ thông báo trạng thái trình diễn trong thông báo phản hồi
1 API cũng có thể gửi mã 204 trong việc kết hợp với phương thức GET để chỉ ra dữ liệu yêu cầu đã tồn tại nhưng sẽ chẳng trình chiếu trong phần tổng hợp của body
nếu client là quản lý người sử dụng , nó không nên thay đổi chế độ xem từ những yêu cầu được gửi gây ra. Phản hồi này chủ yếu nhằm cho phép đầu vào cho các hành động diễn ra mà không gây ra thay đổi đối với chế độ xem tài liệu hoạt động của tác nhân người dùng , mặc dù mọi thông số mới nên được áp dụng cho tài liệu hiện tại trong chế độ xem hoạt động tác nhân của người dùng
Phản hồi 204 KHÔNG PHẢI bao gồm phần thông báo và do đó luôn kết thúc bởi dòng trông đầu tiên sau trường tiêu đề

  • 205 Reset Content

Server đã xử lý thành công request nhưng không trả về bất cứ content nào . Không giống với mã 204, respone này yêu cầu phía Client phải thiết lập lại document view

  • 206 partial Content

Server chỉ trả về 1 phần dữ liệu ( dạng byte ) do 1 range header được gửi bởi phía Client. Các Range Header được sử dụng bởi Client để cho phép nối lại các phần của File Download bị dán đoạn hoặc chia thành nhiều luông download

Sự chuyển hướng lại 3XX

  • 300 Multiple Choices

Một danh sách các link. Người sử dụng có thể chọn một link và tới vị trí đó. Tối đa 5 địa chỉ. Ví dụ: List các file video với format khác nhau

  • 301 Moved Permanently

Request hiện tại và các request sau được yêu cầu di chuyển tới một URI mới.

  • 302 Found

Nó là sự mẫu thuẫn giữa thực tế và quy chuẩn vì ở phiên bản HTTP/1.0 nó có ý nghĩa là Client chuyển hướng đến 1 URL tạm thời ( Tương tự như mã 301 ) nhưng phần lớn các browser lại thực hiện nó với ý nghĩa của mã 303 ( see others ) . Do vậy từ phiên bản HTTP/1.1 đã có thêm 2 mã 303 và 307 để phân biệt rõ hành vi , nhưng ứng dụng web và framework vẫn sử dụng 302 như 303

  • 303 See Other

Phản hồi cuả Request có thể thấy ở 1 URL khác bằng cách sử dụng phương thức GET

  • 304 Not Modified

Nó được sử dụng cho mục đích lưu trữ. Điều đó thông báo cho Client rằng phản hồi đó vẫn chưa được sửa đổi , vì vậy Client có thể tiếp tục sử dụng cùng 1 phiên bản được lưu trong bộ cache của phản hồi

  • 305 Use Proxy

Tài nguyên đã yêu cầu chỉ có sẵn thông qua 1 proxy, địa chỉ mà được cung cấp trong Response . Nhiều HTTP Client không xử lý 1cách chính xác phản ứng với mã trạng thái này , phần lớn do an ninh

  • 306 Switch Proxy

Mã lệnh này không được sử dụng , ý nghĩa ban đầu của nó là : " các request tiếp theo nên sử dụng các proxy được chỉ định "

  • 307 Temporary redirect

trong trường hợp này thì Request hiện tại cần lặp lại 1 URL khác nhưng các Request trong tương lai vẫn sữu dụng theo URL gốc

Phản hồi lỗi từ phía Client 4XX

Nó có nghĩa là request chứa cú pháp không chính xác hoặc nó không được thực hiện

  • 400 Bad Request

Server không thể xử lý hoặc sẽ không xử lý các Request lỗi của phía Client ( ví dụ Request có cú pháp sai ...)

  • 401 Unauthorized

Tương tự như 403 Forbidden nhưng được sử dụng khi yêu cầu xác thực là bắt buộc và không thành công. Các Response bắt buộc phải có các thành phần WWW-Authenticate chứa các thách thức với tài nguyên được yêu cầu

  • 402 Payment Required

Hiện tại mã này chưa được sử dụng và nó được lưu trữ lại cho tương lai

  • 403 Forbidden

Yêu cầu là hợp lệ nhưng server từ chối đáp ứng nó. Nó có nghĩa là trái phép , người dùng không có quyền cần thiết để tiếp cận với các tài nguyên

  • 404 Not Found

Các dữ liệu hiện tajoi không được tìm thấy nhưng có thể có trong tương lai. Các request tiếp theo của Client được chấp nhận

  • 405 Method Not Allowed

Phương thức không được hỗ trợ cho các tài nguyên được yêu cầu . ví dụ 1 API có thể cấm DELETE tài nguyên . 2 phương thức bắt buộc GET và HEAD khoong bao giờ bị vô hiệu hóa và không nên trả về mã code lỗi

  • 406 Not Acceptable

Server chỉ có thể tạo được Response mà không được chấp nhận bới Client

  • 407 Proxy Authentication Required

Bạn phải xác nhận với 1 server ủy quyền trước khi Request này được phục vụ

  • 408 Request Timeout

Request tổng thời gian dài hơn thời gian Server được chuẩn bị để đợi

  • 409 Conflict

Request không thể được hoàn thành bởi vì sự xung đột, ví dụ như là xung đột giữa nhiều chỉnh sửa đồng thời

  • 410 Gone

Phản hồi này sẽ được gửi khi nội dung của yêu cầu đã bị xóa vĩnh viễn từ Server, không có địa chỉ chuyển tiếp. Client dự kiến sẽ xóa bỏ bộ nhớ Cache và liên kết tới tài nguyên . Đặc tả HTTP dự định mã trạng thái này sẽ được sử dụng cho " Dịch vụ quảng cáo , thời gian gia hạn " . APIs sẽ không cần phải bắt buộc chỉ ra những dữ liệu nào đã xóa

  • 411 length required

Content -Length không được xác định rõ, Server sẽ không chấp nhận Request nào không có nó.

  • 412 Precondition Failed

Server sẽ không đáp ứng một trong những điều kiện tiên quyết của Client trong Server

  • 413 Payload Too Large

Server sẽ không chấp nhận yêu cầu vì đối tượng quá lớn

  • 414 URI too long

URI được cung ccasp quá dafiddeer server xử lý , thường là kết quả của quá nhiều dữ liệu được mã hóa như là 1 truy vấn chuỗi của 1 GET request, trong trường hợp đó nó phải chuyển đổi sang 1 POST Request

  • 415 Unsupported Media Type

( Đây là phần ngáo chó>
Server sẽ không chấp nhận Request, bởi vì kiểu phương tiện không được hỗ trợ. Ví dụ khi Client upload 1 ảnh có định dạng image/svg+xml, nhưng server lại yêu caafu1 dạng khác

  • 416 Range Not Satisfiable

Client yêu cầu 1 phần của tập tin nhưng server không thể cung cấp nó

  • 417 Expectation failed

Máy chủ không thể đáp úng yêu cầu của trường Expect trong Header

Lỗi phản hồi Server 5XX

  • 500 Internal Server error

Một thông báo chung chung được đưa rakhi server gặp phải trường hợp bất ngờ , Message cụ thể là không phù hợp

  • 501 Not Implemented

Server khoong công nhận các request hoặc không có khả năng xử lý nó

  • 502 Bad Gateway

Server đã hoạt động như 1 gateway hoặc proxy và nhận 1 phản hồi không hợp lệ từ máy chủ nguồn

  • 503 server unavailable

Server hiện tại quá tải hoặc được down để bảo trì. Nói chung là đây chỉ là trạng thái tạm thời

  • 504 Gateway Timeout

Server đã hoạt động như Gateway hoặc proxy và không nhận được Response từ máy chủ nguồn

  • 505 HTTP Version Not Supported

server không hỗ trợ phiên bản giao thức HTTP

Link Tham Khao
[https://developer.mozilla.org/en-US/docs/Web/HTTP/Status]
[https://viblo.asia/p/tim-hieu-ve-http-response-status-code-gDVK2MgX5Lj]

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Touka

2 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!