一、网络基础:
1. ip(互联网协议地址 internet protocal)
每一台接入到互联网的计算机都会被分配一个ip地址(门牌号),表示此台计算机在互联网中的位置,类似于走亲戚串门一样,只要访问到ip就能进行相互间的计算机访问,一个机器进行访问,需要知道对方的ip,被访问的机器要做出回复也需要知道访问者的ip;
计算机默认的ip:127.0.0.1 或者可以通过ipconfig命令在命令段查看自己的ip
ipv4: 使用4个字节表示一个地址
ipv6: 16个字节128位, 增加了ip的容量
2. http://www.baidu.com
http:通信协议 www:万维网 baidu:域名 com:域名等级
com:顶级域名(商业域名) edu:教育域名 cn:国家域名
3. 通信:请求客户端通过发送对应的请求向服务端所要一定的数据
http:单向传输 (客户端向服务器发送请求) 、udp:、mail:、file:...
4. 端口:计算机需要找到某个应用程序的时候并不是调用应用程序的名称(而是找到该程序对应的端口)
5. url:统一资源定位符 uniform resource locator 网址
6. 网络有七层协议: 7.应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层
http:属于应用层协议
请求方法:get ,post,delete,head
可以通过响应部分的Content-Type来设置返回的数据类型
短连接:单向的客户端对服务器连接,不会缓存数据如若要缓存用到Cookie和session
7. http协议分为了两部分:请求报文和响应报文
请求报文:请求行,请求头,空行,请求体
请求行:本次请求的地址,请求的方式,http版本号
请求头:包含了此次请求的信息,例如:设备类型,浏览类型,请求数据长度..
空行:格式
请求体:get没有请求体(请求数据) post请求有请求体 数据可以为空
响应报文:响应行,响应头,响应数据;
响应行:本次请求的状态码和响应信息,例如http版本号;
响应头:本次响应的信息,例如响应的服务器类型,响应时间,响应数据的长度;
响应数据
请求方法:get、post…
get:数据直接追加到url后面,比较方便,但是长度受限,不够安全;
post:数据要填入到专门的请求体中,比较安全,但是没有get方便,(公司服务器大部分都是post);
能通过浏览器输入地址直接访问的方式都叫做get请求;
端口号:范围0~~65535,其中前1000是保留的,不要随便使用;
http默认的端口是80 https默认的端口是443;
二、http模块
http模块也是 nodejs自带的模块之一,用于创建http服务;
http:超文本传输协议 规定了请求方和响应方进行交互时候的规则;
var http = require("http"); // 引入模块
架设服务器:
Server 服务器 client:客户端(浏览器就是最大的 客户端);
request:请求、 response:响应;
createServer创建一个服务器对象,架设http服务,参数是监听函数;
服务器的监听函数会监听服务器有没有收到请求,收到请求之后可以在此次监听函数里面为请求者准备返回的数据;
有两个参数,req:代表此次请求的对象 、res:代表此次响应的对象;
var app = http.createServer(function (req, res) {
console.log("我收到请求了");
// 沿用默认值 但是知道了要兼容中文了
res.setHeader("Content-type", "text/html; charset=utf-8");
// 准备数据返回给请求方 end方法,用于向响应体内插入数据
// 把数据返回给客户端,并结束此次请求
// 默认的是html格式,所以直接可以嵌入标签
res.end("<h1>hello!</h1>");
});
部署:服务器启动 把各个接口打开;
listen监听,有两个参数,第一个参数是端口号;
第二个参数是开启的回调,开启成功err为空;
app.listen(8080, function (err) {
if (err) {
console.log("启动失败:" + err);
} else {
console.log("Running...");
}
});
三、path模块
path模块:文件模块;
文件路径按照完整度分为绝对路径和相对路径
绝对路径:有完整的路径,以盘符开头,完整的表示出文件所在的位置; 例如:c://progame file/nodejs/....
相对路径:不完整的路径,只记录路径结尾的部分,忽略层级关系; 例如:/nodejs/nodejs.exe (./表示当前目录 ../代表上一层);
path也是nodejs自带的模块,专门用来处理文件路径的;
var path = require("path"); // 引入模块
1. __dirname 代表当前文件所在的绝对路径
console.log(__dirname);
2. join() 把两个路径拼接到一处
// 示例:
var p1 = "abc/123";
var p2 = "qwe/456";
var p3 = path.join(p1, p2);
// 结果: abc/123/qwe/456
3. resolve() 把文件的相对路径转成绝对路径
// 示例:
var p4 = "./abc/七里香.mp3";
console.log(path.resolve(p4));
// 结果: c://progame file/nodejs/abc/七里香.mp3
4. extname() 获得文件中的文件扩展名
// 示例:
var p4 = "./abc/七里香.mp3";
console.log(path.extname(p4));
// 结果: .mp3
5. basename() 获得文件中的文件名
// 示例:
var p4 = "./abc/七里香.mp3";
console.log(path.basename(p4));
// 结果:七里香.mp3
四、url模块
1. url:统一资源定位符
协议:http,tcp,mail.ftp....
域名:....
端口:8080,3306......
路径:相对路径,绝对路径
参数:get请求post请求的数据追加到对应的参数上
哈希值:{key: value}*
完整的url需要上面这么多;
2. url模块 也分为绝对路径和相对路径
url的绝对路径以协议开头:http://www.baidu.com
url的相对路径不以协议开头,可以以域名或者是ip开头
3. 引入模块
var url = require("url");
4. parse() url模块可以把一个url路径转换成一个url对象
// 示例:
var urlStr = "http://www.nodejs.org/some/url/?with=query¶m=that#about";
var userObj = url.parse(urlStr);
console.log(userObj);
// 结果:
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.nodejs.org',
port: null,
hostname: 'www.nodejs.org',
hash: '#about',
search: '?with=query¶m=that',
query: 'with=query¶m=that',
pathname: '/some/url/',
path: '/some/url/?with=query¶m=that',
href:
'http://www.nodejs.org/some/url/?with=query¶m=that#about' }