我试图弄清楚执行单个 HTTP 请求到底需要多少网络数据
我目前正在使用 curl 模拟请求
curl -v -X POST ${vehicles_endpoint}/updateMileageAndErrorCodes/abc123/9500/P0187,P0191,P0213
并捕获响应:
* About to connect() to localhost port 8088 (#0)
* Trying ::1... connected
* Connected to localhost (::1) port 8088 (#0)
> POST /vdm/vehicles/updateMileageAndErrorCodes/abc123/15000/P0110 HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: localhost:8088
> Accept: */*
>
< HTTP/1.1 204 No Content
< Server: Apache-Coyote/1.1
< Date: Wed, 28 Aug 2013 08:20:18 GMT
<
* Connection #0 to host localhost left intact
* Closing connection #0
如何才能找出执行此请求/响应所需的确切字节数?
我可以查看请求中的字符数(211)
POST /vdm/vehicles/updateMileageAndErrorCodes/abc123/9500/P0187,P0191,P0213 HTTP/1.1
User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
Host: localhost:8088
Accept: */*
响应(86):
HTTP/1.1 204 No Content
Server: Apache-Coyote/1.1
Date: Wed, 28 Aug 2013 08:20:18 GMT
但我想还有一些其他与协议相关的开销?
如果我执行 tcpdump
sudo tcpdump -s 0 -X 'tcp dst port 80'
它给了我以下输出:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:41:47.442934 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [S], seq 1277831461, win 13140, options [mss 1460,sackOK,TS val 3832792 ecr 0,nop,wscale 1], length
0
0x0000: 4500 003c 52fd 4000 2906 b6e0 bc05 bc22 E..<R.@.)......"
0x0010: 904c 3f6a cac1 0050 4c2a 2925 0000 0000 .L?j...PL*)%....
0x0020: a002 3354 1060 0000 0204 05b4 0402 080a ..3T.`..........
0x0030: 003a 7bd8 0000 0000 0103 0301 .:{.........
10:41:47.862952 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [.], ack 197676124, win 6570, options [nop,nop,TS val 3832868 ecr 2984946753], length 0
0x0000: 4500 0034 52fe 4000 2906 b6e7 bc05 bc22 E..4R.@.)......"
0x0010: 904c 3f6a cac1 0050 4c2a 2926 0bc8 4c5c .L?j...PL*)&..L\
0x0020: 8010 19aa a223 0000 0101 080a 003a 7c24 .....#.......:|$
0x0030: b1ea ac41 ...A
10:41:48.144006 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [P.], seq 0:317, ack 1, win 6570, options [nop,nop,TS val 3832874 ecr 2984946753], length 317
0x0000: 4500 0171 52ff 4000 2906 b5a9 bc05 bc22 E..qR.@.)......"
0x0010: 904c 3f6a cac1 0050 4c2a 2926 0bc8 4c5c .L?j...PL*)&..L\
0x0020: 8018 19aa 63e2 0000 0101 080a 003a 7c2a ....c........:|*
0x0030: b1ea ac41 504f 5354 202f 7664 6d2f 7665 ...APOST./vdm/ve
0x0040: 6869 636c 6573 2f75 7064 6174 654d 696c hicles/updateMil
0x0050: 6561 6765 416e 6445 7272 6f72 436f 6465 eageAndErrorCode
0x0060: 732f 6162 6331 3233 2f39 3530 302f 5030 s/abc123/9500/P0
0x0070: 3138 372c 5030 3139 312c 5030 3231 3320 187,P0191,P0213.
0x0080: 4854 5450 2f31 2e31 0d0a 5573 6572 2d41 HTTP/1.1..User-A
0x0090: 6765 6e74 3a20 4461 6c76 696b 2f31 2e36 gent:.Dalvik/1.6
0x00a0: 2e30 2028 4c69 6e75 783b 2055 3b20 416e .0.(Linux;.U;.An
0x00b0: 6472 6f69 6420 342e 333b 2047 616c 6178 droid.4.3;.Galax
0x00c0: 7920 4e65 7875 7320 4275 696c 642f 4a57 y.Nexus.Build/JW
0x00d0: 5236 3659 290d 0a48 6f73 743a 2076 646d R66Y)..Host:.vdm
0x00e0: 2d61 7069 2e65 636f 6d6d 6974 2d63 6f6e -api.ecommit-con
0x00f0: 7375 6c74 696e 672e 6265 0d0a 436f 6e6e sulting.be..Conn
0x0100: 6563 7469 6f6e 3a20 4b65 6570 2d41 6c69 ection:.Keep-Ali
0x0110: 7665 0d0a 4163 6365 7074 2d45 6e63 6f64 ve..Accept-Encod
0x0120: 696e 673a 2067 7a69 700d 0a43 6f6e 7465 ing:.gzip..Conte
0x0130: 6e74 2d54 7970 653a 2061 7070 6c69 6361 nt-Type:.applica
0x0140: 7469 6f6e 2f78 2d77 7777 2d66 6f72 6d2d tion/x-www-form-
0x0150: 7572 6c65 6e63 6f64 6564 0d0a 436f 6e74 urlencoded..Cont
0x0160: 656e 742d 4c65 6e67 7468 3a20 300d 0a0d ent-Length:.0...
0x0170: 0a .
10:41:49.603082 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [.], ack 162, win 6490, options [nop,nop,TS val 3833096 ecr 2984948484], length 0
0x0000: 4500 0034 5300 4000 2906 b6e5 bc05 bc22 E..4S.@.)......"
0x0010: 904c 3f6a cac1 0050 4c2a 2a63 0bc8 4cfd .L?j...PL**c..L.
0x0020: 8010 195a 98ee 0000 0101 080a 003a 7d08 ...Z.........:}.
0x0030: b1ea b304 ....
10:41:49.622962 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [F.], seq 317, ack 163, win 6490, options [nop,nop,TS val 3833098 ecr 2984948484], length 0
0x0000: 4500 0034 5301 4000 2906 b6e4 bc05 bc22 E..4S.@.)......"
0x0010: 904c 3f6a cac1 0050 4c2a 2a63 0bc8 4cfe .L?j...PL**c..L.
0x0020: 8011 195a 98ea 0000 0101 080a 003a 7d0a ...Z.........:}.
0x0030: b1ea b304 ....
我注意到请求的整个长度(包括所有 http 请求标头)为 317,但我也看到很多长度:0 输出。
我如何才能确定此请求传输的确切字节数?(我使用了我的 Android 手机数据使用工具,注意到每个请求大约为 900 字节)。
答案1
要弄清楚单个请求的总内容(包括主页调用的外部文件),请查看Pingdom 的网站速度测试
您可以使用curl -I http://sitename
,或者wget
站点。
curl -I
仅显示标题(包括 Content-Length),但会丢弃文件,而 wget 实际上会保存主站点文件(例如 index.html)。这样可以获取主文件的大小,但无法获取该页面调用的所有文件的大小。
您也可以尝试使用 Chrome Dev 工具来收集一些见解。
答案2
尝试tcpdump -v
获取完整数据包长度。您在此处获取的内容(不使用“-v”)是有效负载大小(等于数据包大小减去以太网/IP/TCP 标头)。
然后对整个通信进行总结(过滤“源主机”可能有助于缩小范围)
目前尚不清楚您是否有兴趣仅计算传出的数据包,还是同时计算传入和传出的数据包。
答案3
您可以尝试Http分析器效用作为普卡普项目。此实用程序捕获 HTTP 数据并收集大量有关它的统计数据。除此之外,它还收集 HTTP 请求/响应大小。您可以在此处阅读更多信息:http://seladb.github.io/PcapPlusPlus-Doc/examples.html