zoukankan      html  css  js  c++  java
  • 浅谈http和https协议与nodeJs的应用

    HTTP协议的主要特点:
    1.支持客户/服务器模式。
    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
    3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    4.限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5.HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。



    HTTP协议之URL
    HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:
    http://host[":"port][abs_path]
    http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用默认端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常浏览器会自动帮我们完成。

    例如:

    输入:www.cnblogs.com/undefined-w
    浏览器自动转换成:http://www.cnblogs.com/undefined-w/

     因此在nodejs中构建路由时,一般主页对应的是  “/”

    nodejs中的核心模块URL有url.parse()方法可以解析url,有三个参数,第一个参数为url,为必须参数,第二个参数默认为false,为true时会将querystring解析成对象的形式,第三个参数是没有http时的配置,用法如下:

    const url = require("url");
    const urlObject = url.parse("http://www.cnblogs.com/undefined-w/",true);
    console.log(urlObject);


    HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文

    HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

    具体介绍下nodejs可能用到的状态行和消息报头


    状态行格式如下:
    HTTP-Version   Status-Code   Reason-Phrase CRLF
    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码(常用的有200,304,404,500;200表示请求成功,304表示从缓存中加载,404表示路径错误未找到,500内部服务器错误);Reason-Phrase表示状态

    HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。
    每一个报头域格式 : 名字+“:”+空格+值,名字是不区分大小的。

    实体报头
    请求和响应消息都可以传送一个实体。一个实体由 实体报头域和实体正文 组成,实体报头定义了关于实体正文和请求所标识的资源的元信息。
    常用的实体报头
    1、Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。

    Content-Encoding这样用于记录文档的压缩方法,eg:Content-Encoding:gzip

    2、Content-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者

    3、Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

    4、Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。

    Content-Type:text/html;charset=ISO-8859-1

    Content-Type:text/html;charset=GB2312

    Content-Type:image/jpg (图片格式)

    5、Last-Modified实体报头域用于指示资源的最后修改日期和时间。

    6、Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中的页面,我们可以使用Expires实体报头域指定页面过期的时间。

     一个简单的示例:

     1 const http = require('http');//引入http模块
     2 const host = '127.0.0.1';//ip地址(回环地址)
     3 const port = '1234';//端口
     4 //创建服务
     5 const server = http.createServer((req,res)=>{
     6 
     7     // res.statusCode = 200;
     8     // res.setHeader("Content-Type","text/plain")//输出为纯文本格式
     9     // res.setHeader("Content-Type","text/html;charset=utf8")//charset表示字符,不然汉字会输出乱码
    10     res.writeHead(200,{//以上的简写
    11         "Content-Type":"text/html;charset=utf8"
    12     })
    13     res.end('示例');
    14 }).listen(port)


    HTTP 协议的主要不足:
    1、通信使用明文( 不加密) , 内容可能会被窃听
    2、不验证通信方的身份, 因此有可能遭遇伪装
    3、无法证明报文的完整性, 所以有可能已遭篡改

    通过使用HTTPS协议可以解决前两个不足:
    HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议
    SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。

    HTTPS和HTTP的区别:
    1、https协议需要到ca申请证书,一般免费证书很少,需要交费。
    2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
    3、http和https使用的是完全不同的连接方式用的默认端口也不一样,前者是80,后者是443。
    4、http的连接很简单,是无状态的,
    https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。

  • 相关阅读:
    iptables的例子1
    Nginx教程
    bash编程基础
    centos7 PXE自动安装环境搭建
    矛盾破裂了
    20200823-矩阵的收尾与离散控制的跌跌撞撞
    20200817-三大公式的结束-频域法的再探
    markdown换行
    由二〇二〇新冠疫情引发的对于开源、分享这一理念的看法
    Windows简单使用记录
  • 原文地址:https://www.cnblogs.com/undefined-w/p/7727864.html
Copyright © 2011-2022 走看看