Giao thức HTTP và HTTPS là gì?

1. HTTP là gì?

HTTP (Hypertext Transfer Protocol) là giao thức truyền tải siêu văn bản, được sử dụng để trao đổi dữ liệu giữa client (máy khách) và server (máy chủ).

Ban đầu, HTTP được phát triển để trao đổi các tài liệu trên Web. Ngày nay, giao thức này còn được sử dụng rộng rãi trong các ứng dụng và dịch vụ mạng, đặc biệt là các API.

HTTP hoạt động theo mô hình client–server và sử dụng cơ chế request–response (yêu cầu–phản hồi). Client gửi yêu cầu đến server, sau đó server xử lý và trả về phản hồi tương ứng.

2. WWW, HTML và URL là gì?

WWW (World Wide Web), thường gọi là Web, là hệ thống các tài nguyên được liên kết với nhau và có thể truy cập thông qua Internet. Những tài nguyên này bao gồm trang web, hình ảnh, video và nhiều loại dữ liệu khác.

HTML (HyperText Markup Language) là ngôn ngữ đánh dấu được sử dụng để cấu trúc nội dung trang web. Siêu liên kết (hyperlink) cho phép người dùng chuyển từ một tài nguyên sang tài nguyên khác.

Để xác định tài nguyên cần truy cập, Web sử dụng URL (Uniform Resource Locator).

Ví dụ:

https://example.com/blog/article?id=10

Các thành phần chính của URL gồm:

  • Scheme: https — cho biết cơ chế truy cập được sử dụng.
  • Host: example.com — tên máy chủ cần truy cập.
  • Port: cổng kết nối. Nếu không được chỉ định, trình duyệt thường sử dụng cổng mặc định tương ứng với scheme.
  • Path: /blog/article — đường dẫn tài nguyên.
  • Query: ?id=10 — chứa các tham số được gửi kèm URL.

HTTP thường sử dụng cổng 80, trong khi HTTPS thường sử dụng cổng 443. Đây là các cổng mặc định, không phải cổng bắt buộc.

URI (Uniform Resource Identifier) là khái niệm dùng để định danh tài nguyên. URL là một loại URI; URN (Uniform Resource Name) là một loại URI khác, dùng để định danh tài nguyên theo một không gian tên cụ thể.

URL có cần chứa www không?

Không phải website nào cũng sử dụng tiền tố www. Ví dụ, https://example.com và https://www.example.com là hai hostname khác nhau, dù chủ website có thể cấu hình chúng dẫn đến cùng một nội dung.

Việc sử dụng hay không sử dụng www tự nó không quyết định thứ hạng SEO. Điều quan trọng là cấu hình tên miền nhất quán và thiết lập chuyển hướng phù hợp nếu website cung cấp nhiều phiên bản địa chỉ cho cùng một nội dung.

3. HTTP hoạt động như thế nào?

HTTP hoạt động theo cơ chế request–response:

  1. Client gửi request: Trình duyệt hoặc ứng dụng gửi yêu cầu đến server.
  2. Server xử lý request: Server tiếp nhận yêu cầu, thực hiện các thao tác cần thiết và tạo kết quả phản hồi.
  3. Server trả response: Response chứa mã trạng thái, các header và nội dung phản hồi nếu có.
  4. Client xử lý response: Trình duyệt hiển thị nội dung, ứng dụng sử dụng dữ liệu hoặc thông báo lỗi tùy theo kết quả nhận được.

Khi người dùng truy cập một website, trình duyệt thường sử dụng DNS để phân giải tên miền thành địa chỉ IP. Sau đó, trình duyệt thiết lập hoặc tái sử dụng kết nối phù hợp để trao đổi dữ liệu với máy chủ.

Quá trình này không chỉ diễn ra khi tải trang HTML mà còn khi trình duyệt yêu cầu hình ảnh, tệp CSS, JavaScript hoặc dữ liệu từ API.

HTTP cũng được sử dụng rộng rãi để xây dựng API. Ví dụ, một ứng dụng điện thoại có thể gửi request đến server để lấy danh sách sản phẩm hoặc gửi thông tin đăng ký tài khoản.

4. HTTP request và response

HTTP request và response là hai loại thông điệp cơ bản được sử dụng để client và server trao đổi dữ liệu.

4.1. HTTP request

