在JMeter中计算已存储到变量的HTTP响应头的大小
计算HTTP响应头大小的方法
要计算存储在变量里的HTTP响应头大小,其实核心就是算这段响应头文本的ASCII编码字节数——因为HTTP/1.1协议规定头字段是以ASCII编码的字节流在网络中传输的,这样计算出来的结果和实际传输时占用的字节数完全一致。下面给你详细说明步骤和不同编程语言的实现示例:
核心思路
完整的HTTP响应头由三部分组成:
- 状态行(比如
HTTP/1.1 200 OK) - 若干头字段(每个字段单独一行,结尾用
\r\n分隔) - 结尾空行(
\r\n,用来区分响应头和正文)
计算大小的关键就是确保变量里包含了完整的上述内容,然后计算其ASCII编码下的字节数。
步骤说明
- 确认变量内容完整性:检查你的变量是否包含状态行、所有头字段的
\r\n换行符,以及结尾的空行。如果提取时漏掉了结尾空行,后续需要手动补上。 - 按语言计算字节数:不同编程语言有不同的字符串字节长度计算方式,重点是指定ASCII编码,避免默认编码带来的误差。
编程语言实现示例
Python
# 替换成你存储响应头的变量 response_headers = """HTTP/1.1 200 OK Cache-Control: no-cache, no-store, max-age=0, must-revalidate Content-Length: 2951 Content-Type: application/json Date: Tue, 17 Apr 2018 06:34:03 GMT Expires: 0 Pragma: no-cache Strict-Transport-Security: max-age=3175000 ; includeSubDomains X-Content-Type-Options: nosniff X-Frame-Options: DENY X-Vcap-Request-Id: de1csd11-2721-de3a-548e-573sdt3fae22 X-Xss-Protection: 1; mode=...""" # 计算ASCII编码下的字节数 header_size = len(response_headers.encode('ascii')) # 补上结尾空行的字节数(如果变量里没包含的话) header_size += len('\r\n'.encode('ascii')) print(f"响应头大小: {header_size} 字节")
JavaScript(Node.js)
// 你的响应头变量 const responseHeaders = `HTTP/1.1 200 OK Cache-Control: no-cache, no-store, max-age=0, must-revalidate Content-Length: 2951 Content-Type: application/json Date: Tue, 17 Apr 2018 06:34:03 GMT Expires: 0 Pragma: no-cache Strict-Transport-Security: max-age=3175000 ; includeSubDomains X-Content-Type-Options: nosniff X-Frame-Options: DENY X-Vcap-Request-Id: de1csd11-2721-de3a-548e-573sdt3fae22 X-Xss-Protection: 1; mode=...`; // 计算ASCII编码下的字节数 let headerSize = Buffer.byteLength(responseHeaders, 'ascii'); // 补上结尾空行的字节数 headerSize += Buffer.byteLength('\r\n', 'ascii'); console.log(`响应头大小: ${headerSize} 字节`);
Java
import java.nio.charset.StandardCharsets; public class HeaderSizeCalculator { public static void main(String[] args) { // 存储响应头的字符串 String responseHeaders = "HTTP/1.1 200 OK\n" + "Cache-Control: no-cache, no-store, max-age=0, must-revalidate\n" + "Content-Length: 2951\n" + "Content-Type: application/json\n" + "Date: Tue, 17 Apr 2018 06:34:03 GMT\n" + "Expires: 0\n" + "Pragma: no-cache\n" + "Strict-Transport-Security: max-age=3175000 ; includeSubDomains\n" + "X-Content-Type-Options: nosniff\n" + "X-Frame-Options: DENY\n" + "X-Vcap-Request-Id: de1csd11-2721-de3a-548e-573sdt3fae22\n" + "X-Xss-Protection: 1; mode=..."; // 把换行符替换成HTTP标准的\r\n responseHeaders = responseHeaders.replace("\n", "\r\n"); // 加上结尾的空行 responseHeaders += "\r\n"; // 计算ASCII编码的字节数 int headerSize = responseHeaders.getBytes(StandardCharsets.US_ASCII).length; System.out.println("响应头大小: " + headerSize + " 字节"); } }
注意事项
- 如果你的响应头变量里用的是
\n而非标准的\r\n,记得先替换成\r\n,否则计算的大小会和实际传输的不一致。 - 结尾的空行是HTTP响应头的必要组成部分,必须包含在内才能得到准确的传输大小。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

