狼书(卷2):Node.js Web应用开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 请求响应模型

超文本传输协议(简称HTTP)是互联网上应用最为广泛的一种网络协议。最初设计HTTP是为了提供一种发布和接收HTML页面的方法。通过HTTP或HTTPS请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

HTTP是由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)合作发展起来的,它们发布了一系列的RFC规范,其中最著名的是1999年6月发布的RFC 2616,该规范定义了HTTP中使用最为广泛的一个版本——HTTP 1.1。

2014年12月,IETF的HTTPbis工作小组将HTTP/2标准提议递交至IESG进行讨论,该标准于2015年2月17日被批准并于2015年5月被正式发布(基于RFC 7540),成了代替HTTP 1.1的新的HTTP实现标准。

HTTP是客户端(用户)和服务器端(网站)之间进行请求和应答的标准。通过使用Web浏览器、网络爬虫或其他工具,客户可以发起一个HTTP请求到服务器的指定端口(默认端口为80)。应答的服务器上存储着一些资源,比如HTML文件、CSS和图像等。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或隧道。

从图3-1中可以看出,HTTP部分是浏览器(或其他客户端)和服务器之间沟通的桥梁,核心是请求(Request)和响应(Response)。

图3-1

HTTP属于无状态协议,请求在每次响应后就会结束。下面我们通过Node.js创建一个简单的HTTP服务,代码如下。

在终端里执行如下命令来启动服务器。

下面解释一下这段代码是如何运行的。

○ 引入http模块。

○ 通过http.createServer方法创建一个Server实例,参数是requestListener函数,一般形式为function (req,res){...}。这里的req表示请求,res表示响应。

○ 通过listen方法来启动Server实例。

Server的绝大部分功能都在requestListener函数里实现,上面的代码是最简单的实现。

对于大多数开发者而言,理解HTTP至关重要,掌握请求响应模型对理解HTTP的无状态性是非常有帮助的。下面详细说明请求与响应,以期大家对Web应用有更好的理解。