Đọc header HTTP: 6 điều về hosting bạn biết được chỉ bằng một lệnh

0

Mỗi lần bạn mở một trang web, máy chủ gửi về hai thứ: nội dung trang, và một tập hợp những dòng chữ ngắn đi kèm gọi là header. Trình duyệt đọc header rồi vứt đi, bạn không bao giờ thấy chúng.

Nhưng chúng nói rất nhiều. Sáng 01/09/2026 lúc 11:22 tôi đọc header của 13 tên miền bằng đúng một lệnh, và biết được: site nào đang nén dữ liệu bằng công nghệ nào, site nào có cache và cache có chạy không, site nào đang để lộ phiên bản PHP, site nào thiếu một lớp bảo mật cơ bản, và site nào có chứng chỉ HTTPS hỏng.

Không cần đăng nhập vào đâu cả. Bạn làm được điều tương tự với chính website của mình — và với cả website của đối thủ.

Lệnh cần dùng

curl -sSI https://tenmiencuaban.com/

-I nghĩa là “chỉ lấy header, đừng tải nội dung”. -sS nghĩa là “im lặng, nhưng nếu có lỗi thì báo”.

Riêng để kiểm tra phần nén, phải nói rõ với máy chủ là mình chấp nhận dữ liệu nén — nếu không nó sẽ trả về bản chưa nén và bạn kết luận nhầm:

curl -sS -o nul -D - -H "Accept-Encoding: gzip, deflate, br, zstd" https://tenmiencuaban.com/

Trên macOS/Linux đổi nul thành /dev/null. Đây là lệnh tôi dùng cho toàn bộ số liệu bên dưới.

Điều 1: Website của bạn đang nén bằng gì

Dòng cần tìm: content-encoding.

Máy chủ nén nội dung lại trước khi gửi đi, khách nhận được ít dữ liệu hơn nên tải nhanh hơn. Có ba cách nén đang phổ biến, và trong 12 tên miền vào được, tôi gặp đủ cả ba:

Cách nénSố siteĐi kèm với
br (Brotli)3các site chạy LiteSpeed
gzip8các site chạy Apache
zstd (Zstandard)1site đứng sau Cloudflare
Biểu đồ đếm cách nén của 12 website: 3 site dùng br, 1 site dùng zstd, 8 site dùng gzip
Trường content-encoding của 12 website đo lúc 11:22 ngày 01/09/2026 — cả 12 đều đang nén nội dung.

Điều đáng chú ý: cả 12 site đều có nén. Không site nào trả về nội dung thô. Nén đã trở thành mặc định ở hầu hết hosting hiện nay, nên nếu bạn chạy lệnh trên và không thấy dòng content-encoding nào, đó mới là chuyện bất thường đáng hỏi nhà cung cấp.

Ba cách nén này khác nhau về mức độ nén và tốc độ xử lý, nhưng tôi không đo phần đó nên tôi sẽ không đưa ra con số so sánh. Thứ tôi đo được và nói được là: cách nén nào đang được dùng, và nó gắn liền với loại máy chủ chứ không phải với việc bạn trả bao nhiêu tiền.

Điều 2: Cache của bạn có thật sự chạy không

Dòng cần tìm: x-litespeed-cache (nếu hosting chạy LiteSpeed) hoặc cf-cache-status (nếu bạn dùng Cloudflare).

Đây là dòng giá trị nhất trong cả tập header, vì nó trả lời một câu hỏi mà bảng điều khiển không trả lời được: plugin cache của tôi có đang thật sự phục vụ khách không, hay chỉ đang bật cho có?

Trong đợt đo của tôi:

Giá trị đọc đượcNghĩa làSố site
x-litespeed-cache: hitTrang này được trả từ cache. Máy chủ không phải chạy lại PHP.1
x-litespeed-cache: missTrang này không lấy từ cache. Máy chủ vừa dựng lại từ đầu.1
cf-cache-status: HITCloudflare trả từ bộ nhớ đệm của nó, chưa cần hỏi tới máy chủ gốc.1
Không có dòng nàoKhông có tầng cache nào loại này.9

miss không có nghĩa là cache hỏng. Lần đầu ai đó mở một trang, trang đó chưa nằm trong cache nên đương nhiên là miss; máy chủ dựng xong sẽ cất lại để lần sau hit. Cách đọc đúng là chạy lệnh hai lần liên tiếp:

  • Lần đầu miss, lần sau hit → cache đang làm việc bình thường.
  • Cả hai lần đều miss → có gì đó ngăn trang này được cache. Thường là một plugin, một cookie phiên đăng nhập, hoặc trang nằm trong danh sách loại trừ.

