@yangfch3
2016-05-20T21:46:10.000000Z
字数 2225
阅读 2609
临时
链接:7-days-NodeJS
链接:7-days-NodeJS 笔记(上)
NodeJS 被创造出来的动机就是为了编写高性能 Web 服务器
NodeJS 能帮助我们了解网络编程,学习 HTTP 协议和 Socket 协议
在 Linux 系统下,监听 1024 以下端口需要 root 权限
与网络编程相关的 API 主要包含在以下库里:
'http' 模块提供两种使用方式:
.createServer
方法创建一个服务器,.listen
方法监听端口,Node.js 在 http 服务器中仍旧采用事件驱动执行的机制
空行之上是 请求头,之下是 请求体。HTTP 请求在发送给服务器时,可以认为是按照从头到尾的顺序一个字节一个字节地 以数据流方式发送 的
http 模块创建的 HTTP 服务器在接收到完整的请求头后,就会 调用回调函数。在回调函数中,除了可以使用 request
对象访问请求头数据外,还能把 request
对象当作一个只读数据流来访问请求体数据
http.createServer(function (request, response) {
var body = [];
console.log(request.method);
console.log(request.headers);
request.on('data', function (chunk) {
body.push(chunk);
});
request.on('end', function () {
body = Buffer.concat(body);
console.log(body.toString());
});
}).listen(80);
------------------------------------
POST
{ 'user-agent': 'curl/7.26.0',
host: 'localhost',
accept: '*/*',
'content-length': '11',
'content-type': 'application/x-www-form-urlencoded' }
Hello World
HTTP 响应本质上也是一个数据流,同样由响应头(headers)和响应体(body)组成,在回调函数中,除了可以 使用 response
对象来写入响应头数据 外,还能 把 response
对象当作一个只写数据流来写入响应体数据
http.createServer(function (request, response) {
response.writeHead(200, { 'Content-Type': 'text/plain' });
request.on('data', function (chunk) {
response.write(chunk);
});
request.on('end', function () {
response.end();
});
}).listen(80);
http 模块在客户端模式下可以用于发起 HTTP 请求的作用:使用 http.request()
或 http.get()
(便捷版 API)等。需要指定目标服务器的位置并发送请求头和请求体,这些数据以对象的形式传入方法中,并支持回调
var http = require('http');
var options = {
hostname: 'http://localhost',
port: 8848,
path: '/',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
var request = http.request(options, function (response) {});
// 便捷版 get 请求
// http.get('http://www.example.com/', function (response) {});
request.write('Hello World');
request.end();
当客户端发送请求并 接收到完整的服务端响应头 时,就会调用回调函数。在回调函数中,除了可以使用 response
对象 访问响应头数据 外,还能 把 response
对象当作一个只读数据流来访问响应体数据
var http = require('http');
http.get('http://www.baidu.com/', function (response) {
var body = [];
console.log(response.statusCode);
console.log(response.headers);
response.on('data', function (chunk) {
body.push(chunk);
});
response.on('end', function () {
body = Buffer.concat(body);
console.log(body.toString());
});
});
---响应---
200
{
...
}
<!DOCTYPE html>
...
https 模块与 http 模块十分相似,区别在于 https 模块需要额外处理 SSL 证书