Skip to content

Giao thức HTTP: "Ngôn ngữ giao tiếp" giữa frontend và backend

🎯 Câu hỏi cốt lõi

HTTP hoạt động như thế nào? Điều này giống như hỏi: hai người trò chuyện với nhau như thế nào? Cần thống nhất ngôn ngữ, ngữ pháp, quy tắc hội thoại. HTTP chính là "giao thức hội thoại" giữa frontend và backend.


0. Bản chất của HTTP

HTTP (HyperText Transfer Protocol, Giao thức truyền tải siêu văn bản) là giao thức cơ bản cho giao tiếp giữa frontend và backend.

0.1 So sánh với hội thoại

Yếu tố hội thoạiTương ứng trong HTTPGiải thích
Ngôn ngữGiao thức HTTPNgôn ngữ mà cả hai bên đều hiểu
Ngữ phápĐịnh dạng request/responseCách "nói chuyện"
Quy trìnhMô hình request-responseMột hỏi một đáp
Kết thúcNgắt kết nốiĐóng kết nối TCP

1. Lịch sử phát triển của HTTP

HTTP ra đời từ năm 1991 và đã trải qua nhiều lần nâng cấp lớn.

🌐HTTP Protocol Demo
📤HTTP request
GET/api/users/123HTTP/1.1
Host:api.example.com
User-Agent:Mozilla/5.0
Accept:application/json
Authorization:Bearer xxx
TCP connection
📥HTTP response
HTTP/1.1200OK
Content-Type:application/json
Content-Length:156
Cache-Control:max-age=3600
{ "id": 123, "name": "Alice", "email": "alice@example.com" }

1.1 So sánh các phiên bản

Phiên bảnNămCải tiến cốt lõiĐặc điểm điển hình
HTTP/0.91991Chỉ hỗ trợ GETVăn bản thuần, chỉ có request, không có response header
HTTP/1.01996Thêm POST/HEADMỗi request một kết nối TCP
HTTP/1.11997Kết nối bền vữngKeep-Alive, một kết nối nhiều request
HTTP/22015Đa kênhKhung nhị phân, nén header
HTTP/32022Dựa trên QUICTruyền qua UDP, giải quyết chặn đầu hàng

💡 Tại sao cần HTTP/2?

HTTP/1.1 tuy hỗ trợ kết nối bền vững, nhưng các request phải được gửi tuần tự (phải nhận được response của request trước thì mới gửi được request tiếp theo). HTTP/2 đã giải quyết vấn đề này thông qua đa kênh, cho phép gửi nhiều request đồng thời.


2. Cấu trúc HTTP request

2.1 Dòng request

http
GET /api/users/123 HTTP/1.1

Bao gồm ba phần:

  • Phương thức: GET, POST, PUT, DELETE, v.v.
  • URL: Đường dẫn tài nguyên được yêu cầu
  • Phiên bản: HTTP/1.1 hoặc HTTP/2

2.2 Request header

http
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer xxx
Content-Type: application/json
Content-Length: 45

Các request header phổ biến:

HeaderGiải thíchVí dụ
HostTên miền máy chủapi.example.com
User-AgentThông tin clientMozilla/5.0
AcceptKiểu response chấp nhậnapplication/json
AuthorizationThông tin xác thựcBearer token
Content-TypeKiểu của request bodyapplication/json

2.3 Request body

json
{
  "name": "张三",
  "email": "zhangsan@example.com"
}

Chỉ các phương thức POST, PUT, PATCH mới có request body.


3. Cấu trúc HTTP response

3.1 Dòng trạng thái

http
HTTP/1.1 200 OK

Bao gồm ba phần:

  • Phiên bản: HTTP/1.1
  • Mã trạng thái: 200, 404, 500, v.v.
  • Văn bản trạng thái: OK, Not Found, v.v.

3.2 Response header

http
Content-Type: application/json
Content-Length: 156
Cache-Control: max-age=3600
Set-Cookie: session=xxx; HttpOnly

Các response header phổ biến:

HeaderGiải thíchVí dụ
Content-TypeKiểu của response bodyapplication/json
Content-LengthKích thước response body156
Cache-ControlChiến lược cachemax-age=3600
Set-CookieThiết lập Cookiesession=xxx

3.3 Response body

json
{
  "code": 0,
  "data": {
    "id": 123,
    "name": "张三"
  }
}

4. Chi tiết về các phương thức HTTP

Phương thứcMục đíchRequest bodyTính lũy đẳngTính an toàn
GETLấy tài nguyênKhông
POSTTạo tài nguyênKhôngKhông
PUTCập nhật toàn bộKhông
PATCHCập nhật một phầnKhôngKhông
DELETEXóa tài nguyênKhôngKhông
HEADLấy headerKhông
OPTIONSTruy vấn phương thức hỗ trợKhông

4.1 GET vs POST

Đặc tínhGETPOST
Vị trí tham sốTham số truy vấn URLRequest body
CacheCó thể cacheMặc định không cache
BookmarkCó thể bookmarkKhông thể
Lịch sửLưu trong lịch sử trình duyệtKhông lưu
Độ dài dữ liệuCó giới hạn (độ dài URL)Không giới hạn
Bảo mậtTham số hiển thị trong URLTham số nằm trong request body

💡 Khi nào dùng GET/POST?

  • GET: Truy vấn, lấy dữ liệu
  • POST: Tạo, gửi dữ liệu
  • PUT: Cập nhật toàn bộ (thay thế toàn bộ tài nguyên)
  • PATCH: Cập nhật một phần (chỉ sửa các trường được chỉ định)
  • DELETE: Xóa tài nguyên

5. Mã trạng thái HTTP

