Trợ giúp

HTTP header parser: header thành bảng và JSON

HTTP header parser này biến header HTTP thô, hoặc khối header của một email, thành bảng đã sắp xếp và có thể lọc, mỗi header một dòng. Các header lặp lại như Set-Cookie được gộp vào một dòng, mỗi giá trị liệt kê riêng, và cả bộ có thể sao chép dạng JSON. Công cụ chỉ sắp xếp lại văn bản bạn dán vào: không tra cứu, không kiểm tra, không giải mã gì cả.


Cách dùng bộ tách header từng bước

  1. Sao chép header: từ tab Network trong công cụ dành cho nhà phát triển của trình duyệt, từ kết quả của curl -i, hoặc từ phần đầu mã nguồn của một email. Chỉ dán các dòng header, không dán phần nội dung theo sau.
  2. Dán vào ô Header thô. Ô này nhận tối đa 5 MB (5.000.000 ký tự).
  3. Ở mục Chế độ phân tích, chọn Email / RFC 5322 (mặc định) hoặc HTTP nghiêm ngặt. Điểm khác nhau được giải thích bên dưới.
  4. Nhấn Phân tích header. Màn hình Header đã phân tích mở ra với bảng Tên và Giá trị, sắp xếp từ A đến Z theo tên, không phân biệt chữ hoa chữ thường. Giá trị dài, chẳng hạn chữ ký DKIM, cuộn ngang bên trong bảng.
  5. Nhập vào Lọc theo tên hoặc giá trị để thu hẹp các dòng. Số đếm bên dưới đổi từ, ví dụ, "12 header" thành "3 trong 12 header", và bộ lọc không phân biệt chữ hoa chữ thường.
  6. Nhấn Sao chép dạng JSON để đưa mọi header đã phân tích vào bộ nhớ tạm. Sửa header đưa bạn về văn bản đã dán, vẫn còn nguyên, nên bạn có thể sửa một dòng rồi phân tích lại.

Ví dụ: header thô đưa vào, JSON lấy ra

Khối ví dụ gồm một dòng trạng thái của phản hồi (HTTP/1.1 200 OK), ba header thông thường, hai dòng Set-Cookie (một dòng viết chữ thường) và một header Received bị gập xuống dòng thứ hai.

Ở chế độ mặc định "Email / RFC 5322", kết quả là bốn dòng. Hai cookie dùng chung một dòng, giá trị Received bị gập được nối lại thành một dòng, và dòng trạng thái được ghi là bị bỏ qua vì không có tên trước dấu hai chấm. "Sao chép dạng JSON" cho ra:

{"Cache-Control": "no-store", "Content-Type": "text/html; charset=utf-8", "Received": "from mail.example.com by mx.example.net; Tue, 1 Oct 2024 09:00:00 +0000", "set-cookie": ["id=a3fWa; Path=/", "theme=dark"]}

Dòng đã gộp giữ cách viết xuất hiện đầu tiên, set-cookie, và trở thành mảng vì header xuất hiện hai lần. Header chỉ xuất hiện một lần là chuỗi bình thường.

HTTP nghiêm ngặt hay Email / RFC 5322: chọn chế độ nào

Hai chế độ chỉ khác nhau ở cách xử lý một dòng bắt đầu bằng dấu cách hoặc tab.

Nếu chưa chắc, cứ giữ mặc định. Đó là chế độ dễ dãi hơn trong hai chế độ.

Những gì công cụ bỏ qua, gộp và để nguyên

Những việc công cụ này không làm

Công cụ chỉ cấu trúc hóa văn bản, không hơn. Nó không lần theo đường đi của một thư, không xác minh SPF, DKIM hay DMARC, không đánh giá thư là rác hay thật, và không giải mã giá trị: các từ đã mã hóa như =?UTF-8?B?…?= và chuỗi Base64 được hiển thị đúng như bạn dán. Nếu muốn lấy ra người gửi, kết quả xác thực và đường đi qua từng máy chủ của một thư, hãy dùng một công cụ riêng dành cho việc phân tích thư.

Việc phân tích chạy trong trình duyệt của bạn, và header đã dán không được tải lên hay lưu lại. Điều này quan trọng, vì khối header thường chứa cookie phiên, khóa API và địa chỉ email.


Câu hỏi thường gặp

Làm sao để sao chép request header trong Chrome?

Mở DevTools, vào tab Network rồi tải lại trang. Nhấp chuột phải vào yêu cầu và chọn trong menu mục sao chép header của yêu cầu (hoặc của phản hồi). Dán kết quả vào "Header thô" rồi nhấn "Phân tích header". Firefox có cùng menu sao chép trên một yêu cầu trong tab Network. Với curl -i, chỉ dán các dòng header, không dán phần nội dung phản hồi theo sau.

Tên header HTTP có phân biệt chữ hoa chữ thường không?

Tên thì không: Content-Type, content-type và CONTENT-TYPE là cùng một header, nên công cụ gộp chúng thành một dòng với cách viết xuất hiện đầu tiên. Giá trị được giữ nguyên như đã viết, chỉ bỏ dấu cách ở đầu và cuối, vì một số giá trị như giá trị cookie và token có phân biệt chữ hoa chữ thường.

Một phản hồi có thể có nhiều dòng Set-Cookie không?

Có. Một phản hồi gửi mỗi cookie một dòng Set-Cookie, và Set-Cookie là ví dụ tiêu biểu của header không thể nối bằng dấu phẩy một cách an toàn. Công cụ liệt kê từng giá trị Set-Cookie trên dòng riêng bên trong một dòng của bảng, và "Sao chép dạng JSON" biến dòng đó thành một mảng. Header Received trong email lặp lại theo cách tương tự, mỗi máy chủ một dòng.

Pseudo-header của HTTP/2 như :authority là gì?

Đó là các trường của yêu cầu mà HTTP/2 viết dưới dạng header có tên bắt đầu bằng dấu hai chấm: :method, :scheme, :authority và :path, thêm :status trong phản hồi. :authority chứa tên máy chủ, giống header Host trong HTTP/1.1. Công cụ coi dấu hai chấm ở đầu là một phần của tên, nên chúng hiện như các dòng thường và được xếp trước các header khác.

Làm sao để lấy header HTTP dưới dạng JSON?

Dán header, nhấn "Phân tích header", rồi nhấn "Sao chép dạng JSON". Bạn nhận được một đối tượng JSON với tên header làm khóa. Header xuất hiện một lần là chuỗi, còn header lặp lại như Set-Cookie là mảng các chuỗi theo thứ tự xuất hiện. JSON luôn chứa mọi header đã phân tích, kể cả khi bộ lọc đang ẩn một số dòng.

Nên chọn chế độ nào cho header RFC 5322?

Chọn "Email / RFC 5322", chế độ mặc định. Với RFC 5322 headers của email, các RFC 5322 header fields dài như Received hay DKIM-Signature thường bị ngắt thành nhiều dòng, và chế độ này nối các dòng bắt đầu bằng dấu cách hoặc tab vào dòng phía trên. Với phản hồi HTTP mà bạn muốn thấy các dòng thụt vào được đánh dấu, hãy chọn "HTTP nghiêm ngặt".

Dán cookie và token vào công cụ tách header online có an toàn không?

Việc phân tích chạy trong trình duyệt của bạn và không có gì bạn dán bị tải lên hay lưu lại, nên trang này không gửi cookie và token trong khối header đi đâu cả. Dù vậy, hãy coi cookie phiên đang dùng hoặc header Authorization như mật khẩu: thay giá trị trước khi chia sẻ header hoặc JSON cho ai đó.