Nodejs之HTTP


本文主要介绍Nodejs的相关基本知识。

##Nodejs基本介绍 Nodejs是基于chrome V8引擎、由C++语言编写的、本质上是javascript的运行环境。同时,由社区提供了丰富了运行包,使用起来方便简洁也易于管理。 Nodejs模块和包由npm管理,每个模块包含定义、标识和引用三部分组成。Nodejs模块遵从Commonjs规范,规范与实现互为促进。

Nodejs中模块分为三类:

  • 核心模块,多为自带的模块:

      http、fs、path
    
  • 文件模块,多为自己编写的模块:

      var _module = require('./_module.js')
    
  • 第三方模块,多为从npm官网下载的模块:

      var express = require('./express')
    

##HTTP基本知识 URI:统一资源标识符,字符串格式规范 URL:统一资源定位符

在URL中:

  • “#”是网页位置的标识符,如锚点或者id。在用http.parse()解析URL之后表示为hash。主要用来指导浏览器,对服务器无用。

  • “&”是不同参数之间的间隔符

  • “?”的作用为:连接、消除缓存

HTTP是种网络协议,不是设备之间的通信必须遵从协议。HTTP 在使用场景中的大致流程为:

1. http客户端发起请求,创建端口
2. http服务器在端口监听客户请求
3. http服务器向客户端返回状态和内容

这段话貌似是废话,那么具体的流程是怎么样的呢?以Chrome浏览器为例:

  • Chrome搜索自身的DNS缓存,看是否包含请求域名的IP地址以及是否过期

      chrome://net-internals/#dns
    
  • 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效)
  • 读取本地的HOST文件
  • 浏览器发起一个DNS的系统调用
    • 宽带运营商服务器查看本身的缓存
    • 如果没有找到 ,则运营商服务器发起一个迭代的DNS解析请求
    • 运营商服务器把结果返回操作系统内核,同时也缓存起来(时间长了会失效)
    • 操作系统内核把结果返回给浏览器
    • 最终,浏览器取得请求域名的IP地址
  • 浏览器获得域名对应的IP地址后,发起HTTP的”三次握手”
  • TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。如,用HTTP的GET方法请求一个根域名里的一个域名,协议可以是HTTP 1.1协议。
  • 服务器端接受到请求后,根据路径参数,经过后端的一些处理之后,把处理后的结果数据返回给浏览器,如将完整的HTML页面代码返回给浏览器。
  • 浏览器拿到服务器返回的结果之后,将其解析并渲染出来,呈现给用户。