Giải ngố WWW – Phần 2: 4 điều cơ bản phải biết về HTTP

Tiếp theo nội dung Giải ngố WWW – Phần 1: Nguyên lý hoạt động của World Wide Web và thế giới ngầm Dark Web, kỳ này tôi sẽ bàn thêm về cái HyperText Transfer Protocol – HTTP (Giao thức truyền tải siêu văn bản) thần thánh. Được xem như cái cần câu cơm của WWW, HTTP dùng để xác định cách nói chuyện giữa ClientServer với 2 dạng MessageRequestRespone.

#1. Cấu trúc HTTP Request Message

Request Message thường sẽ bao gồm các thành phần như sau.

#1.1 Dòng Header đầu tiên

Bao gồm 3 thành phần cách nhau bởi space (khoảng trắng), ví dụ như:

`GET /auth/488/YourDetails.ashx?uid=129 HTTP/1.1`

Trong đó:

HTTP Method (Phương thức): Phổ biến nhất là GET như ví dụ trên.

Resquested URL: Thông tin về cái URL đang được yêu cầu. Trong này có thể xuất hiện Query String (chuỗi truy vấn) bao gồm các thông số theo sau dấu `?` như trong ví dụ là `/auth/488/YourDetails.ashx?uid=129`

HTTP Version: Phiên bản HTTP đang sử dụng như trong ví dụ là `HTTP/1.1`

#1.2 Các dòng Header tùy chọn tiếp theo

Bạn có thể gặp các thể loại sau:

Referer: Cho biết cái URL gốc của Request. Ví dụ từ trang chủ bạn click vô nút Login thì trang Login sẽ có Referer là trang chủ.

User-Agent: Cung cấp thông thin về Browser để tạo Request

Host: Cho biết hostname trong cái URL đầy đủ được truy cập, ví dụ dummytip.com

Cookie: Cái này khá quan trọng đối với HTTP, cho phép Server gửi dữ liệu đến Client. Khi đó Client có thể lưu dữ liệu và gửi lại cho Server để xác định các Session (Phiên) ví dụ như:

`Cookie: SessionId=5B70C71F3FD4968935CDB6682E545476`

Lưu ý: HTTP dùng TCP (stateful protocol) làm cơ chế vận chuyển nhưng bản thân HTTP lại là stateless protocol, nghĩa là mỗi message nó cứ chạy mà kệ cha thằng trước/ sau nó đã/ định làm cái gì. Vì vậy, vấn đề quản lý Session (ví dụ Login Session) là khá quan trọng khi sử dụng giao thức này.

#1.3 Phần còn lại

Phần này thì sẽ bao gồm 1 dòng trống để ngăn cách và sau đó là Message Body tùy chọn.

#2. Các Method (phương thức) trong HTTP Request

Method được hiểu như quy định về những cái gì bạn có thể làm với một Requested URL nhất định. Hai Method phổ biến bạn hay gặp nhất bao gồm:

– GET: Lấy thông tin từ Server. Có thể gửi thông số Request thông qua Query String.

– POST: Đẩy thông tin lên Server. Thông số Request có thể gửi qua URL Query String hoặc Message Body. Lưu ý là thông số gửi qua Message Body sẽ bị loại bỏ khi bookmark.

Ngoài 2 thằng quan trọng trên, bạn cũng có thể gặp một số thằng khác như:

– HEAD: Tương tự như GET nhưng phần Response của Server sẽ không có Message Body. Cái này kiểu như để hỏi Server “Ê ku, cái Resquested URL còn ngon không để anh gửi GET Request?

– TRACE: Mục tiêu cũng để thăm dò xem có ông Proxy Server nào chọc ngoáy vô Request không (bạn có thể xem thêm về Sê-ri Proxy Server như tôi đã giới thiệu). Lúc này, trong phần Response Body, Server sẽ gửi lại chính xác cái nội dung Request Message nó đã nhận.

– OPTIONS: Cái này dùng để hỏi Server xem với một cái Resquested URL cụ thể thì Client có thể dùng được cái HTTP Method nào. Lúc này trong Respone bạn cần tìm thông tin trong Allow Header.

– PUT: Nhằm upload một tài nguyên cụ thể (chứa trong phần Message Body) lên Server

#3 Cấu trúc HTTP Respone Message

Response Message thường sẽ bao gồm các thành phần như sau.

#3.1 Dòng Status Line đầu tiên

Dòng này bao gồm 3 thành phần cách nhau bởi space (khoảng trắng) như ví dụ sau:

`HTTP/1.1 200 OK `

Trong đó:

HTTP Version: Phiên bản HTTP đang sử dụng

Status Codes: Mã trạng thái thể hiện qua các con số cho biết kết quả của Request. Nếu bạn thấy `200` là ngon ăn rồi đấy. Cái này tôi nghĩ khá quan trọng nên tôi sẽ giới thiệu kỹ thêm ở Mục #4.

