HTTP là một giao thức được sử dụng để truyền tải các thông tin trên hệ thống mạng internet hiện nay. Trong giao thức này, tồn tại một bộ phận cho phép các web server/browser hiểu được thông tin liên quan đến HTTP request nằm ở phần đầu tiên của nó đó là Header. Cookie là những phần dữ liệu được web server gửi vào lần đầu tiên trình duyệt truy cập website hoặc khi không tìm thấy trong request của trình duyệt gửi lên. Sau đó cookie được lưu lại trên máy người dùng bởi trình duyệt và sẽ được trình duyệt gửi lại server theo mọi request theo header.

1. HTTP Header là gì ?

HTTP header (tiêu đề HTTP) là một thành phần của giao thức HTTP, được sử dụng để truyền tải thông tin bổ sung giữa máy khách (client) và máy chủ (server) trong quá trình giao tiếp qua HTTP hoặc HTTPS. HTTP headers cung cấp siêu dữ liệu về yêu cầu (request) hoặc phản hồi (response), giúp hai bên hiểu rõ hơn về nội dung và cách xử lý dữ liệu.

HTTP request có thể chứa header gồm các thông tin như ngày request, liên kết giới thiệu hoặc ngôn ngữ sử dụng. Phản hồi HTTP cũng chứa trường header trong đó thông tin của nó được gửi tới trình duyệt của người dùng qua server. Đối với người dùng cuối thì trao đổi thông tin này thường là vô hình.

Các HTTP Header bao gồm các trường, mỗi trường bao gồm một dòng. Mỗi dòng chứa một cặp tên/giá trị – được gọi là cặp khóa-giá trị – được phân tách bằng dấu hai chấm và kết thúc bằng dấu ngắt dòng.

Các trường có thể được sử dụng cho HTTP Header được xác định trong RFC. Ngoài các trường này, Header không có chuẩn cho các trường mở rộng thông tin. Tuy nhiên, các Header mở rộng thường được các developer đặt với phần bắt đầu là x- như một quy ước riêng.

2. Một số trường Request Header phổ biến trong HTTP

  • Host

Chỉ định tên miền hoặc địa chỉ IP của máy chủ mà client muốn kết nối.

Ví Dụ: Host: www.example.com

  • User-Agent

Thông tin về trình duyệt, hệ điều hành hoặc ứng dụng client đang sử dụng.

Ví dụ: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36

  • Accept

Chỉ định các định dạng nội dung mà client có thể xử lý.

Ví dụ: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  • Accept-Encoding

Chỉ định các phương pháp nén dữ liệu mà client hỗ trợ.

Ví dụ: Accept-Encoding: gzip, deflate, br

  • Accept-Language

Xác định ngôn ngữ ưu tiên của client.

Ví dụ: Accept-Language: en-US,en;q=0.9,vi;q=0.8

  • Authorization

Cung cấp thông tin xác thực để truy cập tài nguyên.

Ví dụ:(Sử dụng mã hoá Base64) Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

  • Cookie

Gửi cookie từ client tới server để duy trì trạng thái phiên làm việc (session).

Ví dụ: Cookie: sessionId=abc123; theme=dark

  • Referer (hoặc Referrer)

Chỉ định URL của trang web đã dẫn đến yêu cầu hiện tại.

Ví dụ: Referer: https://www.google.com/

  • Content-Type

Định dạng của dữ liệu trong phần thân (body) yêu cầu.

Ví dụ: (gửi JSON) Content-Type: application/json

  • Content-Length

Kích thước (tính bằng byte) của phần thân yêu cầu.

Ví dụ: Content-Length: 348

  • Connection

Kiểm soát việc giữ kết nối TCP sau khi phản hồi.

Ví dụ: Connection: keep-alive

  • If-Modified-Since