Một HTTP request thường bao gồm:

  • Method: cho biết ý nghĩa của thao tác mà client muốn thực hiện, chẳng hạn GET để truy xuất dữ liệu hoặc POST để gửi dữ liệu nhằm xử lý.
  • Path: đường dẫn tài nguyên mà client muốn truy cập.
  • Headers: chứa thông tin bổ sung về request, chẳng hạn loại nội dung được chấp nhận hoặc loại dữ liệu được gửi.
  • Body: phần dữ liệu gửi kèm, thường xuất hiện trong các request cần truyền dữ liệu.

Ví dụ:

GET /products HTTP/1.1
Host: example.com
Accept: application/json

Trong ví dụ này, client sử dụng method GET để truy xuất tài nguyên tại đường dẫn /products. Header Accept cho biết client có thể tiếp nhận dữ liệu JSON.

4.2. HTTP response

Sau khi xử lý request, server trả về một HTTP response. Response thường bao gồm:

  • Status code: mã trạng thái cho biết kết quả xử lý request.
  • Headers: chứa thông tin bổ sung về response, chẳng hạn loại nội dung được trả về.
  • Body: chứa dữ liệu phản hồi nếu có, chẳng hạn HTML, JSON, hình ảnh hoặc dữ liệu nhị phân khác.

Ví dụ:

HTTP/1.1 200 OK
Content-Type: application/json

{"id": 1, "name": "Product A"}

Trong ví dụ này, server trả về trạng thái 200 OK và một đối tượng JSON chứa thông tin sản phẩm.

Không phải response nào cũng có body. Nội dung phản hồi phụ thuộc vào request, kết quả xử lý và trạng thái của hệ thống.

5. HTTP status code là gì?

HTTP status code (mã trạng thái HTTP) là mã gồm ba chữ số được gửi trong HTTP response để cho biết kết quả xử lý request hoặc trạng thái của yêu cầu.

Các mã trạng thái được chia thành năm nhóm chính.

1xx — Informational (Thông tin)

Cho biết quá trình xử lý request vẫn đang tiếp diễn.

  • 100 Continue: cho biết client có thể tiếp tục gửi phần còn lại của request.

2xx — Success (Thành công)

Cho biết request đã được xử lý thành công theo ý nghĩa của từng mã trạng thái.

  • 200 OK: request được xử lý thành công.
  • 201 Created: request đã dẫn đến việc tạo tài nguyên mới.
  • 204 No Content: request được xử lý thành công nhưng response không có body.

3xx — Redirection (Chuyển hướng)

Cho biết client có thể cần thực hiện thêm hành động để hoàn tất việc truy cập hoặc sử dụng tài nguyên đã lưu.

  • 301 Moved Permanently: tài nguyên đã được chuyển vĩnh viễn sang địa chỉ khác.
  • 302 Found: tài nguyên tạm thời được cung cấp tại địa chỉ khác.
  • 304 Not Modified: tài nguyên chưa thay đổi so với bản đã lưu, cho phép client sử dụng dữ liệu trong bộ nhớ đệm.

Với các mã chuyển hướng như 301 và 302, trình duyệt thường có thể tự động gửi request tiếp theo đến địa chỉ được chỉ định trong header Location.

4xx — Client Error (Lỗi phía yêu cầu)

Cho biết request có vấn đề hoặc không thể được thực hiện theo yêu cầu hiện tại.

  • 400 Bad Request: request không hợp lệ.
  • 401 Unauthorized: request chưa có thông tin xác thực hợp lệ.
  • 403 Forbidden: server từ chối thực hiện yêu cầu.
  • 404 Not Found: không tìm thấy tài nguyên được yêu cầu.
  • 405 Method Not Allowed: method không được hỗ trợ cho tài nguyên đó.
  • 429 Too Many Requests: client đã gửi quá nhiều request trong một khoảng thời gian.

5xx — Server Error (Lỗi phía server)

Cho biết server gặp lỗi hoặc không thể hoàn thành request tại thời điểm xử lý.

  • 500 Internal Server Error: server gặp lỗi nội bộ.
  • 502 Bad Gateway: gateway hoặc proxy nhận được phản hồi không hợp lệ từ server phía sau.
  • 503 Service Unavailable: server tạm thời không thể xử lý yêu cầu, chẳng hạn do quá tải hoặc bảo trì.
  • 504 Gateway Timeout: gateway hoặc proxy không nhận được phản hồi kịp thời từ server phía sau.

Status code giúp lập trình viên xác định hướng kiểm tra lỗi. Tuy nhiên, để tìm nguyên nhân cụ thể, cần kết hợp với log, thông tin từ ứng dụng và trạng thái của các dịch vụ liên quan.