Mô tả: cái này dạng text để diễn giải cho cái Status Code nói trên. Ví dụ `200` ở trên tương ứng với `OK`

#3.2 Các dòng Header tùy chọn tiếp theo

Bạn có thể gặp các thể loại sau:

Server: Thông tin tham khảo về cái Web Server Software đang sử dụng. Ví dụ như:

`Server: Microsoft-IIS/6.0`

Set-Cookie: Cái này sẽ được sử dụng trong Cookie Header của Request tiếp theo để duy trì phiên kết nối. Ví dụ như:

`Set-Cookie: tracking=tI8rk7joMx44S2Uu85nSWc `

Content-Type: cho biết loại của Message Body. Ví dụ như:

`Content-Type: text/html; charset=utf-8`

Content-Length: thông tin độ dài của Message Body theo Byte. Ví dụ như:

`Content-Length: 1067`

Ngoài đám này thì bạn có thể gặp nhiều thể loại khác nữa. Tôi sẽ giới thiệu thêm ở Mục #4 để tiện theo dõi.

#3.3 Phần còn lại

Phần này thì sẽ bao gồm 1 dòng trống để ngăn cách và sau đó là Message Body tùy chọn. Message Body thường sẽ là cái HTML document kiểu như sau.

HTML document
HTML document

#3 Các thể loại Status Codes trong HTTP Respone Message

Status Codes có thể phân thành 5 nhóm sau:

1xx: Mục đích thông tin

2xx: Báo Request thành công

3xx: Client sẽ bị Redirect sang nguồn khác

4xx: Request có lỗi

5xx: Server bị lỗi khi xử lý Request

Mã thì nhiều mênh mông nhưng một số cái quan trọng bạn cần để ý như sau

Mô tả Diễn giải
100 Continue Gặp trong tình huống Client gửi Request có phần Message Body. Cái Respone này ý là Server đã nhận được Request Header và kêu ClientGửi tiếp đi cái Body ku!
200 OK Cái này thì như đã nói trên. Ý Server muốn nói với ClientHàng chú yêu cầu đây. Cắn đi
201 Created Cái này thì để phản hồi cho PUT Method của Client. Và Server phản hồi cho Client với ý “Mọi chuyện chú yêu cầu anh triển hết rồi đấy
301 Moved Permanently Khi đụng cái này Browser sẽ bị Redirect sang URL khác. Lúc này trong Respone Header sẽ có thêm Location Header. Client nên sử dụng cái URL mới này thay cho cái cũ
302 Found Cái này giống với mã 301 nhưng vì việc Redirect này chỉ có tính tạm thời nên sau đó Client cứ dùng cái URL cũ
304 Not Modified Với cái này thì Server muốn báo Browser đọc lại Cache đi vì nội dung trên Server cũng thế thôi chứ không có thay đổi gì (Server kiểm soát bằng If-Modified-SinceIf-None-Match Header)
400 Bad Request Cái này thì cái tên nói lên tất cả, vấn đề ông Client đã submit một cái HTTP Request ba xàm (ví dụ lỡ tay chỉnh bậy cái URL)
401 Unauthorized Kiểu này xuất hiện khi Client Request đến tài nguyên cần có yêu cầu xác thực khi Server vẫn chưa xác nhận cái Authentication này. Chi tiết về các thể loại xác thực hỗ trợ sẽ được thể hiện trong WWW-Authenticate Header
403 Forbidden Phần mô tả đã quá rõ rồi, bạn bị cấm truy cập cái này, đừng hỏi lằng nhằng nữa
404 Not Found Trường hợp này thì do cái tài nguyên bạn Request hiện không có (Có thể tạm thời hoặc ông Server đã dẹp hẳn luôn rồi)
405 Method Not Allowed URL cụ thể bạn đang truy cập không hỗ trợ cái Medthod được chỉ định trong Request.
413 Request Entity Too Large Mã này xuất hiện khi cái Body của Request dài quá quy định (có thể gặp với lỗi Buffer Overflow)
414 Request URL Too Long Giống thằng ở trên. Có điều ở đây là cái URL quá dài (chắc lỗi đánh máy)
500 Internal Server Error Lỗi này xuất hiện khi Server xử lý Request có thông số đầu vào dẫn đến lỗi phát sinh mà ông dev không lường trước được
503 Service Unavailable Cái này thì cho biết cái Server vẫn chạy và xử lý tốt Request tuy nhiên ứng dụng đã bị lỗi chỗ nào khác (bạn cần thử lại xem mình có thao tác vớ vẩn gì không hay lỗi hoàn toàn do cái ứng dụng)

Phù! Thế là tạm xong với các nội dung cơ bản của HTTP. Trong kỳ tới tôi sẽ bàn sang cái vấn đề chính mà tôi đang hướng đến là HTTPS.

4 thoughts on “Giải ngố WWW – Phần 2: 4 điều cơ bản phải biết về HTTP”

Leave a Reply

Your email address will not be published. Required fields are marked *