Tất cả bài viết

HTTP header: điều gì ẩn giấu trong mỗi request và response

Nhiều nhà mạng di động ở Việt Nam và các ứng dụng trình duyệt tiết kiệm dữ liệu sử dụng proxy nén dữ liệu ở giữa đường truyền để giảm dung lượng tải xuống, đặc biệt trên kết nối 3G/4G. Các proxy này thường thêm header Via để đánh dấu chặng trung gian, và đôi khi thay đổi luôn Content-Encoding hoặc chất lượng ảnh — khiến lập trình viên dễ nhầm tưởng server của mình trả response sai, trong khi vấn đề thực sự nằm ở mạng trung gian.

Header request so với header response

Header request (như Accept, User-Agent, Cookie) được trình duyệt gửi đến server, mô tả bản thân nó và các mong đợi. Header response (Content-Type, Set-Cookie, Cache-Control) được server gửi lại, mô tả dữ liệu trả về và hướng dẫn cho trình duyệt.

Vì sao cần Content-Type

Header Content-Type cho trình duyệt biết cách diễn giải phần thân của response: là một trang HTML, dữ liệu JSON, một hình ảnh hay một tệp để tải xuống. Không có giá trị đúng ở đây, trình duyệt có thể cố hiển thị JSON như văn bản thuần túy, hoặc ngược lại, xử lý sai HTML.

Cache-Control quản lý bộ nhớ đệm như thế nào

Các giá trị như max-age=3600 hoặc no-cache cho trình duyệt và các proxy trung gian biết có thể dùng phiên bản đã lưu trong bộ nhớ đệm của một tài nguyên trong bao lâu mà không cần request lại đến server. Cấu hình sai header này là nguyên nhân phổ biến khiến người dùng thấy phiên bản cũ của một trang web.

Vì sao cần điều này

  • Chẩn đoán vì sao trình duyệt hiển thị sai response của một API.
  • Phát hiện header Via cho thấy response đã đi qua một proxy nén dữ liệu của nhà mạng.
  • Xác nhận trang web được phục vụ qua HTTPS — điều kiện bắt buộc để Web Crypto API mà các công cụ hash và JWT của chính trang này dựa vào có thể hoạt động.

Vì sao một header đôi khi xuất hiện nhiều lần

HTTP cho phép cùng một header xuất hiện nhiều lần trong một response — trường hợp phổ biến nhất là nhiều dòng Set-Cookie, mỗi dòng cho một cookie được thiết lập. Hầu hết các header lặp lại khác có thể gộp thành một giá trị duy nhất phân tách bằng dấu phẩy mà không thay đổi ý nghĩa, nhưng Set-Cookie là một ngoại lệ có chủ đích, vì dấu phẩy có thể hợp lệ là một phần của giá trị cookie.

Dùng thử công cụ