6. HTTP truyền dữ liệu dưới dạng nào?

HTTP hỗ trợ trao đổi nhiều loại dữ liệu khác nhau. Nội dung trong body không nhất thiết phải là văn bản thuần; nó có thể là HTML, JSON, hình ảnh, video hoặc dữ liệu nhị phân.

Cách biểu diễn thông điệp phụ thuộc vào phiên bản HTTP. HTTP/1.1 sử dụng định dạng thông điệp có thể đọc được ở nhiều phần, trong khi HTTP/2 và HTTP/3 sử dụng cấu trúc khung dữ liệu nhị phân để truyền tải thông điệp.

HTTP/1.1 và HTTP/2 thường sử dụng TCP làm giao thức truyền tải. HTTP/3 sử dụng QUIC, một giao thức hoạt động trên UDP.

7. Localhost là gì?

localhost là tên máy chủ đặc biệt dùng để tham chiếu đến chính thiết bị đang chạy chương trình. Nó thường được phân giải thành địa chỉ loopback như 127.0.0.1 hoặc ::1.

Ví dụ:

http://localhost:3000

Trong URL này:

  • http là scheme.
  • localhost là host.
  • 3000 là cổng mà ứng dụng đang sử dụng.

Khi một ứng dụng Web chạy trên máy tính cá nhân và lắng nghe tại cổng 3000, trình duyệt có thể truy cập ứng dụng đó bằng địa chỉ trên.

localhost không tự tạo ra máy chủ. Cần có một ứng dụng hoặc dịch vụ đang chạy và lắng nghe trên cổng tương ứng thì trình duyệt mới có thể kết nối đến ứng dụng đó.

XAMPP, MAMP và LAMP

Đây là những tên gọi thường gặp khi thiết lập môi trường phát triển Web:

  • XAMPP: bộ công cụ đa nền tảng, thường bao gồm Apache, MariaDB, PHP và Perl.
  • MAMP: môi trường phát triển Web phổ biến trên macOS và cũng có phiên bản cho Windows.
  • LAMP: mô hình môi trường Web dựa trên Linux, Apache, MySQL hoặc hệ quản trị cơ sở dữ liệu tương thích, và PHP.

Các công cụ và mô hình này giúp thiết lập môi trường phát triển, chạy thử và kiểm thử ứng dụng Web. Chúng không phải là các giao thức HTTP và cũng không đồng nghĩa với localhost.

8. HTTPS là gì?

HTTPS (Hypertext Transfer Protocol Secure) là HTTP được truyền qua một kết nối được bảo vệ bằng TLS (Transport Layer Security).

HTTP thuần không tự mã hóa dữ liệu trên đường truyền. Vì vậy, nếu kết nối không được bảo vệ bằng cơ chế khác, người có khả năng quan sát đường truyền có thể đọc hoặc sửa đổi nội dung trao đổi.

HTTPS bổ sung lớp bảo mật cho kết nối, giúp bảo vệ dữ liệu khi truyền giữa client và server. HTTPS vẫn sử dụng cơ chế request–response của HTTP; điểm khác biệt quan trọng nằm ở việc dữ liệu được truyền qua kết nối bảo mật bằng TLS.

8.1. SSL và TLS là gì?

SSL (Secure Sockets Layer) và TLS (Transport Layer Security) là các giao thức được thiết kế để bảo vệ dữ liệu khi truyền qua mạng. TLS là dòng giao thức kế nhiệm SSL và được sử dụng trong HTTPS hiện đại.

Các phiên bản SSL cũ đã lỗi thời và không nên sử dụng. Vì vậy, dù thuật ngữ “chứng chỉ SSL” vẫn phổ biến, cách gọi chính xác hơn trong các hệ thống hiện đại là chứng chỉ TLS hoặc chứng chỉ số dùng cho HTTPS.

8.2. HTTPS bảo vệ dữ liệu như thế nào?

TLS cung cấp ba cơ chế bảo vệ quan trọng:

  • Mã hóa: giúp ngăn người không được phép đọc nội dung dữ liệu trên đường truyền.
  • Toàn vẹn dữ liệu: giúp phát hiện dữ liệu bị sửa đổi trái phép trong quá trình truyền tải.
  • Xác thực máy chủ: giúp client kiểm tra danh tính máy chủ thông qua chứng chỉ số và cơ chế xác minh phù hợp.

