Node.js Http 介绍
2015-12-29 15:00
393 查看
在介绍本节的内容前,先了解如下的概念:
什么是Http?
也即超文本传输协议(HTTP ,HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。所有的文件都必须遵守这个标准。设计最初的目的是为了提供一种发布和接收页面的方法,简单的说就是一种协议,它定义了通讯的客户端与服务器端如何传输数据。
什么是Web服务器?
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。大多数 web 服务器都支持服务端的脚本语言(php、python、ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器。
目前最主流的三个Web服务器是Apache、Nginx、IIS。
Web应用框架(图片来自百度):
Client - 客户端,一般指浏览器,浏览器可以通过 HTTP 协议向服务器请求数据。
Server - 服务端,一般指 Web 服务器,可以接收客户端请求,并向客户端发送响应数据。
Business - 业务层, 通过 Web 服务器处理应用程序,如与数据库交互,逻辑运算,调用外部程序等。
Data - 数据层,一般由数据库组成。
以上的逻辑可以分为三层:用户界面层,业务逻辑层,数据访问层。也就是通常所讲的三层架构。
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
用户通过客户端界面(用户界面层),向服务器发出请求,服务器接收到请求以后,根据用户的请求进行业务逻辑处理(业务逻辑层),并向后台数据库请求数据(数据访问层)。最后将请求获取到的数据,呈现给前台用户。如下图(图片来自百度):
简单的Node.js Http
在之前的学习类容中,我们学习了如下的代码:
什么是Http?
也即超文本传输协议(HTTP ,HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。所有的文件都必须遵守这个标准。设计最初的目的是为了提供一种发布和接收页面的方法,简单的说就是一种协议,它定义了通讯的客户端与服务器端如何传输数据。
什么是Web服务器?
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。大多数 web 服务器都支持服务端的脚本语言(php、python、ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器。
目前最主流的三个Web服务器是Apache、Nginx、IIS。
Web应用框架(图片来自百度):
Client - 客户端,一般指浏览器,浏览器可以通过 HTTP 协议向服务器请求数据。
Server - 服务端,一般指 Web 服务器,可以接收客户端请求,并向客户端发送响应数据。
Business - 业务层, 通过 Web 服务器处理应用程序,如与数据库交互,逻辑运算,调用外部程序等。
Data - 数据层,一般由数据库组成。
以上的逻辑可以分为三层:用户界面层,业务逻辑层,数据访问层。也就是通常所讲的三层架构。
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
用户通过客户端界面(用户界面层),向服务器发出请求,服务器接收到请求以后,根据用户的请求进行业务逻辑处理(业务逻辑层),并向后台数据库请求数据(数据访问层)。最后将请求获取到的数据,呈现给前台用户。如下图(图片来自百度):
简单的Node.js Http
在之前的学习类容中,我们学习了如下的代码:
var http = require('http'); http.createServer(function (req, res) { res.end('Hello World'); }).listen(3000, "10.17.255.73"); console.log('Server running at ' target='_blank'>http://10.17.255.73:3000/');[/code]
1、从Node.js 的核心请求http模块并赋予一个变量,以后便以后在脚本中使用。
2、使用http.createServer方法撞见一个新的Web服务器对象,该对象的参数是一个匿名函数,函数的参数req代表请求,res代表回复的信息。
3、当请求到来时,应当相应"Hello World"字符串,然后关闭连接。
4、在最后定义了Web服务器的端口以及主机IP地址,这就意味着可以通过http://10.17.255.73:3000/ 这个地址来进行访问。
将上面的代码保存为Server.js 然后在网页中数据http://10.17.255.73:3000/,此时可以看到浏览器输出信息为"Hello World“。注意
这里的IP地址与端口,是在服务器端的IP地址与端口,实际运用中需要进行调整。
给服务器回复增加头信息var http = require('http'); http.createServer(function (req, res) { console.log(req) <strong>res.writeHead(200, { 'Content-Type': 'text/plain'</strong> }); res.end('Hello World'); }).listen(3000, "10.17.255.73"); console.log('Server running at ' target='_blank'>http://10.17.255.73:3000/');[/code]
在上面的代码中,我们增加了一段头信息,这个信息,当服务器收到客户端的请求时,回复给客服端,内容是'text/plain',文本格式,这里的200是一个状态码,代表服务器端成功接收到消息。
这里我们可以看出,通过res.writeHead,可以回复给客户端一些信息,那么我们是否可以回复其他的内容呢?当然可以,比如我们需要进行页面重定向的时候,我们就可以这样修改代码:var http = require('http'); http.createServer(function (req, res) { <strong>res.writeHead(301, { '': 'http://www.runoob.com/nodejs/nodejs-web-module.html' });</strong> res.end(); }).listen(3000, "10.17.255.73"); console.log('Server running at http://10.17.255.73:3000/');
服务器收到客户端的请求的以后,会回复客户端,让其通过301重定向到http://www.runoob.com/nodejs/nodejs-web-module.html 这个网站。
当然,我们可以通过截获客户端请求的内容,然后针对内容进行回复客户端信息,见如下的代码:var http = require('http'), url = require('url'); http.createServer(function (req, res) { var pathname = url.parse(req.url).pathname; if (pathname === '/') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Home Page\n') } else if (pathname === '/about') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('About Us\n') } else if (pathname === '/redirect') { res.writeHead(301, { 'Location': '/' }); res.end(); } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Page not found\n') } }).listen(3000, "10.17.255.73"); console.log('Server running at http://10.17.255.73:3000/');
以上的内容,当服务器端收到客户端的请求,然后对请求的地址(req.url)进行解析获取pathname路径,如果是"/" ,则给客户端返回'Home Page\n',如果是'/about'
则返回'About Us\n'。以上的代码示例,我们可以在客户端输入http://10.17.255.73:3000/,或者http://10.17.255.73:3000/about 进行观察,客户端将从服务器端获取不同的请求数据。
以上是根据Node.js 关于Http 底层的简单应用,后续我们将会增加更多的应用场景。
相关文章推荐
- 《UNIX网络编程》TCP网络编程基础(1)
- java发送https的请求
- Android 网络请求详解
- Android 网络请求详解
- CDN技术原理
- Neutron与Nova的网络逻辑关系---Neutron节点网络逻辑关系(二)
- 配置使用连接池的httpClient
- socket 连接的建立
- HTTP 错误 401.3 - Unauthorized asp.net mvc 图片,css,js没有权限访问
- iOS安全系列之一:HTTPS (轉載)
- codeforcese 498C. Array and Operations 网络流
- The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
- Web Service 使用时出现 HTTP Status 401: Unauthorized
- java使用http创建https连接,并且使用http实现webservice服务端
- 三种方法实现移动端HTTPS加速和省电
- Java Socket网络编程常见异常(转)
- tomcat部署成https协议
- 【常用工具类】NetUtil(检测当前网络状态)
- curl HTTP 测试常用参数总结
- Objective-c语言_计算机网络(UI)同步get,post和异步get,post