ITer cần phải nắm chắc những HTTP Status Code thông dụng sau

19:52 15-04-2021BKAP Media

HTTP Status Code là gì? Các Status Code thông dụng bao gồm những gì? Ý nghĩa các HTTP Status Code? Cùng Bachkhoa-Aptech tim hiểu trong bài viết phía dưới nhé ;)

Nếu bạn là một web developer hoặc thường xuyên làm việc với các API chắc chắn bạn đã quá quen thuộc với các con số 200, 404, 500… chúng là các Status Code của HTTP.

Vậy có khi nào bạn tự hỏi ngoài các con số trên còn các số nào không, ý nghĩa của chúng là gì? 

Hình dung bạn cần xây dựng một web service API dùng để quản lý các bài viết. Câu hỏi đặt ra là service này sẽ cần trả về status code là gì khi client gửi request để cập nhật nội dung một bài viết với post_id có giá trị là một chuỗi thay vì đúng ra phải là một số integer:

{
    "post_id": "haha",
    "content": "hihi"
}

Tương tự service này sẽ cần trả về status code là gì khi client gửi request để import danh sách bài viết được export trước đó vào database nhưng thay vì gửi file XML hoặc JSON thì client lại gửi một file binary?

Đối với các developer việc nắm vững ý nghĩa của các HTTP status code là rất quan trọng khi xây dựng các ứng dụng web đóng vai trò làm service API. Trả về status code đúng ý nghĩa sẽ giúp phía client có thể quyết định chính xác các bước tiếp xử lý theo sau như thế nào. Mặc dù vậy thì không nhiều developer hiểu đúng ý nghĩa của các status code.

1. HTTP Status Code Là Gì?

HTTP Status Code là một mã gồm 3 chữ số được gửi trả về cho client từ server dùng để mô tả trạng thái của quá trình server xử lý một yêu cầu (request) cho trước gửi từ client tới server dưới giao thức HTTP.

Lưu ý rằng tác dụng duy nhất của HTTP status code là để thông tin về trạng thái xử lý request của server.

2. Kiểm Tra HTTP Status Code Trên Trình Duyệt

HTTP status code được gửi trả về trong response header trả về từ server.

Chúng ta có thể kiểm tra HTTP status code của một request sử dụng trình duyệt. Đầu tiên trên trình duyệt bạn mở developer tools sử dụng phím F12 và click vào tab Network. Sau đó truy cập vào một trang bất kỳ ví dụ như Facebook, bạn sẽ thấy thông tin về HTTP status code của các request hiển thị ở cột status như sau:

Kiểm tra HTTP status code trên trình duyệt

Ở hình trên bạn thấy ngoài một request trả về HTTP status code là 307 (Internal redirect) thì hầu hết các request còn lại đều trả về trạng thái 200 (OK). Trong phần tiếp theo dưới đây chúng ta sẽ tìm hiểu kỹ hơn về ý nghĩa của các con số này.

Khi click vào một request bất kỳ bạn cũng sẽ thấy thông tin về HTTP status code hiển thị ở phía dưới mục General bên phải như hình dưới đây:

Kiểm tra HTTP status code sử dụng response header

3. Ý Nghĩa Các HTTP Status Code Thông Dụng

Các HTTP status code có 3 chữ số và được phân thành 5 loại chính dựa vào chữ số đầu tiên:

  • 1xx: Các status code loại này dùng để đơn giản thông báo với client rằng server đã nhận được request. Các status code 1xx ít được sử dụng và thậm chỉ không được định nghĩa trong HTTP phiên bản 1.0.
  • 2xx: Các status code loại này có ý nghĩa rằng request được server nhận , hiểu và xử lý thành công.
  • 3xx: Các status code loại này có ý nghĩa rằng server sẽ chuyển tiếp request hiện tại sang một request khác và client cần thực hiện việc gửi request tiếp theo đó để có thể hoàn tất. Thông thường khi trình duyệt nhận được status code loại này nó sẽ tự động thực hiện việc gửi request tiếp theo để lấy về kết quả.
  • 4xx: Các status code loại này có ý nghĩa rằng đã có lỗi từ phía client trong khi gửi request. Ví dụ như sai URL, sai HTTP method, không có quyền truy cập vào trang...
  • 5xx: Các status code loại này có ý nghĩa rằng server đã có lỗi từ phía server trong khi xử lý request. Ví dụ như databse chết hoặc server bị hết bộ nhớ...