5.1 Phân loại mã trạng thái

Phân loạiGiải thíchMã trạng thái điển hình
2xxThành công200 OK、201 Created、204 No Content
3xxChuyển hướng301 Vĩnh viễn、302 Tạm thời、304 Không thay đổi
4xxLỗi phía client400 Lỗi tham số、401 Chưa xác thực、404 Không tồn tại
5xxLỗi phía server500 Lỗi nội bộ、503 Không khả dụng

5.2 Các mã trạng thái thường dùng

Mã trạng tháiGiải thíchTình huống sử dụng
200 OKRequest thành côngRequest GET, PUT thành công
201 CreatedTạo thành côngPOST tạo tài nguyên thành công
204 No ContentKhông có nội dungDELETE xóa thành công
301 Moved PermanentlyChuyển hướng vĩnh viễnURL thay đổi vĩnh viễn
302 FoundChuyển hướng tạm thờiURL thay đổi tạm thời
304 Not ModifiedKhông thay đổiCache còn hiệu lực
400 Bad RequestLỗi tham sốĐịnh dạng tham số request sai
401 UnauthorizedChưa xác thựcCần đăng nhập
403 ForbiddenKhông có quyềnĐã đăng nhập nhưng không đủ quyền
404 Not FoundKhông tồn tạiTài nguyên không tồn tại
500 Internal Server ErrorLỗi nội bộMáy chủ gặp ngoại lệ
503 Service UnavailableKhông khả dụngMáy chủ đang bảo trì hoặc quá tải

6. HTTPS: HTTP an toàn

6.1 HTTP vs HTTPS

Đặc tínhHTTPHTTPS
Giao thứcTCPTCP + SSL/TLS
Cổng80443
Dữ liệuTruyền văn bản rõTruyền mã hóa
Chứng chỉKhông cầnCần chứng chỉ SSL
Hiệu năngNhanh hơn một chútChậm hơn một chút (chi phí bắt tay)
SEOKhông ảnh hưởngĐược công cụ tìm kiếm ưu tiên lập chỉ mục

6.2 Quy trình hoạt động của HTTPS

  1. Client Hello:Client gửi các bộ mã hóa được hỗ trợ
  2. Server Hello:Server trả về chứng chỉ và bộ mã hóa đã chọn
  3. Xác minh chứng chỉ:Client xác minh tính hợp lệ của chứng chỉ server
  4. Trao đổi khóa:Sử dụng mã hóa bất đối xứng để trao đổi khóa phiên
  5. Giao tiếp mã hóa:Sử dụng khóa phiên để giao tiếp mã hóa đối xứng

💡 Ưu điểm của HTTPS

  • Chống nghe lén:Dữ liệu được mã hóa, bên thứ ba không thể đọc được
  • Chống giả mạo:Kiểm tra tính toàn vẹn của dữ liệu
  • Chống mạo danh:Chứng chỉ SSL xác minh danh tính máy chủ

7. Cơ chế cache của HTTP

7.1 Cache header

HeaderGiải thíchVí dụ
Cache-ControlChiến lược cachemax-age=3600
ETagSố phiên bản tài nguyên"33a64df551425fcc"
Last-ModifiedThời gian sửa đổi cuối cùngWed, 21 Oct 2015 07:28:00 GMT

7.2 Chiến lược cache

Cache cứng

http
Cache-Control: max-age=3600

Trong vòng 3600 giây, trình duyệt sử dụng trực tiếp cache, không gửi request.

Cache thương lượng

http
ETag: "33a64df551425fcc"

Trình duyệt gửi If-None-Match, server trả về 304 (không thay đổi) hoặc 200 (đã thay đổi).


8. Các câu hỏi thường gặp

8.1 Sự khác biệt bản chất giữa GET và POST

Hiểu lầm:GET và POST chỉ khác nhau ở vị trí tham số.

Sự thật

  • GET có tính lũy đẳng, nhiều lần request cho kết quả giống nhau
  • POST không có tính lũy đẳng, nhiều lần request có thể tạo ra nhiều tài nguyên
  • GET có thể được cache, POST mặc định không cache
  • GET có thể lưu bookmark, POST không thể

8.2 Chặn đầu hàng trong HTTP/1.1

Vấn đề:HTTP/1.1 tuy hỗ trợ kết nối bền vững, nhưng các request phải được gửi tuần tự. Request trước phản hồi chậm, các request sau đều phải chờ.

Giải pháp

  • HTTP/2 đa kênh
  • Phân mảnh tên miền (nhiều tên miền thiết lập nhiều kết nối)
  • Connection pool (giới hạn số lượng kết nối đồng thời)

8.3 Ưu điểm của HTTP/2

Đặc tínhHTTP/1.1HTTP/2
Định dạng truyềnVăn bảnKhung nhị phân
Đa kênhKhông hỗ trợHỗ trợ
Nén headerKhôngThuật toán HPACK
Server pushKhông hỗ trợHỗ trợ

Bảng tra cứu thuật ngữ

Thuật ngữTiếng AnhGiải thích
HTTPHyperText Transfer ProtocolGiao thức truyền tải siêu văn bản
HTTPSHTTP SecureHTTP + SSL/TLS
TCPTransmission Control ProtocolGiao thức điều khiển truyền tải
SSL/TLSSecure Sockets LayerLớp socket bảo mật
Tính lũy đẳngIdempotentNhiều lần request cho kết quả giống nhau
Kết nối bền vữngKeep-AliveMột kết nối TCP gửi nhiều request
Đa kênhMultiplexingGửi nhiều request đồng thời
Chặn đầu hàngHead-of-Line BlockingRequest phía trước chặn request phía sau