@EncyKe
2016-11-14T09:58:35.000000Z
字数 2921
阅读 2581
#手册
JavaScript
- 浏览器搜索自身 DNS 缓存;
chrome://net-internals/#dns
可查看 chrome 自身的 DNS 缓存;- 若 1 无缓存或缓存失效:搜索操作系统 DNS 缓存;
- 若 2 失败:读取本地 Host 文件;
- 若 3 失败:浏览器发起一个 DNS 的一个系统调用;
1) 宽带运营商服务器查看自身缓存;
2) 运营商服务器发起一个迭代 DNS 解析的请求;
3) 运营商服务器把结果返回操作系统内核同时缓存起来;
4) 操作系统内核把结果返回给浏览器;
5) 浏览器获取域名对应的 ip 地址;- 浏览器获取 ip 后,发起 HTTP「三次握手」;建立 TCP/IP 连接;
- 浏览器向服务器发送 HTTP 请求,如 GET 方法或 POST 方法;
- 服务器端接收请求,由路径参数进行后端处理后把数据(如 HTML 页面代码)返回给浏览器;
- 浏览器获取数据后进行解析、渲染,根据所需获取 JS、CSS 和图片等静态资源,这三类数据同样要经过以上 7 个步骤获得;
- 浏览器解析现有资源代码,渲染页面呈现给客户;
1xx
:请求已接收,正在处理;2xx
:请求接受成功,处理完成,成功返回:200=ok
;3xx
:请求重定向;即请求没有成功,客户须进一步操作;4xx
:客户端错误:400
有语法错误不能理解,401
请求未授权,403
拒绝提供服务,404
未找到改地址;5xx
:服务器错误:500
服务器发生未知错误,503
服务器端当前不能处理;通过回调达到异步编程,达到非阻塞的效果。
setTimeout()
和 setInterval()
;语法:
url.parse('<url>', true, true)
true
参数可选:第一个 true
表将查询字符串解析成对象,第二个 true
表解析不知道协议的 URL;语法:
url.format({})
语法:
url.resolve('<主域名/>','<子路径名>')
语法:
querystring.stringify({json/String}, '键值对分隔符', '键值连接符')
示例:
querystring.stringify({name: 'scott', course: ['jade', 'node'], from: ''})
==> name=scott&course=jade&course=node&from=
querystring.stringify({name: 'scott', course: ['jade', 'node'], from: ''}, ', ', ':')
==> name:scott,course:jade,course:node,from:
语法:
querystring.parse()
querystring.stringify()
的反操作;语法:
querystring.escape
querystring.escape('现在已经是秋天了');
==> %E7%8E%B0%E5%9C%A8%E5%B7%B2%E7%BB%8F%E6%98%AF%E7%A7%8B%E5%A4%A9%E4%BA%86
语法:
querystring.unescape
querystring.escape
的反操作;var HTTP = require('HTTP');
-n
:总共的请求执行数,缺省为 1;-c
:并发数,缺省为 1;-t
:测试所进行的总时间,秒为单位,缺省为 50000s;-p
:POST 时的数据文件;-w
: 以 HTML 表的格式输出结果;
示例:ab -n1000 -c10 http://localhost:2015/
npm install cheerio
;