Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。
它为用户提供了在本地计算机上完成远程主机工作的能力,即旨在提供双向的虚拟终端。
大多数的主流操作系统都内置了Telnet客户端。但是我的win10操作系统无法连接,我也无法解决,所以就使用win10自带的Linux Bash中的Telnet进行测试。
首先创建项目目录:telnet-test
在目录下创建server.js文件,代码如下:
// 加载依赖模块
var http = require('http');
// 创建服务器
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/html
response.writeHead(200, {'Content-Type': 'text/html'});
// 发送响应数据 "Hello World",并对world加粗
response.end('Hello <b>World<b>\n');
}).listen(8888);
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
win + R 输入CMD,进入项目目录,输入:node server.js,结果如下:
打开浏览器,输入:http://127.0.0.1:8888/,出现如下结果说明服务器端正常。
再次点击win + R 启动CMD,输入bash,再输入:telnet 127.0.0.1 8888,结果如下:
出现上图结果说明已经正常工作了,但是服务器端的“Hello World”并没有到客户端。原因在于,要往TCP连接中写数据,必须首先创建一个HTTP请求,这就是套接字(socket)。所以在终端输入:GET / HTTP/1.1,然后按下回车两次。结果如下:
HTTP在请求和响应消息前使用头信息(header)来描述不同的消息内容。发送内容的类型(type)在Content-Type头信息中标注的。
为测试头信息,现将server.js稍作修改:
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200);
// 注意在world两侧将上了加粗标签
response.end('Hello <b>World<b>\n');
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
再次启动Node服务,浏览器结果如下:
浏览器并没有看到富文本,原因是,HTTP客户端(浏览器)并不知道服务器发送过来的内容是什么类型,没有在头信息中加入内容类型,所以浏览器默认内容是text/plain类型,也就是普通文本类型,进而不会将它作为HTML来渲染。