HTTP - HTTPS
Last updated
Last updated
HTTP server là một phần mềm hoặc dịch vụ được sử dụng để phục vụ các tệp tin và trang web qua giao thức HTTP (Hypertext Transfer Protocol). Khi một máy tính hoặc thiết bị kết nối với HTTP server thông qua một trình duyệt web, nó có thể gửi các yêu cầu HTTP (như yêu cầu trang web cụ thể) và nhận lại các phản hồi từ server. Các phản hồi này thường là các tệp tin HTML, hình ảnh, CSS, JavaScript và các tài nguyên khác.
HTTP server có thể chạy trên nhiều hệ điều hành như Windows, Linux hoặc macOS và được triển khai bởi các phần mềm như Apache HTTP Server, Nginx, Microsoft IIS (Internet Information Services) và nhiều lựa chọn khác. Các HTTP server thường được cấu hình để lắng nghe trên một cổng cụ thể (thông thường là cổng 80 cho HTTP và cổng 443 cho HTTPS) và xử lý các yêu cầu từ các máy tính từ xa.
Khi bạn truy cập vào một trang web, trình duyệt của bạn gửi yêu cầu HTTP đến server và server phản hồi bằng cách gửi lại mã HTML, CSS, JavaScript và các tài nguyên khác để hiển thị trang web đó trên trình duyệt của bạn.
HTTP client là một phần mềm hoặc dịch vụ được sử dụng để gửi yêu cầu HTTP đến một HTTP server và nhận lại các phản hồi từ server đó. HTTP client thường được sử dụng trong các ứng dụng web, trình duyệt web và các công cụ phân tích mạng.
Khi một HTTP client gửi yêu cầu đến một server, nó tạo ra một yêu cầu HTTP có chứa các thông tin như URL (Uniform Resource Locator), phương thức yêu cầu (GET, POST, PUT, DELETE, v.v.), các trường tiêu đề (header) và dữ liệu yêu cầu (nếu có). Sau đó, yêu cầu này được gửi đến server thông qua giao thức mạng (ví dụ: TCP/IP). Server nhận yêu cầu và xử lý nó, sau đó gửi lại phản hồi HTTP chứa dữ liệu được yêu cầu hoặc mã lỗi (nếu có) đến client.
Sự khác nhau:
HTTP (Hypertext Transfer Protocol) và HTTPS (Hypertext Transfer Protocol Secure) là hai giao thức truyền thông được sử dụng để truyền tải dữ liệu qua Internet, với một số khác biệt quan trọng:
Chức năng: HTTP là giao thức chuẩn để truyền tải tài liệu siêu văn bản như HTML. Nó là nền tảng của việc trao đổi thông tin trên World Wide Web.
Cổng (Port): Mặc định sử dụng cổng 80.
Bảo mật: HTTP không cung cấp bất kỳ bảo mật nào cho dữ liệu truyền tải. Dữ liệu được truyền đi dưới dạng văn bản thuần (plaintext), dễ bị tấn công và đánh cắp.
Sử dụng: HTTP thường được sử dụng cho các trang web không yêu cầu bảo mật cao như trang thông tin công cộng, blog, diễn đàn,...
Chức năng: HTTPS là phiên bản bảo mật của HTTP. Nó sử dụng SSL (Secure Sockets Layer) hoặc TLS (Transport Layer Security) để mã hóa dữ liệu truyền tải.
Cổng (Port): Mặc định sử dụng cổng 443.
Bảo mật: HTTPS mã hóa dữ liệu giữa trình duyệt và máy chủ, ngăn chặn việc dữ liệu bị đọc hoặc sửa đổi bởi bên thứ ba. Nó cũng xác thực máy chủ, đảm bảo rằng người dùng đang giao tiếp với máy chủ chính xác.
Sử dụng: HTTPS được sử dụng cho các trang web yêu cầu bảo mật như trang thanh toán trực tuyến, giao dịch ngân hàng, trang đăng nhập,...
Bảo mật: HTTPS vượt trội hơn HTTP về bảo mật do mã hóa dữ liệu và xác thực máy chủ.
Hiệu suất: HTTPS có thể chậm hơn HTTP do cần thêm quá trình mã hóa và giải mã dữ liệu, tuy nhiên sự khác biệt này thường rất nhỏ và không đáng kể với hầu hết người dùng.
SEO: Các công cụ tìm kiếm như Google ưu tiên các trang web sử dụng HTTPS, giúp cải thiện thứ hạng SEO của trang web.
HTTP: Nhanh hơn, không bảo mật, phù hợp cho các trang thông tin công cộng.
HTTPS: Bảo mật hơn, mã hóa dữ liệu, yêu cầu cho các giao dịch nhạy cảm và trang web yêu cầu xác thực.
HTTP (HyperText Transfer Protocol) có nhiều phiên bản, mỗi phiên bản cải tiến so với phiên bản trước về hiệu suất, bảo mật và tính linh hoạt. Dưới đây là các phiên bản chính của HTTP:
Chỉ hỗ trợ GET request.
Chỉ truyền dữ liệu dạng HTML thuần (không hỗ trợ hình ảnh, CSS, JS).
Không có tiêu đề (header) trong request và response.
Kết nối sẽ bị đóng ngay sau khi server gửi phản hồi.
Bổ sung phương thức mới: Hỗ trợ POST
, HEAD
.
Thêm header: Request và response có thể chứa metadata (ví dụ: Content-Type
, Content-Length
).
Hỗ trợ định dạng dữ liệu khác ngoài HTML (như hình ảnh, video, JSON).
Nhược điểm: Mỗi request đều mở một kết nối TCP mới, gây lãng phí tài nguyên và giảm hiệu suất.
Giữ kết nối lâu hơn (Persistent Connection): Cho phép sử dụng cùng một kết nối TCP để gửi nhiều request (Keep-Alive).
Thêm các phương thức mới: PUT
, DELETE
, OPTIONS
, TRACE
.
Hỗ trợ chunked transfer encoding: Giúp truyền dữ liệu lớn mà không cần biết trước kích thước.
Pipeline Requests: Cho phép gửi nhiều request cùng lúc mà không cần chờ response của request trước.
Cải thiện cache: Thêm nhiều cơ chế kiểm soát bộ nhớ đệm với các header như ETag
, Cache-Control
.
Nén header bằng HPACK: Giảm kích thước request và response.
Hỗ trợ multiplexing: Cho phép gửi nhiều request đồng thời trên một kết nối TCP duy nhất.
Server Push: Server có thể gửi tài nguyên cho client mà không cần client yêu cầu (hữu ích cho việc tải trước CSS, JS).
Binary Protocol: HTTP/2 sử dụng binary thay vì text như HTTP/1.1, giúp parsing nhanh hơn.
Cải thiện tốc độ: Giảm độ trễ, tăng hiệu suất tải trang.
Chuyển từ TCP sang QUIC: QUIC là giao thức truyền tải mới chạy trên UDP, giúp giảm độ trễ.
Tích hợp TLS 1.3: Cải thiện bảo mật và tốc độ handshake.
Hạn chế vấn đề head-of-line blocking: Nhờ QUIC, dữ liệu không bị chặn nếu một gói tin bị mất.
Cải thiện hiệu suất trên mạng không ổn định: Phù hợp hơn với thiết bị di động, mạng Wi-Fi, 4G, 5G.
Phiên bản
Kết nối TCP
Multiplexing
Compression
Bảo mật
HTTP/0.9
Mở/kết thúc mỗi request
❌
❌
❌
HTTP/1.0
Mở/kết thúc mỗi request
❌
❌
❌
HTTP/1.1
Keep-Alive
Pipeline (không hiệu quả)
❌
✅ (TLS 1.2)
HTTP/2
Keep-Alive
✅
✅ (HPACK)
✅ (TLS 1.2, 1.3)
HTTP/3
QUIC (UDP)
✅
✅ (HPACK)
✅ (TLS 1.3)
Kết luận:
HTTP/1.1 vẫn phổ biến nhưng không tối ưu về hiệu suất.
HTTP/2 cải thiện tốc độ tải trang nhờ multiplexing và nén header.
HTTP/3 khắc phục nhược điểm của HTTP/2 khi gặp mạng kém ổn định bằng cách sử dụng QUIC.
Hiện nay, HTTP/2 và HTTP/3 đang được khuyến khích sử dụng để tối ưu hiệu suất website và ứng dụng. 🚀