HTTP (HyperText Transfer Protocol) là giao thức nền tảng dùng để trao đổi dữ liệu trên web. Nó hoạt động theo mô hình client-server, trong đó client - thường là trình duyệt web - khởi tạo các yêu cầu (request) để lấy tài nguyên, và server sẽ phản hổi (response) với dữ liệu được yêu cầu
Chu trình Request - Response (Yêu cầu - phản hồi) - Request - response cycle
Khi bạn nhập một địa chỉ web hoặc nhấn vào một liên tiếp, trình duyệt của bạn (client) sẽ gửi một yêu cầu HTTP tới server lưu trữ trang web đó
Server nhận yêu cầu, xử lý và gửi lại một phản hồi HTTP chứa tài nguyên được yêu cầu (VD: Trang HTML, hình ảnh, hoặc dữ liệu khác)
HTTP Messages (thông điệp HTTP)
Giao tiếp diễn ra thông qua HTTP Messages:
Request (Yêu cầu): Chứa phương thức HTTP (Như: GET, POST), URL, các header (thông tin như loại trình duyệt), và đôi khi có phần body (dữ liệu gửi lên, VD khi gửi form)
Response (Phản hồi): Bao gồm các trạng thái như (200 OK hoặc 404 Not Found), các header (metadata), và body (nội dung thực tế như HTML)
HTTP Method
Một số phương thức HTTP phổ biến
GET: Lấy dữ liệu từ server
POST: Gửi dữ liệu lên server (VD: gửi form)
PUT: Cập nhật dữ liệu có sẵn
Được sử dụng để cập nhật (hoặc tạo mới nếu chưa có) và sẽ thay thế toàn bộ tài nguyên trên server bằng dữ liệu bạn gửi lên. Nghĩa là, nếu bạn chỉ gửi một phần dữ liệu, các trường còn lại sẽ bị ghi đè hoặc mất đi
PATCH: Cập nhật một phần tài nguyên (chỉ những trường được chỉ định)
Chỉ cập nhật những trường (field) cụ thể mà bạn gửi trong request, các trường khác của tài nguyên sẽ được giữ nguyên. PATCH không thay thế toàn bộ tài nguyên mà chỉ áp dụng các thay đổi một phần
DELETE: Xóa dữ liệu
Statelessness (Không trạng thái)
HTTP là giao thức statelessness: Mỗi yêu cầu là độc lập, không lưu lại thông tin về các yêu cầu trước đó. Để duy trì phiên làm việc của người dùng (VD: Đăng nhập), các cơ chế như cookie sẽ được sử dụng
Underlying Transport (Giao thức truyền tải bên dưới)
HTTP chạy trên các giao thức truyền tải đáng tin cậy, phổ biến nhất là TCP. Trước khi gửi yêu cầu, một kết nối TCP được thiết lập giữa client và server
Các phiên bản hiện đại như HTTP/2 và HTTP/3 cải thiện hiệu suất bằng cách cho phép nhiều yêu cầu trên một kết nối và truyền dữ liệu nhanh hơn
Example flow
Bạn nhập địa chỉ trang web vào trình duyệt
Trình duyệt gửi yêu cầu GET đến server
Server phản hồi với mã HTML của trang
Trình duyệt tiếp tục gửi các yêu cầu bổ sung để lấy hình ảnh, CSS, script cần thiết để hiển thị trang hoàn chỉnh
500 (Internal Server Error), 502 (Bad Gateway), 503 (Service Unavailable)
💡
Nhóm mã đầu 3xx
Khi server trả về mã 3xx, nó thông báo cho client rằng tài nguyên được yêu cầu không còn ở URL cũ nữa, mà đã được chuyển sang một địa chỉ khác (tạm thời hoặc vĩnh viễn), hoặc cần thực hiện thêm hành động để lấy được tài nguyên đó. Trình duyệt sẽ tự động chuyển hướng đến URL mới nếu server cung cấp thông tin này trong header "Location”
Một số mã phổ biến:
301 (Moved Permanently): Tài nguyên đã được chuyển vĩnh viễn sang URL mới. Trình duyệt và các công cụ tìm kiếm sẽ cập nhật lại đường dẫn này.
302 (Found/Moved Temporarily): Tài nguyên tạm thời chuyển sang URL khác. Trình duyệt sẽ chuyển hướng, nhưng vẫn giữ nguyên URL cũ cho các lần sau.
304 (Not Modified): Tài nguyên chưa thay đổi kể từ lần truy cập trước, nên client có thể dùng bản lưu trong cache mà không cần tải lại.
Response body
Phần thân (response body) của phản hồi HTTP 304 (Not Modified) phải để trống; không chứa bất kỳ nội dung nào. Theo đặc tả của HTTP, khi server trả về mã trạng thái 304, nó chỉ bao gồm các header liên quan (như ETag, Cache-Control, Expires, v.v.) để giúp client xác thực bản sao đã lưu trong cache, không gửi kèm dữ liệu nội dung hoặc tài nguyên.
Thiết kế này cho phép client (ví dụ: trình duyệt) sử dụng lại phiên bản tài nguyên đã lưu trong cache, giúp tiết kiệm băng thông và tăng hiệu suất. Nếu server gửi kèm nội dung trong phản hồi 304, điều đó là không đúng với tiêu chuẩn HTTP.
Woking flow
Khi client (trình duyệt) truy cập lại một URL, nó sẽ gửi request lên server kèm theo thông tin về phiên bản tài nguyên mà nó đã lưu trong cache (thường thông qua header If-Modified-Since hoặc If-None-Match với giá trị ETag).
Server sẽ kiểm tra xem tài nguyên trên server có bị thay đổi so với phiên bản client đang giữ không:
Nếu tài nguyên KHÔNG thay đổi: server trả về mã 304 Not Modified. Lúc này, client sẽ sử dụng lại bản đã lưu trong cache, không cần tải lại từ server.
Nếu tài nguyên ĐÃ thay đổi: server trả về mã 200 OK kèm theo dữ liệu mới, và client sẽ cập nhật lại cache của mình.
Tóm lại:
Server KHÔNG kiểm tra trực tiếp cache của client, mà so sánh thông tin phiên bản tài nguyên client gửi lên với bản hiện tại trên server.
Nếu giống nhau, server trả về 304 và client dùng lại bản cache
300 (Multiple Choices): Có nhiều lựa chọn cho tài nguyên, client cần chọn một trong số đó
Bảng tóm tắt
Bước
Hành động của Client
Hành động của Server
1. Khởi tạo
Gửi yêu cầu HTTP
Chờ nhận yêu cầu
2. Giao tiếp
Gửi phương thức, URL, header, body
Xử lý yêu cầu, chuẩn bị phản hồi
3. Phản hồi
Chờ phản hồi
Gửi phản hồi HTTP (trạng thái, header, body)
4. Hiển thị
Hiển thị nội dung
-
UDP (User Datagram Protocol)
UDP là một giao thức truyền tải dữ liệu thuộc bao giao thức TCP/ IP, được thiết kế để truyền dữ liệu nhanh chóng và hiệu quả giữa các thiết bị trong mạng máy tính.
Đặc điểm chính của UDP
Không kết nối (Connectionless)
UDP không thiết lập kết nối trước khi truyền dữ liệu. Người gửi có thể gửi các gói tin (datagram) trực tiếp đến người nhận mà không cần three-way shakehand
Không đảm bảo độ tin cậy
UDP không đảm bảo các gói tin sẽ đến nơi, đến đúng thứ thự hoặc không bị trùng lặp. Nếu có gói tin bị mất hoặc lỗi, UDP không tự động gửi lại
Tốc độ cao, độ trễ thấp
Do không cần xác nhận, kiểm soát lỗi hay thiết lập kết nối, UDP truyền dữ liệu rất nhanh và có độ trễ thấp, phù hợp với các ứng dụng thời gian thực như truyền video, âm thanh, game online, VoIP, DNS
Cấu trúc đơn giản
Mỗi gói UDP gồm phần header (nguồn, đích, độ dài, checksum) và phần dữ liệu. Header UDP rất nhỏ gọn, giúp giảm tải cho hệ thống
Ứng dụng phổ biến của UDP
Truyền phát video, âm thanh trực tiếp (streaming)
Trò chơi trực tuyến (online gaming)
Cuộc gọi thoại qua Internet (VoIP)
Hệ thống tên miền (DNS)
Các ứng dụng yêu cầu truyền dữ liệu nhanh, không cần đảm bảo độ tin cậy tuyệt đối
So sánh UDP và TCP
Tiêu chí
TCP (Transmission Control Protocol)
UDP (User Datagram Protocol)
Kết nối
Hướng kết nối (phải thiết lập và đóng kết nối)
Không kết nối (không cần thiết lập kết nối)
Độ tin cậy
Đảm bảo dữ liệu đến nơi, đúng thứ tự, không mất
Không đảm bảo dữ liệu đến nơi, có thể mất gói
Kiểm soát lỗi
Có kiểm tra, phát hiện và sửa lỗi, truyền lại
Chỉ kiểm tra lỗi cơ bản, không truyền lại
Kiểm soát luồng
Có kiểm soát luồng và tắc nghẽn
Không có kiểm soát luồng
Thứ tự gói tin
Đảm bảo đúng thứ tự
Không đảm bảo thứ tự, ứng dụng phải tự xử lý
Tốc độ
Chậm hơn UDP do nhiều bước xác nhận, kiểm tra
Nhanh hơn TCP, độ trễ thấp
Kích thước header
Lớn hơn (20 byte trở lên)
Nhỏ gọn (8 byte)
Ứng dụng phù hợp
Web, email, truyền file, ứng dụng cần độ tin cậy
Truyền video, âm thanh, game online, DNS
Truyền lại gói tin
Có (nếu mất sẽ gửi lại)
Không (mất là bỏ qua)
Phát sóng (Broadcast)
Không hỗ trợ
Hỗ trợ
HTTPS (Hypertext Transfer Protocol Secure)
Là phiên bản bảo mật của HTTP, sử dụng SSL/ TLS để mã hóa dữ liệu truyền giữa trình duyệt và máy chủ, đảm bảo tính riêng từ và toàn vẹn dữ liệu
💡
SSL/ TLS
SSL (Secure sockets layer)
TLS (Transport layer security)
Là các giao thức bảo mật được dùng để mã hóa và bảo vệ dữ liệu khi truyền tải qua internet, đặc biệt là giữa trình duyệt của người dùng và máy chủ web. Khi sử dụng SSL/TLS dữ liệu được mã hóa nhằm ngăn chặn việc nghe lén đánh cắp hoặc giả mạo thông tin bởi các bên thứ ba
Cách hoạt động:
Khi trình duyệt kết nối đến một website sử dụng SSL/ TLS, máy chủ sẽ gửi một certificate chứa public-key
Trình duyệt xác thực certificate này để đảm bảo website là hợp lệ và không bị giả mạo
Sau khi xác thực, trình duyệt tạo một session-key và mã hóa nó bằng public-key của máy chủ rồi gửi lại cho máy chủ
Máy chủ giải mã session-key bằng private-key . Từ đó, cả hai bên dùng session-key này để mã hóa và giải mã toàn bộ dữ liệu truyền tải trong phiên giao dịch đó
Chức năng chỉnh của SSL / TLS:
Mã hóa (Encryption): Bảo vệ dữ liệu khỏi bị đọc lén trong quá trình truyền tải.
Xác thực (Authentication): Đảm bảo danh tính của website hoặc máy chủ mà người dùng đang kết nối
Toàn vẹn dữ liệu (Integrity): Ngăn chặn việc dữ liệu bị thay đổi, giả mạo khi truyền qua mạng
Phiên bản
SSL là phiên bản đầu tiên nhưng đã lỗi thời và không còn được sử dụng do các lỗ hỏng bảo mật
TLS là phiên bản kế tiếp, cải tiến về bảo mật và hiệu suất, với các phiên bản phổ biến hiện nay là TLS 1.2 và TLS 1.3
Ứng dụng thực tế
SSL/TLS là nền tảng của HTTPS, giúp bảo mật các website, giao dịch điện tử, thông tin cá nhân, tài khoản ngân hàng và nhiều dịch vụ trực tuyến khác
Hoạt động trên port 443 (HTTP là 80)
Quy trình kết nối gồm:
Trình duyệt và server trao đổi certificate , xác thực, thiết lập khóa mã hóa dùng chung (public key ), sau đó mọi dữ liệu đều được mã hóa trước khi truyền tải
REST (Representational State Transfer)
Là kiến trúc API phổ biến, sử dụng HTTP làm giao thức truyền thông
Tài nguyên được định danh qua URL, thao tác qua các HTTP method:
GET, POST, PUT, DELETE
Dữ liệu có thể truyền qua body (POST, PUT) hoặc query string (GET).
Header HTTP mang thông tin metadata, xác thực, định dạng dữ liệu (JSON, XML...).
HTTP Polling & Long Polling
HTTP Polling: Client gửi request liên tục định kỳ để kiểm tra dữ liệu mới. Đơn giản nhưng gây lãng phí tài nguyên và tăng độ trễ
HTTP Long Polling: Client gửi request, server giữ kết nối mở tới khi có dữ liệu mới trả về, sau đó client lập tức gửi request tiếp theo
Ưu điểm: Đẩy dữ liệu realtime mà không cần kết nối liên tục như websocket
Nhược điểm: Tốn tài nguyên server khi có nhiều kết nối đồng thời, độ trễ vẫn cao hơn WebSocket
WebSocket
Giao thức hai chiều (full-duplex) cho phép client và server trao đổi dữ liệu liên tục qua một kết nối TCP duy nhất
💡
TCP (Transmission Control Protocol)
Là một trong hai giao thức cốt lõi của bộ giao thức internet (TCP/ IP), đóng vai trò quan trọng trong việc truyền dữ liệu giữa các thiết bị qua mạng.
TCP là giao thức hướng kết nối (connection-oriented), nghĩa là trước khi truyền dữ liệu, hai thiết bị phải thiết lập kết nối thông qua quá trình bắt tay ba bước (three-way hanshake): SYN, SYN-ACK, ACK
Sau khi kết nối được thiết lập, TCP chia nhỏ dữ liệu thành các gói tin (segment), đánh số thứ tự và gửi đi.
→ Giao thức này đảm bảo rằng dư liệu đến đích sẽ được nhận đầy đủ, đúng thứ tự và không bị trùng lặp hay mất mát. Nếu có gói tin bị mất hoặc lỗi, TCP sẽ tự động gửi lại gói đó. Ngoài ra, TCP còn có cơ chế kiểm soát luồng (flow control) và kiểm soát tắt nghẽn (congestion control) để tối ưu hiệu suất truyền tải và tránh quá tải mạng
TCP thường được sử dụng cho các ứng dụng yêu cầu độ tin cậy cao như web (HTTP/HTTPS), email, truyền tải file (FTP), v.v So với UDP, TCP chậm hơn nhưng đảm bảo dữ liệu dược truyền tải an toàn và chính xác
Phù hợp cho ứng dụng realtime: chat, game, collaborative tool, live data feed, IoT…
Kết nối được thiết lập qua HTTP Upgrade, sau đó chuyển sang WebSocket protocol, giữ kết nối mở lâu dài, giảm latency và overhead so với polling.
gRPC
Framework RPC (Remote Procedure Call) hiện đại, sử dụng HTTP/2 làm nền tảng, hỗ trợ truyền dữ liệu nhị phân hiệu quả với Protocol Buffers
Định nghĩa service và message qua file .proto, tự động sinh code client/ server