HTTP 协议原理(一):简介

目录

  • 1 浏览器输入 URL 后 HTTP 请求返回的完整过程
  • 2 网络协议分层
  • 3 HTTP 协议历史
  • 4 HTTP 的三次握手
  • 5 URI、URL 和 URN
  • 6 HTTP 报文格式
  • 7 使用 node 创建一个 HTTP 服务

1 浏览器输入 URL 后 HTTP 请求返回的完整过程

浏览器输入 URL 后 HTTP 请求返回的完整过程

说明:

  • 1、Redirect:因为浏览器可能已经记录了你要访问的地址 URL,已经需要跳转到新的地址 URL,所以,浏览器首先需要判断是否应该 Redirect 跳转;

  • 2、App cache:是否有缓存,如果没有缓存,可需要去请求服务器;

  • 3、DNS:域名解析成对应的 IP 地址,才能访问到服务器

  • 4、TCP:有了 IP,就可以创建 TCP 连接,需要 3 次握手,才能把 TCP 创建起来;如果是 https,那还需要创建一个 https 连接,跟 TCP 3 次握手又不太一样,因为 https 中间要有保证传输安全的过程;HTTP 的发送,是在 TCP 连接的基础之上的。

  • 5、Request:连接创建成功后,才真正可以发送 HTTP 请求数据包;

  • 6、Response:服务器接受到数据包后,操作完成,返回请求需要的数据;

2 网络协议分层

经典五层模型

说明:

  • 1、应用层:
    为应用软件提供了很多服务;

    构建于 TCP 协议之上;

    屏蔽网络传输相关的细节;

  • 2、传输层:
    有两个协议,TCP 和 UDP 协议,一般会选择 TCP 协议,因为更可靠,帮我们去传输数据;

    向用户提供可靠的端到端(End-To-End)服务;

    传输层向高层屏蔽了下层数据通信的细节;

    简单理解:在传输层,传输的数据大或者小,大了如何分片、打包,数据传输的处理,都是在传输层做的;

  • 3、网络层:数据在结点之间传输创建逻辑链路;(例:如何去访问到百度的服务器所在的地址,这里一个逻辑关系,是在网络层实现的)

  • 4、数据链路层:在通信的实体间建立数据链路连接;(有了物理设备,数据也要通过这些物理设备建立起电路,进行数据传输,如:0101...)

  • 5、物理层:定义物理设备如何去传输数据;(电脑硬件、网卡端口、网线、光缆等等)

3 HTTP 协议历史

  • HTTP / 0.9

    只用一个命令 GET

    没有 HEADER 等描述数据的信息

    服务器发送完毕,就关闭 TCP 连接;

    注意:这里的 TCP 连接,跟 HTTP 连接不是同一个概念,同一个 TCP 连接,对应的是多个 HTTP 请求,而一个 HTTP 请求,它是在某一个 TCP 连接里面进行发送;

  • HTTP / 1.0

    增加了很多命令

    增加 status code 和 header

    多字符集支持、多部分发送、权限、缓存等

  • HTTP / 1.1

    持久连接

    pipeline

    增加 host 和其他的一些命令

  • HTTP2

    所有的数据以二进制传输

    同一个连接里面发送多个请求不再需要按照顺序来(并行,解决串行请求问题)

    头信息压缩以及推送等提高效率的功能

4 HTTP 的三次握手

客户端与服务端进行 HTTP 请求与响应,是需要在 TCP 连接的基础之上的,因为 HTTP 是不存在连接的概念,它只有请求和响应的概念,请求和响应都是数据包,他们之间的传输是需要进行一个传输的通道,而这个通道是通过 TCP 建立起来的连接。

HTTP 连接的三次握手

为什么要进行三次握手尼?

为了防止服务端开启一些无用的连接,因为网络传输是有延时的,如果客户端发送一个请求给服务器端,服务端直接发送数据给客户端, 这个数据包有可能因为网络的原因丢失了,所以,客户端就无法接受到服务器返回的数据,则,客户端可能会关闭这个连接,重新发起一个新的请求,而服务端是不知道客户端有没有接受到数据的这个过程。

如果没有第三次握手的话,服务端也不知道客户端有没有接受到这个信息,并且也无法确定到底是要关闭或者保持这个连接,服务端就会一直开着这个端口,等待客户端来发送请求,它是无法确定这个连接是否失败,所以,需要三次握手,来让客户端和服务端及时的知道该连接是否由于网络问题,而出现错误,避免资源浪费;

5 URI、URL 和 URN

  • URI

    Uniform Resource Identifier / 统一资源标识符

    用来唯一标识互联网上的信息资源

    包括 URL 和 URN

  • URL

    Uniform Resource Locator / 统一资源定位器

    http://user:pass@host.com:80/path?query=string#hash

    此类格式都是叫 URL,如 ftp 协议

  • URN (了解)

    永久统一资源定位符

    在资源移动之后还能被找到

    目前还没有非常成熟的使用方案

6 HTTP 报文格式

请求报文首行信息包括,方法、URL、 HTTP 协议和版本

相应报文首行信息包括,HTTP 协议、状态码、状态码语义

  • HTTP 方法
    常用:GET、POST、PUT、DELETE

  • HTTP Code

7 使用 node 创建一个 HTTP 服务

service.js:

const http = require('http');

http.createServer(function (request, response) {
  console.log('request', request.url);
  response.end('1111')
}).listen(8888)

console.log('server listing 8888');

运行:node service.js

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容