Site duy nhất trong đợt đo của tôi cho hit cũng chính là site có thời gian máy chủ trả lời thấp nhất nhóm WordPress. Đây là một điểm dữ liệu, không phải một bằng chứng — nhưng nó đúng hướng với những gì tôi đo được ở các bài trước.

Điều 3: Website của bạn đang chạy PHP phiên bản nào

Dòng cần tìm: x-powered-by.

Năm trong 12 site trả về nguyên văn x-powered-by: PHP/8.1.34. Một site nữa trả về PHP/8.1.33. Tức là 6 trong 12 site đang công khai phiên bản PHP của mình cho bất kỳ ai hỏi.

Có hai mặt:

Mặt tiện: bạn biết ngay mình đang chạy PHP mấy mà không cần vào bảng điều khiển. Nếu con số đó cũ hơn hẳn bản hiện hành, bạn có việc cần làm — nâng phiên bản PHP thường là một trong những cách tăng tốc rẻ nhất, và nó là một ô chọn trong bảng điều khiển hosting chứ không phải một dự án.

Mặt bất tiện: bạn cũng vừa nói với mọi người trên Internet chính xác bạn đang chạy phiên bản nào. Khi một lỗ hổng của phiên bản đó được công bố, người ta không cần dò tìm — bạn đã tự khai.

Đây không phải lỗ hổng, và tắt nó đi không làm site bạn an toàn hơn về bản chất. Nhưng nó là thông tin bạn cho đi mà không nhận lại gì. Tắt được bằng một dòng expose_php = Off trong cấu hình PHP, hoặc một dòng trong .htaccess.

Ba site trong đợt đo còn giấu luôn cả dòng server — không cho biết đang chạy Apache, Nginx hay LiteSpeed. Đó là lựa chọn của nhà cung cấp, và nó ở phía cẩn thận hơn.

Điều 4: Bạn đang bảo ai đó cache trang mình trong bao lâu

Dòng cần tìm: cache-control.

Đây là câu website nói với các tầng đệm ở giữa — CDN, proxy của nhà mạng, trình duyệt — rằng “hãy giữ bản sao của tôi trong bao lâu”. Ba kiểu tôi gặp:

Giá trị đọc đượcWebsite đang nói gì
public, s-maxage=86400“Ai cũng được giữ bản sao của tôi trong 86.400 giây = 24 giờ.”
public, s-maxage=21600“Giữ trong 21.600 giây = 6 giờ.”
no-cache, must-revalidateĐừng dùng lại bản cũ. Lần nào cũng hỏi lại tôi.”
public, max-age=0, must-revalidate“Ai giữ cũng được, nhưng lần nào cũng phải hỏi lại tôi xem còn mới không.”

Bốn site đặt 6 hoặc 24 giờ. Hai site đặt kiểu “hỏi lại mỗi lần”. Sáu site không gửi dòng này, tức là để mặc cho các tầng đệm tự quyết.

Con số s-maxage là thứ bạn nên nhìn lại nếu vừa sửa giao diện xong mà khách vẫn thấy bản cũ: 24 giờ nghĩa là 24 giờ. Còn no-cache thì ngược lại — nó bỏ đi phần lớn lợi ích của cache, nên nếu site của bạn là site nội dung mà lại đang gửi no-cache, đó là chỗ đáng xem lại.

Điều 5: Bạn có bật HSTS chưa

Dòng cần tìm: strict-transport-security.

Dòng này bảo trình duyệt: “từ giờ trở đi, chỉ được vào tôi bằng HTTPS, kể cả khi người dùng gõ http://“. Nó chặn được kiểu tấn công chen ngang ngay ở lần chuyển hướng đầu tiên.

Trong 12 site: 1 site có, 11 site không.

Đây là con số làm tôi hơi bất ngờ, vì cả 12 site đều đã chạy HTTPS. Nghĩa là hầu hết mọi người dừng lại ở bước “cài chứng chỉ” và không đi tiếp bước “khoá lại”.

Một lời cảnh báo trước khi bạn bật: HSTS có thời hạn, và trong thời hạn đó trình duyệt sẽ từ chối vào site bạn bằng HTTP kể cả khi bạn muốn. Nếu HTTPS của bạn hỏng trong lúc HSTS còn hiệu lực, khách không có đường lùi. Hãy bật với thời hạn ngắn trước, chạy ổn vài tuần rồi mới nâng lên.

