webserver尽可能输出Content-Length
最后在做一个工具,使用phantomjs抓取每一次build之后产出的运行效果,其中会包含进入系统时发起的请求以及对应的响应大小
问题在于,phantomjs并没有一个很好的功能来统计gzip前的文件大小,同时这个工具依赖了webserver来作静态文件的服务器,webserver大部分情况下对文件进行分段输出,一但分段输出没有Content-Length头,就几乎没有办法拿到响应在gzip之后的大小,phantomjs获取的bodySize是解压后的文件真实大小
所以如果可以的话,是否能让webserver默认输出静态文件时给出Content-Length头,不要使用分段输出,我想大家的开发机内存应该不至于撑不住一个文件的buffer
给一段现在webserver输出的内容:
HTTP/1.1 200 OK
content-type: text/html
Vary: Accept-Encoding
Content-Encoding: gzip
Date: Fri, 31 Oct 2014 16:41:10 GMT
Connection: keep-alive
Transfer-Encoding: chunked
{
"username": "test",
"sessionToken": "613991143dc7243bac32b06ae0be9219",
"authorityList": [
],
"pageSize": 20,
"firstLogin": true
}
@leeight
assign @PengXing
你这个是proxy后端api返回的内容么?
不是,就是前端的静态文件,后端返回的我就不考虑了是啥就是啥
@otakustay npm i -g edp-webserver@beta 试试看?
不知道为啥phantomjs去请求资源返回的header比较奇怪:
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "content-type",
"value": "application/x-javascript"
},
{
"name": "content-encoding",
"value": "gzip"
},
{
"name": "Date",
"value": "Wed, 05 Nov 2014 03:24:18 GMT"
},
{
"name": "Connection",
"value": "keep-alive"
}
],
"redirectURL": "",
"headersSize": -1,
"bodySize": 420,
"content": {
"size": 420,
"mimeType": "application/x-javascript"
}
}
理论上keep-alive又没有Content-Length和Transfer-Encoding应该是没办法正确下载的,我再研究下……
这个Content-Type的逻辑是在哪实现的?我在file()这个处理器之后加了个处理器打印header只看到Content-Type,其它的头都看不到,使用phantomjs拿到的如上面所示,但是用curl --compressed就能拿到Content-Length,有些迷茫
发现必须客户端提供Accept-Encoding: gzip,响应才会有Content-Length头……但是为啥客户端没提供Accept-Encoding的时候,响应会Content-Encoding: gzip但没给Content-Length呢,而curl的行为又是正常的,不使用--compressed的话不会返回Content-Encoding,phantomjs到底干了啥
这个是使用Accept-Encoding前后的区别:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
--------------------
content-type application/x-javascript
content-encoding gzip
Date Wed, 05 Nov 2014 03:50:19 GMT
Connection keep-alive
User-Agent Mozilla/5.0 (Macintosh; PPC Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip
--------------------
content-type application/x-javascript
content-encoding gzip
content-length 111501
Date Wed, 05 Nov 2014 04:12:42 GMT
Connection keep-alive
你上面写的就是 phantomjs 发送的 request header么?
我直接这么测试的
curl -i 'http://172.18.19.17:8899/dep/esui/3.1.0-beta.3/src/validator/Validity.js' | less
Request Header 里面没有 Accept-Encoding ,貌似 Response Header 里面也没有返回 Content-Encoding 的耶
是的,curl就是完全正常的,我搞不明白phantomjs怎么出的事儿……或者就是phantomjs抓到的头不全,不过现在来看暂时是可以用的,后续的问题我自己研究就好
今天edp-webserver改了好几个版本,@otakustay 再拖最新的下来看看吧