4. Các Status Code Thông Dụng

Ở phần này chúng ta sẽ cùng nhau tham khảo các status code hay sử dụng khi xây dựng web service (hoặc sử dụng API).

1xx: Infomation (Thông tin)

  • 100 Continue: Chỉ một phần của Request được nhận bởi Server (có thể là header và Client cần gửi tiếp body), nhưng miễn là nó không bị loại bỏ, Client nên tiếp tục với Request.

  • 101 Switching Protocols: Requester đã hỏi Server về việc thanh đổi Protocol và Server đã chấp nhận điều đó

2xx: Thành Công

Trong các HTTP status code thuộc loại 2xx thì 200 OK là status code thường được sử dụng nhiều. Các request được xử lý thành công bởi server thường sử dụng status là 200.

  • 200 OK: Request đã được tiếp nhận và xử lý thành công. Các Response thực tế trả về sẽ phụ thuộc vào phương thức HTTP của Request. Trong một GET Request, Response sẽ chứa một thực thể tương ứng với các tài nguyên yêu cầu, trong một POST Request, Response sẽ chứa một thực thể mô tả hoặc chứa các kết quả của các action.
  • 201 Created: Request đã được xử lý, kết quả của việc xử lý tạo ra một resource mới.
  • 202 Accepted: Request được chấp nhận cho xử lý, nhưng việc xử lý chưa hoàn thành.
  • 203 Non-authoritative Information (Xuất hiện từ HTTP/1.1): Server là nơi chuyển đổi proxy (ví dụ một Web accelerator) đã nhận được 200 OK nhưng nó trả về một phiên bản thay đổi (có thể là header) của Response nguyên gốc.
  • 204 No Content: Server đã xử lý thành công request nhưng không trả về bất cứ content nào.
  • 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 204 No Content Response 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ề một phần của resouce(dạng byte) do một range header được gửi bởi phía Client. Các Range Header được sửa 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.

3xx: Chuyển Tiếp

Trong các HTTP status code thuộc loại 3xx thì 301 Moved Permanently, 302 Found và 307 Temporary Redirect thường được sử dụng nhiều. Trong khi 302 và 307 được sử dụng cho các request mà việc chuyển tiếp mang ý nghĩa tạm thời thì 301 sử dụng cho các request mà việc chuyển tiếp là cố định. Sự khác biệt ở đây đó là với các request trả về 301 thì ở các phiên làm việc tiếp theo client không nên gửi lại request này mà nên sử dụng request mới (hay request được chuyển tiếp).

Trong khi đó với các request trả về 302 và 307 thì cient vẫn nên sử dụng request này thay vì request mới (request được chuyển tiếp) vì việc chuyển tiếp chỉ diễn ra tạm thời.

  • 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: Đây là một ví dụ cho thấy sự mâu thuẫn giữa thực tiễn và quy chuẩn. Ở phiên bản HTTP/1.0 nó có nghĩa là yêu cầu Client chuyển hướng đến một URL tạm thời (tương tự như là 301 Moved Permanently) nhưng phần lớn các browser lại thực hiện nó với ý nghĩa của 303 See Other(sẽ nói sau đây). Do đó từ phiên bản HTTP/1.1 có thêm hai mã 303 và 307 để phân biệt rõ hành vi, nhưng một số ứng dụng web và framework vẫn sử dụng 302 như thể là 303.
  • 303 See Other (Xuất hiện từ HTTP/1.1): Response trả về của Request có thể tìm thấy ở một URL khác bằng cách sử dụng phương thức GET.
  • 304 Not Modified: Đây là Status-Code tới một If-Modified-Since hoặc If-None-Match header, nơi mà URL không được chỉnh sửa từ ngày cụ thể.
  • 305 Use Proxy: Tài nguyên yêu cầu chỉ có sẵn thông qua một proxy, địa chỉ mà được cung cấp trong các Response. Nhiều HTTP Client (như Mozilla và Internet Explorer) không xử lý một cách chính xác phản ứng với mã trạng thái này, chủ yếu là vì các lý do an ninh.
  • 306 Switch Proxy: Mã này hiện không còn đượ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 (xuất hiện từ HTTP/1.1): Trong trường hợp này, Request hiện tại cần được lặp lại một URI khác nhưng các Request trong tương lai vẫn sử dụng URI gốc.