Biểu đồ đếm bốn trường header trên 12 website: 1 site có HSTS, 6 site gửi cache-control, 6 site để lộ x-powered-by, 3 site có header trạng thái cache
Đếm trên 12 website đo cùng lúc ngày 01/09/2026 — chỉ 1 site bật HSTS.

Điều 6: Chứng chỉ HTTPS của bạn có được tin cậy không

Cái này không nằm trong header — nó xảy ra trước header. Nhưng cùng một lệnh cho bạn biết.

Tên miền thứ 13 trong danh sách của tôi không trả về header nào. Nó trả về thế này:

curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain ...

Dịch ra: chuỗi chứng chỉ HTTPS của site này không được tin cậy. Máy đo dừng lại ngay ở bước bắt tay, chưa kịp gửi yêu cầu nào.

Điều đáng nói: cũng chính tên miền này, trong hai đợt đo tốc độ trước của tôi, chỉ hiện ra là “không kết nối được”. Nếu tôi dừng ở đó, tôi sẽ đi tìm nguyên nhân ở phía máy chủ — quá tải, sập, sai DNS. Thật ra máy chủ vẫn sống; chỉ có tờ giấy chứng minh của nó là hỏng.

Bài học chung hơn: khi một công cụ báo “không kết nối được”, hãy đọc hết thông báo lỗi. SEC_E_UNTRUSTED_ROOT (chứng chỉ), Timed out (không ai trả lời), Connection refused (có máy nhưng cổng đóng) là ba bệnh khác nhau, và chữa theo ba cách khác nhau.

Bảng chốt: chạy một lệnh, đọc sáu dòng

Dòng headerNếu thấyNếu không thấy
content-encodingĐang nén. Tốt.Hỏi nhà cung cấp — 12/12 site tôi đo đều có.
x-litespeed-cache / cf-cache-statusChạy 2 lần: miss rồi hit là đúng.Không có tầng cache loại này.
x-powered-byBiết phiên bản PHP. Cân nhắc tắt đi.Nhà cung cấp đã giấu giùm.
cache-controlXem s-maxage bao lâu.Các tầng đệm tự quyết.
strict-transport-securityĐã khoá HTTPS.Nên cân nhắc bật, thời hạn ngắn trước.
(báo lỗi trước cả header)Đọc kỹ mã lỗi.

Cùng loạt bài đo hạ tầng website: Hosting chậm hay website của bạn chậm? · Bản ghi AAAA chết cộng 0,21 giây · Đo lại sau 17 tiếng.

Những gì bài này KHÔNG nói

  • Brotli nhanh hơn gzip bao nhiêu phần trăm. Tôi chỉ đọc được cách nén nào đang dùng, không đo dung lượng trước/sau nén. Không đo thì không có số.
  • Site nào đang chạy HTTP/2 hay HTTP/3. Tôi có định đưa vào, nhưng khi kiểm tra lại thì phát hiện công cụ đo của tôi không hỗ trợ HTTP/2 — nó báo “HTTP/1.1” cho cả google.com lẫn cloudflare.com, hai site chắc chắn phục vụ HTTP/2. Máy đo hỏng thì số đo vô nghĩa, nên tôi bỏ hẳn phần đó thay vì đăng một bảng sai. Nếu bạn muốn tự kiểm tra, hãy dùng tab Network trong công cụ dành cho nhà phát triển của trình duyệt.
  • Bật HSTS có làm tăng thứ hạng tìm kiếm không. Tôi đo header, không đo thứ hạng.
  • Tên các website trong bảng. Đây là số đo trên các site đang chạy thật; tôi công bố số và giấu tên.

Số liệu đọc bằng curl lúc 11:22 ngày 01/09/2026, từ một máy tại Việt Nam, mỗi tên miền một lần cho phần header. Toàn bộ header trích trong bài là nguyên văn máy chủ trả về, không sửa. Trường http_version đã bị loại bỏ khỏi bài sau khi phép thử đối chứng cho thấy công cụ đo không đọc được HTTP/2.

