HTTP协议及发展历史

一.五层网络模型介绍

1.经典五层模型

  • 应用层 HTTP/FTP
  • 传输层 TCP/UDP
  • 网络层 [网络层为数据在结点之间传输创建逻辑链路]
  • 数据链路层 [在通信实体之间建立数据链路连接]
  • 物理层 [主要作用是定义物理设备如何传输数据]

2.传输层

  • 向用户提供可靠的端到端服务
  • 传输层向高层屏蔽了下层数据通信的细节

3.应用层

  • 为应用软件提供了很多服务
  • 构建于TCP协议之上
  • 屏蔽网络传输相关细节

二.Http协议发展历史

1.Http/0.9

  • 只有一个命令GET
  • 没有HEADER等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接

2.Http/1.0

  • 增加了很多命令
  • 增加了status code和header
  • 多字符集支持,多部分发送/权限/缓存等

3.Http/1.1

  • 持久连接
  • pipeline
  • 增加host和其他命令,有了host之后可以在同一个服务器上跑多个web服务,通过host字段表示请求同一个物理服务器

4.Http2

  • 所有数据以二进制传输
  • 同一个连接里面发送多个请求不再需要按照顺序来
  • 头信息压缩以及推送等提高效率的功能(推送的概念是服务端可以主动发起请求的,通常情况下我们需要加载完html后才会通过标签引入的形式加载js和css文件,但是如果Http2的话,可以做到html/js/css同时加载)

三.Http三次握手

1.TCP Connection

  • 在客户端与服务器之间进行Http请求的发送和返回的过程中,我们需要创建Tcp Connection
  • 请求和响应都是数据包,其中是需要传输通道的,传输通道是在Tcp中创建客户端发起/服务端接收的连接,Http请求是在这个基础上发送的,即一个Tcp连接上面可以发送多个Http请求的
  • 在Http1.1阶段允许声明请求发送后Tcp Connection不关,当第二个请求发送时还是通过刚才创建的Tcp Connection。好处在于Tcp连接创建的时候有三次握手的消耗(三次网络传输),只有创建了TcpConnection才能发送Http请求。

2.三次握手时序图

在这里插入图片描述

  • 通过三次握手规避由于网络延时等问题导致服务器不必要的开销

四.URI/URL/URN

1.URI

  • URI: Uniform Resource Identifier 统一资源标志符
  • 用来标识互联网上特定信息资源
  • 包含URL和URN

2.URL

  • Uniform Resource Locator 统一资源定位器
  • URL格式:http://[scheme协议部分]user:passord[如果资源需要用用户名和密码登陆时在这部分写用户名和密码]@host.com[域名用来定位资源所在服务器在互联网中的位置]:80[端口]/path[路由]?query=string[搜索参数]#hash[锚点定位]
  • 注意不仅仅是Http的链接称作URL,很多其他协议的链接也称为URL,如ftp协议等等

3.URN

  • 永久统一资源定位符
  • 通常情况下,当资源移动后,我们访问之前的链接就会报404。URN解决了这个问题,实现了在资源移动之后还能被找到
  • 目前还没有非常成熟的使用方案

五.Http报文

在这里插入图片描述

1.请求报文

  • 请求行
    • 请求方法 URL资源地址(路由部分) 协议版本
  • 请求头
  • 请求体

2.响应报文

  • 响应行
    • 协议版本 响应状态码 响应状态码含义
  • 响应头
  • 响应体

3.Http方法

  • 用来定义对于资源的操作
  • 常用有GET/POST/PUT/DELETE
  • 从定义上讲有各自的语义

4.Http Code

  • 定义服务器对请求的处理结果
  • 各个区间的Code有各自的语义
  • 好的Http服务可以通过Code判断结果

六.使用Node构建简单Web服务

  • 示例代码
const http = require('http');
http.createServer((request, response)=>{
    console.log('Request come:', request.url);
    response.end('123');
}).listen(8888);//监听在8888端口
console.log('Server listening on 8888');
  • 效果演示
    在这里插入图片描述
发布了258 篇原创文章 · 获赞 332 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_34829447/article/details/94624826