TLS hiện đại sử dụng kết hợp nhiều cơ chế mật mã. Chứng chỉ số giúp xác minh danh tính máy chủ và chứa khóa công khai; quá trình thiết lập kết nối sử dụng các cơ chế trao đổi khóa để tạo ra khóa phiên. Sau đó, dữ liệu trao đổi được bảo vệ chủ yếu bằng các thuật toán mã hóa đối xứng.

Nhờ vậy, kẻ tấn công có thể quan sát lưu lượng mạng nhưng không dễ dàng đọc hoặc sửa đổi nội dung của kết nối TLS nếu các cơ chế bảo mật được triển khai đúng cách.

8.3. Chứng chỉ TLS là gì?

Chứng chỉ TLS là chứng chỉ số được sử dụng để liên kết danh tính của máy chủ, chẳng hạn tên miền, với khóa công khai tương ứng.

Chứng chỉ thường được cấp hoặc xác nhận thông qua một cơ quan cấp chứng chỉ (Certificate Authority — CA) thuộc hệ thống được tin cậy. Trình duyệt kiểm tra chứng chỉ cùng các điều kiện xác minh liên quan trước khi chấp nhận kết nối.

Tuy nhiên, một website có chứng chỉ hợp lệ không đồng nghĩa website đó hoàn toàn an toàn. Chứng chỉ giúp xác minh danh tính máy chủ trong phạm vi nhất định; nó không bảo đảm rằng nội dung website không có mã độc, ứng dụng không có lỗ hổng hay chủ website là người đáng tin cậy.

9. HTTP và HTTPS khác nhau như thế nào?

HTTP và HTTPS đều được sử dụng để trao đổi dữ liệu giữa client và server. Cả hai đều có thể sử dụng method, header, status code và body của HTTP. Điểm khác biệt chính là HTTPS bảo vệ kết nối bằng TLS.

Tiêu chí HTTP HTTPS
Bảo vệ dữ liệu trên đường truyền Không tự mã hóa Được TLS bảo vệ
Mã hóa nội dung Không có sẵn trong HTTP thuần Có
Toàn vẹn dữ liệu Không được HTTP thuần bảo đảm Được TLS bảo vệ
Xác thực máy chủ Không có cơ chế tương đương TLS Có thông qua chứng chỉ và xác minh TLS
Cổng mặc định 80 443
Cơ chế request–response HTTP HTTP được truyền qua TLS
Chi phí xử lý Thường thấp hơn khi chỉ xét lớp bảo mật kết nối Có thêm chi phí xử lý TLS, nhưng thường không đáng kể trong nhiều hệ thống hiện đại

9.1. Hạn chế về bảo mật của HTTP

 

Khi sử dụng HTTP thuần qua một mạng không đáng tin cậy, dữ liệu không được HTTP tự mã hóa hoặc bảo vệ toàn vẹn. Kẻ tấn công có thể sử dụng kỹ thuật sniffing để quan sát lưu lượng mạng, hoặc thực hiện tấn công trung gian (Man-in-the-Middle — MITM) để đọc hay can thiệp vào dữ liệu nếu có điều kiện phù hợp.

Điều này đặc biệt nguy hiểm khi người dùng gửi thông tin nhạy cảm như mật khẩu hoặc dữ liệu cá nhân.

9.2. HTTPS giải quyết vấn đề này như thế nào?

HTTPS sử dụng TLS để bảo vệ dữ liệu trong quá trình truyền tải. Khi được triển khai đúng cách, HTTPS giúp giảm nguy cơ thông tin bị đọc trộm hoặc sửa đổi trên đường truyền, đồng thời giúp client xác minh danh tính máy chủ.

Tuy nhiên, HTTPS không tự động khắc phục các lỗ hổng của ứng dụng, không bảo vệ dữ liệu khi máy chủ đã bị xâm nhập và cũng không bảo đảm rằng website không có hành vi lừa đảo.

9.3. HTTPS có làm website chậm hơn không?

TLS bổ sung một số bước xử lý khi thiết lập kết nối, vì vậy có thể phát sinh chi phí về thời gian và tài nguyên. Tuy nhiên, với các phiên bản TLS và hệ thống hiện đại, chi phí này thường nhỏ và có thể được giảm thêm nhờ tái sử dụng kết nối, tối ưu cấu hình và các cơ chế liên quan.

Vì vậy, không nên mặc định rằng website dùng HTTPS sẽ chậm hơn đáng kể so với HTTP. Hiệu năng thực tế phụ thuộc vào nhiều yếu tố như cấu hình máy chủ, chất lượng mạng, cách tái sử dụng kết nối và nội dung website.