Chỉ định thời gian phiên bản của tài nguyên mà client đã lưu vào bộ nhớ đệm. Server chỉ gửi lại tài nguyên nếu nó được cập nhật sau thời gian này.Mô tả: Chỉ định thời gian phiên bản của tài nguyên mà client đã lưu vào bộ nhớ đệm. Server chỉ gửi lại tài nguyên nếu nó được cập nhật sau thời gian này.

Ví dụ: If-Modified-Since: Wed, 12 Jan 2025 10:00:00 GMT

3. HTTP Cookie là gì?

Cookie HTTP, còn được gọi là “web cookie,” “browser cookie” hoặc đơn giản là “cookie,” là một đoạn dữ liệu nhỏ mà máy chủ gửi đến trình duyệt web của người dùng. Sau khi được nhận và lưu trữ trên trình duyệt, cookie sẽ được gửi lại máy chủ kèm theo mỗi yêu cầu (request). Cookie HTTP thường chứa thông tin về hoạt động của người dùng và giúp duy trì trạng thái phiên (session) giữa các lần duyệt web khác nhau.

Cần lưu ý rằng HTTP là một giao thức không trạng thái (stateless protocol). Điều này có nghĩa là máy chủ xử lý mỗi yêu cầu như một hoạt động độc lập và không ghi nhớ các yêu cầu trước đó từ cùng một người dùng. Do đó, cần phải gửi thêm thông tin kèm theo mỗi yêu cầu để duy trì trạng thái của phiên làm việc. Đây chính là chức năng của cookie.

Cookie đóng vai trò quan trọng trong việc cung cấp trải nghiệm cá nhân hóa hơn, duy trì phiên đăng nhập và theo dõi người dùng. Cookie HTTP cũng có thể được sử dụng cho các mục đích bảo mật và xác thực quyền truy cập.

Cookie có các đặc điểm:

  • Khích thước nhỏ: mỗi cookie thường không vượt quá 4 KB
  • Được lưu trên trình duyệt: cookie được trình duyệt quản lý và tự động gửi lại đến máy chủ trong các yêu cầu sau đó
  • Có thời hạn: mỗi cookie có thể được thiết lập thời gian sống (expiration date), sau đó sẽ tự động bị xoá

4. Cấu trúc của Cookie và các loại Cookie

Cấu trúc của Cookie

Một cookie cơ bản bao gồm:

  • Tên (name): tên của cookie
  • Giá trị (value): Nội dung của cookie
  • Domain: là domain mà cookies chúng ta hợp lệ. Mọi thứ được gửi hoặc được sử dụng từ domain này sẽ kèm theo cookies
  • Path: đường dẫn được chỉ định trong domain, nơi mà cookies sẽ được gửi đến server
  • Expiration: đây là dấu thời gian, nó cho biết lúc nào cookie sẽ bị xóa. Mặc định thì tất cả cookies sẽ bị xóa khi ta tắt trình duyệt
  • Thuộc tính (Attributes): Các thông tin bổ sung như phạm vi, thời hạn, và bảo mật

Ví dụ: Set-Cookie: sessionId=abc123; Path=/; Expires=Wed, 14 Jan 2025 12:00:00 GMT; HttpOnly; Secure

Các loại Cookie
  • Session Cookie:

Chỉ tồn tại trong phiên làm việc (khi trình duyệt mở).

Bị xóa khi người dùng đóng trình duyệt

Ví dụ: Lưu trạng thái đăng nhập tạm thời

  • Persistent Cookie:

Có thời gian sống được xác định trước (qua thuộc tính Expires hoặc Max-Age).

Lưu trữ thông tin lâu dài, ví dụ: Ghi nhớ người dùng

  • First-Party Cookie:

Được tạo và sử dụng bởi chính trang web mà người dùng truy cập

  • Third-Party Cookie:

Được tạo bởi các dịch vụ bên thứ ba (như quảng cáo, phân tích) trên trang web

Thường bị hạn chế bởi các trình duyệt hiện đại để bảo vệ quyền riêng tư

5. Các thuộc tính quan trọng của Cookie

  • Path:

