网络编程

简介

  node具有事件驱动、无阻塞、单线程等特性,其搭建服务器的优势是:

  • 具有良好的伸缩性,使得它十分轻量;
  • 无需额外的容器,其他大多数的编程语言需要专门的web服务器做容器(PHP需要搭建Apache或Nginx环境,JSP需要Tomcat服务器等);

http服务器

  1. http模块
      HTTP服务继承自TCP服务器(net模块),它能与多个客户端保持连接,由于采用事件驱动,并不为每个连接创建额外的线程或进程,保持很低的内存占用,所以能实现高并发。HTTP服务以request为单位进行服务。
      http模块将连接所用的套接字的读写抽象为ServerRequest和ServerResponse对象。

    http模块处理请求

  2. http请求:ServerRequest对象
      该对象对于TCP连接的读操作,调用二进制模块http_parser进行解析,放置req.headers属性上,在解析完请求报文的报头后,触发request事件。


    http请求解析
  3. http响应:ServerResponse对象(可写流对象)
    (1)报文头

    • res.setHeader():对报文头部信息进行设置;
    • res.writeHead():该方法才会将报头写入连接中;
      (2)报文体
    • res.write()
    • res.end():结束请求但未断开连接(否则客户端一直处于等待状态),先调用write()发送数据,再发送信号告知服务器这次响应结束;
      注:报头在报文体发送前发送的,一旦开始了数据的发送,writeHead()和setHeader()将不再生效,调用res.end()结束响应后,Http服务器可能会将当前的连接用于下一个请求,或关闭请求(由keep-alive决定)。
      是否保持长连接

4.http服务的事件

  • connection事件:底层的TCP连接建立时,服务器触发一次connection事件,一次连接可以在多次请求响应之间使用(keep-alive);
  • request事件:建立tcp连接后,http底层将在数据流中抽象出HTTP请求和HTTP响应,将请求数据发送到服务端,解析出HTTP请求头后,将会触发该事件,在res.end()后,TCP连接可能将用于下一次请求响应;
  • close事件:当已有的连接都断开时,server.close()停止接受新的连接;
  • checkContinue事件:客户端在发送较大的数据时,并不会将数据直接发送,而是先发送带Expect: 100-continue的一个头部请到服务器,触发该事件,该事件与request事件是互斥的:
    • 服务器响应100 Continue的状态码表示接受大数据;
    • 服务器响应400 Bad Request的状态码表示不接受大数据,拒绝客户端继续发送数据;
  • upgrade事件:当客户端要去升级连接的协议时,在请求头中带上Upgrade字段,服务器端会在收到这样的请求时触发该事件。

http客户端

  1. http客户端的构建:http.request(options, connect事件);

    • options参数决定了http请求头中的内容;
    • 报文体:内容由请求对象的write()(向连接中写入数据)和end()(告知报文结束)实现;
      Ajax的实质就是一个异步的网络HTTP请求。
  2. http代理

  • http-globalAgent:http模块包含的默认客户端代理对象,在keep-alive—重用TCP连接情况下,对每个服务器端(host+port)创建的连接进行管理,实质是一个连接池,客户端对同一个服务器端发起的http请求最多可以创建5个连接—调用http客户端对同一个服务器发起10次请求时,其实质只有5个请求处于并发状态,后续的请求需要等待某个请求完成服务后才能真正发出;

3.http客户端事件

  • response事件:与服务器端的request事件对应;
  • socket事件:当底层连接池中建立的连接分配给当前请求对象时,触发该事件;
  • connect事件:当客户端发起connect请求,服务器响应200状态码时,客户端触发该事件;
  • continue事件:客户端向服务端发起Expect:100 continue头信息以试图发送较大数据量,若服务器响应100 continue状态时,客户端将触发该事件;

网络服务与安全

  1. TLS/SSL:公钥/私钥—非对称结构+数字证书,数据在传递到应用层之前就已经完成了加密和解密过程;
    (1)密钥
  • 公钥:加密要要传输的数据;
  • 私钥:解密接收到的数据;

(2)数字证书:CA(数字证书认证中心,权威的第三方机构)为站点颁发证书—用户产生直接的密钥对,并将公钥和个人身份信息传送给认证机构,认证机构核实了用户身份后,将发给用户一个数字证书,其包含了用户个人信息和公钥信息,同时还有认证中心的签名信息。

  • 数字签名:保证信件信息未被修改;
    • 发件人使用Hash函数生成内容的摘要;
    • 发件人用自己的私钥对摘要进行加密,从而生成数字签名;
  • 数字证书:保证公钥是正确的;CA用自己的私钥对发件人的公钥和一些相关信息一起加密,生成数字证书;
      因此,在建立安全传输之前,客户端和服务器之间需要互换公钥,通过证书中的签名确认收到的公钥来自于目标服务器且没有被修改过,产生信任关系,然后用对方的公钥加密后再传递数据,对方收到数据后可以用自己的私钥解密得到数据;

https图解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 前言 本章主要介绍如下知识,通过了解这些知识,进一步理解node为何适合在分布式网络中扮演各种角色。另外,由于no...
    白昔月阅读 1,902评论 0 3
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,300评论 1 92
  • 6.1 公钥密钥加密原理 6.1.1 基础知识 密钥:一般就是一个字符串或数字,在加密或者解密时传递给加密/解密算...
    AndroidMaster阅读 4,000评论 1 8
  • 风风火火恍恍惚惚,大四已经只剩一个尾巴了。过完本科最后一个五一,木子感觉时间像是安了个超大功率的加速器,以神挡杀神...
    李木子的世界阅读 129评论 0 0
  • 2018-02-20 姓名:刘卫师: 公司:宁波大发化纤有限公司 《六项精进》289期反省二组纪律委员【日精进打卡...
    刘伟师阅读 127评论 0 0