10. Khi nào nên sử dụng HTTP và HTTPS?

Trong môi trường phát triển cục bộ, lập trình viên thường sử dụng HTTP với địa chỉ như http://localhost:3000 để chạy thử ứng dụng. Trong những môi trường đặc thù khác, HTTP cũng có thể được sử dụng khi kết nối được bảo vệ bằng cơ chế phù hợp ở lớp khác.

Đối với website và API được truy cập qua mạng công cộng, HTTPS là lựa chọn nên dùng để bảo vệ dữ liệu trong quá trình truyền tải và xác minh danh tính máy chủ. Những hệ thống xử lý đăng nhập, thông tin cá nhân hoặc dữ liệu nhạy cảm càng cần triển khai HTTPS đúng cách.

Tóm lại, HTTP cung cấp cơ chế trao đổi dữ liệu giữa client và server, còn HTTPS bổ sung lớp bảo mật cho quá trình trao đổi đó thông qua TLS. Hiểu được sự khác biệt này là nền tảng quan trọng trước khi tìm hiểu sâu hơn về API, xác thực người dùng và bảo mật ứng dụng Web.

Kết luận

HTTP là giao thức nền tảng cho việc trao đổi dữ liệu giữa client và server trong các ứng dụng Web. Việc hiểu cách HTTP hoạt động, cấu trúc request–response và các mã trạng thái giúp lập trình viên hiểu rõ hơn cách ứng dụng giao tiếp và xử lý dữ liệu.

Bên cạnh đó, HTTPS sử dụng TLS để bảo vệ dữ liệu trong quá trình truyền tải, giúp tăng tính bảo mật và xác thực máy chủ. Vì vậy, HTTPS là lựa chọn cần thiết đối với các website và API hoạt động trên mạng công cộng.

Nắm vững HTTP và HTTPS là bước đầu để tìm hiểu sâu hơn về REST API, cách client giao tiếp với backend và các cơ chế xác thực, bảo mật trong ứng dụng Web.

Nguồn tham khảo

Bài viết khác

Go Channels & Go Context

1. Go Channels & Go Context là gì? Trong Go, goroutine cho phép chương trình chạy nhiều công việc đồng thời. Tuy nhiên, khi có nhiều goroutine cùng hoạt động, chúng cần một cách để trao đổi kết quả, phối hợp thời điểm thực thi và dừng công việc khi không còn cần thiết.  Đây […]

Goroutine & Concurrency

1. Concurrency là gì? Concurrency là khả năng tổ chức nhiều công việc để chúng có thể tiến triển xen kẽ hoặc đồng thời trong cùng một khoảng thời gian. Thay vì phải thực hiện tất cả công việc theo một trình tự duy nhất, chương trình có thể chuyển đổi giữa nhiều công việc […]

Go Fundamentals

1. Go là gì? Go (Golang) là ngôn ngữ lập trình go thường được sử dụng trong backend, REST API, hệ thống mạng, công cụ dòng lệnh, cloud infrastructure và các dịch vụ chạy đồng thời. Go là ngôn ngữ biên dịch và có hệ thống kiểu dữ liệu tĩnh (statically typed). Điều này có […]

Laravel Routing & Controllers

1. Laravel Routing & Controllers là gì? Khi xây dựng backend bằng Laravel, client gửi HTTP request đến server để thực hiện một thao tác như lấy danh sách user, xem chi tiết sản phẩm hoặc tạo đơn hàng. Laravel cần xác định request đó sẽ được xử lý ở đâu và logic xử lý […]

Series 2 — Frontend Fundamentals: Responsive Web Design – Bootstrap

Series 2 — Frontend Fundamentals   HTML → Sematic HTML → Forms & Validation → CSS  Flexbox & Grid → Responsive Web Design → Bootstrap   Bài 6. Responsive Web Design – Giao diện đa thiết bị 1. Responsive Web Design là gì? Khi xây dựng một website, chúng ta không thể giả định rằng […]

Series 2 — Frontend Fundamentals: CSS — Flexbox-Grid

Series 2 — Frontend Fundamentals   HTML → Sematic HTML → Forms & Validation → CSS  Flexbox & Grid → Responsive Web Design → Bootstrap   Bài 4. CSS Fundamentals – CSS là gì?   CSS Fundamentals – CSS là gì và hoạt động như thế nào? Ở những bài trước, chúng ta đã tìm […]

Leave a Reply

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