Chỉ định phạm vi URL mà cookie sẽ được gửi đi

Ví dụ: Path=/ áp dụng cho toàn bộ trang web

  • Expires và Max-Age:

Quy định thời gian sống của cookie

Ví dụ: Expires=Wed, 14 Jan 2025 12:00:00 GMT

  • HttpOnly:

Chỉ cho phép cookie được gửi qua HTTP(S), không thể truy cập qua JavaScript (bảo mật hơn)

  • Secure:

Cookie chỉ được gửi qua kết nối HTTPS

  • SameSite:

Ngăn chặn cookie bị gửi trong các yêu cầu chéo trang (cross-site), giảm nguy cơ tấn công CSRF

Giá trị: Strict, Lax, hoặc None

  • Ví dụ:

Đầu tiên thường gặp khi sử dụng cookies là xác thực (authentication). Khi chúng ta đăng nhập ở một website

hình ảnh_2025-01-13_081800419.png
  • POST /authenticate

Trình duyệt (Browser) gửi một yêu cầu POST tới máy chủ (Server) tại endpoint /authenticate

Nội dung yêu cầu bao gồm thông tin username và password

Đây là bước người dùng đăng nhập. Server sẽ kiểm tra thông tin đăng nhập xem có hợp lệ hay không

  • HTTP 200 OK + Set-Cookie

Nếu thông tin đăng nhập hợp lệ, server phản hồi với mã trạng thái 200 OK

Trong phản hồi, server gửi một Cookie với tên là session và một giá trị (ví dụ: session ID hoặc token)

Trình duyệt tự động lưu cookie này để sử dụng trong các yêu cầu tiếp theo

Cookie session hoạt động như một "phiếu xác nhận" rằng người dùng đã được xác thực

Cookie này sẽ được trình duyệt gửi kèm trong mọi yêu cầu tới cùng domain

  • GET /api/user

Trình duyệt gửi một yêu cầu GET tới endpoint /api/user

Yêu cầu này tự động đính kèm cookie session mà trình duyệt đã lưu trước đó

Đây là bước trình duyệt yêu cầu dữ liệu người dùng (ví dụ: thông tin cá nhân)

Cookie session cho phép server xác định danh tính người dùng

  • Tìm và deserialize session

Server nhận được cookie session từ yêu cầu GET

Server tra cứu giá trị cookie trong hệ thống lưu trữ phiên (session storage) để tìm thông tin người dùng tương ứng

Server cần giải mã và xác thực session để đảm bảo yêu cầu được gửi từ một người dùng hợp lệ

  • HTTP 200 OK + Dữ liệu người dùng

Sau khi xác thực thành công, server phản hồi với mã trạng thái 200 OK

Nội dung phản hồi là dữ liệu người dùng (ví dụ: { name: "foo" })

Đây là bước server trả về thông tin mà trình duyệt yêu cầu

  • Bước 1: Gửi request method POST yêu cầu đăng nhập tới website (ví dụ github), thông tin là username và password, việc đầu tiên server thực hiện là xác thực tài khoản này.
hình ảnh_2025-01-13_083758260.png
  • Bước 2: Sau khi xác thực thành công, server sẽ cấp token, lưu trữ vào cookies, ở đây là giá trị usersession
hình ảnh_2025-01-13_084724350.png
  • Bước 3: Khi quay lại trang web, server sẽ thực hiện method GET. Method này thực hiện lấy nhiều thông tin, một trong số đó là usersession
hình ảnh_2025-01-13_085713061.png hình ảnh_2025-01-13_085746431.png
  • Bước 4: Dựa vào thông tin usersession này, server sẽ xác thực và di chuyển thẳng tới trang dashboard

6. Tóm lại

Trên đây là những khái niệm cơ bản về HTTP Header và HTTP Cookie. Qua bài viết trên hy vọng các bạn có thể hiểu được về header và cookie là gì và cách sử dụng của chúng phía sau client và sever.