{“@context”:”https://schema.org”,”@type”:”FAQPage”,”mainEntity”:[{“@type”:”Question”,”name”:”Xem header HTTP của website bằng lệnh gì?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Dùng curl có sẵn trên Windows, macOS và Linux: curl -sSI -H \”Accept-Encoding: gzip, deflate, br, zstd\” https://tenmiencuaban.com/ rồi đọc các dòng trả về. Một lệnh cho biết website đang nén bằng gì, cache có chạy không, chạy PHP phiên bản nào và đã bật HSTS chưa.”}},{“@type”:”Question”,”name”:”Làm sao biết website của tôi có đang nén nội dung không?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Tìm dòng content-encoding trong kết quả. Thấy br, zstd hoặc gzip là đang nén. Không thấy dòng này nghĩa là máy chủ đang gửi nguyên văn. Trong 12 website đo ngày 01/09/2026, cả 12 đều đang nén: 3 site dùng br, 1 site dùng zstd, 8 site dùng gzip.”}},{“@type”:”Question”,”name”:”Header x-litespeed-cache trả về miss có phải cache hỏng không?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Chưa chắc. Lần truy cập đầu tiên vào một trang chưa có bản đệm luôn cho miss, và chính lần đó tạo ra bản đệm. Hãy chạy lệnh hai lần liên tiếp: miss rồi hit là đúng, còn miss rồi miss mới là dấu hiệu cache không hoạt động.”}},{“@type”:”Question”,”name”:”Có nên tắt x-powered-by không?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Nên, nếu bạn không cần. Header này công khai chính xác phiên bản PHP đang chạy cho bất kỳ ai hỏi, mà bạn không nhận lại lợi ích gì. Tắt bằng expose_php = Off trong cấu hình PHP. Trong 12 site đo được, 6 site đang để lộ phiên bản PHP.”}},{“@type”:”Question”,”name”:”s-maxage trong cache-control nghĩa là gì?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Đó là số giây mà các tầng đệm dùng chung như CDN được phép giữ bản sao trang của bạn. Giá trị 86400 là 24 giờ, 21600 là 6 giờ. Nếu bạn vừa sửa giao diện mà khách vẫn thấy bản cũ, đây là con số đầu tiên cần nhìn lại.”}},{“@type”:”Question”,”name”:”HSTS là gì và có nên bật không?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”HSTS là header strict-transport-security, bảo trình duyệt chỉ được vào website bằng HTTPS trong một thời hạn nhất định. Nên bật, nhưng bắt đầu với thời hạn ngắn, vì trong thời hạn đó trình duyệt sẽ từ chối vào bằng HTTP kể cả khi HTTPS của bạn đang hỏng. Trong 12 site đo được chỉ 1 site đang bật.”}},{“@type”:”Question”,”name”:”Lỗi SEC_E_UNTRUSTED_ROOT nghĩa là gì?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”Nghĩa là chứng chỉ HTTPS của website không được máy của bạn tin cậy, thường do chứng chỉ hết hạn, sai tên miền hoặc thiếu chứng chỉ trung gian. Đây là lỗi chứng chỉ, không phải máy chủ chết, và cách chữa hoàn toàn khác.”}}]}

Đánh giá bài viết

Người viết: Lê Quốc Huy Digi · 15 bài trên sanphamtop1.vn

Lê Quốc Huy Digi: “Mình thích Công nghệ thông tin, AI, Automation & Marketing.” Anh sống ở Hà Nội, làm việc tại ivi.vn và viết ở huy.ivi.vn. Trên GitHub, anh công khai hai công cụ mã nguồn mở tự viết: VideoWatermarkRemover (Python) và YBMusic (JavaScript). Tại sanphamtop1.vn, các bài trong mục Công nghệ số do anh đứng tên đều ghi rõ số liệu đọc từ đâu, vào ngày nào và từ vị trí nào — chỗ nào không đọc được thì ghi là không đọc được, không điền số thay.

Bài viết có chứa liên kết tiếp thị. Nếu bạn mua hàng qua liên kết, chúng tôi có thể nhận hoa hồng từ nhà bán — giá bạn trả không thay đổi. Giá và tình trạng hàng do nhà bán quyết định và có thể đã khác lúc bài được cập nhật (cách chúng tôi làm việc).

Bài liên quan

Rất mong nhận được đánh giá từ bạn

      Để lại lời nhắn

      Giới thiệu

      SanPhamTop1.vn là nền tảng cộng đồng review sản phẩm, giúp bạn mua hàng chất – bền – rẻ. Thông qua việc so sánh hàng trăm nghìn sản phẩm, nhãn hàng và thu thập đánh giá từ cộng đồng. 

      Sứ mệnh của SanPhamTop1 là minh bạch hóa thông tin sản phẩm, giúp bạn mua hàng tốt nhất với giá cả ưu đãi.

      Theo dõi chúng tôi

      Sanphamtop1.vn – Website chuyên review & so sánh giá giúp bạn mua hàng tiết kiệm Make by sanphamtop1.vn 

      sanphamtop1.vn
      Logo