4xx: Lỗi Từ Phía Client

Trong các HTTP status code thuộc loại 4xx thì 400 Bad Request, 401 Unauthorized, 403 Forbidden và 404 Not Found là status code thường được sử dụng nhiều. Trong đó:

  • 400 có ý nghĩa rằng server đã nhận được request nhưng phía client đã gửi một request lỗi. Một trong số lỗi có thể kể đến như lỗi cú pháp như upload tập tin không đúng format hoặc quá lớn, hoặc thiếu dữ liệu cần thiết...
  • 401 có ý nghĩa rằng server đã nhận được request nhưng phía client không có quyền truy cập để xem hoặc chỉnh sửa hoặc xóa nội dung yêu cầu. Các request trả về status code 401 sẽ thay đổi nếu phía client thực hiện việc đăng nhập.
  • 403 có ý nghĩa rằng server đã nhận được request nhưng từ chối việc xử lý request. Một trường hợp phổ biến mà status code 403 trả về đó là với các request muốn lấy về danh sách file trong một thư mục trên server ví dụ request tới địa chỉ http://example.net/danh-sach-bang-diem/K07-A2.html sẽ trả về bảng điểm lớp A2 khóa K07 nhưng request tới địa chỉ http://example.net/danh-sach-bang-diem/ sẽ trả về status code là 403.
  • 404 có ý nghĩa rằng server đã nhận được request nhưng không tìm thấy nội dung nào trả về với URL nhận được.

5xx: Lỗi Từ Phía Server

Trong các HTTP status code thuộc loại 5xx thì 500 Internal Server Error là status code thường được sử dụng nhiều. Status code 500 là một status với ý nghĩa chung nói rằng server đã gặp phải lỗi khi xử lý request mà không đưa ra lý do cụ thể.

  • 500 Internal Server Error: Một thông báo chung chung, được đưa ra khi Server gặp phải một trường hợp bất ngờ, Message cụ thể là không phù hợp.
  • 501 Not Implemented: Server không công nhận các Request method hoặc không có khả năng xử lý nó.
  • 502 Bad Gateway: Server đã hoạt động như một gateway hoặc proxy và nhận được một Response không hợp lệ từ máy chủ nguồn.
  • 503 Service Unavailable: Server hiện tại không có sẵn (Quá tải hoặc được down để bảo trì). Nói chung đây chỉ là trạng thái tạm thời.
  • 504 Gateway Timeout: Server đã hoạt động như một gateway hoặc proxy và không nhận được một 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”.

Trên đây bạn đã tham khảo các HTTP status code thường hay sử dụng nhất.

Tổng hợp #Topdev và #Codehub

-----------------------------

HỆ THỐNG ĐÀO TẠO CNTT QUỐC TẾ BACHKHOA-APTECH

Liên hệ:

   0968276996
< wire:id="iI7WkYa6DRgyUYY7aDyO" wire:initial-data="{"fingerprint":{"id":"iI7WkYa6DRgyUYY7aDyO","name":"embedded.footer","locale":"vn"},"effects":{"listeners":[]},"serverMemo":{"children":[],"errors":[],"htmlHash":"26380eb1","data":[],"dataMeta":[],"checksum":"6ac4fcaf3fee371498304fea13316c0896911d32fd2046f3c89efc67f79ce3b0"}}"!-- Messenger Plugin chat Code -->