天天看点

初识HTTP协议—基础

一:HTTP的前世今生

​ 事实上,我们的生活已经是离不开网络了,但是网络的背后是在一系列的协议下规范的运行着,今天就说下,只要你上网,就离不开默 默为你服务的HTTP协议。但是在享受网络生活时,我们对于HTTP一无所知,HTTP是什么?HTTP 协议是怎么来的?

  1. 图说HTTP历史:
    初识HTTP协议—基础
    这里我们不对协议的历史过多的描述,如果你感兴趣的话,可以读一读《图解HTTP》以及 极客时间的专栏《透视HTTP协议》
  2. Web三项关键技术:
    • URI:即统一资源标识符,作为互联网上资源的唯一身份;
    • HTML:即超文本标记语言,描述超文本文档;
    • HTTP:即超文本传输协议,用来传输超文本。
  3. 探讨URL:

    在平时的开发中,对于URL的使用与认知最深,但对于URI、URL、URN,三者,有时候不容易区分它们。这里图解一波

    • URI(Uniform Resource Identifier)

      :统一资源标识符
    • URL(Uniform / Universal Resource Locator)

      :统一资源定位符
    • URN (Uniform resource name )

      :统一资源名称
    初识HTTP协议—基础
    更多的资料及认识可以参考这两篇博客:URI 与 URL、URN 与 URI、URL和URN的区别

二、什么是HTTP

  1. HTTP的定义:

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。

  2. 详解HTTP定义:

    上面的说法自然是准确,但是太过于简单了,可能不是面试官想要的。当然严格上来说,协议应该包括语法、语义、同步规则以及错误处理等

    从上面的定义我们将HTTP定义拆开,分成三部分,

    超文本

    传输

    协议

    • 协议:是一种行为约定和规范,既然是协议,自然有参与者,需要两人及两人以上。
    • 传输:参照快递,从A点到B点,自然也就有了请求方和接收方,同时两点之间的传输,并不限制A、B两个角色,类似于快递,中间经过转运。这是一个双向的协议。
    • 超文本:早期“文本”只是简单的字符文字,但到现在已经扩展了图片、音频等。所谓的超文本就是字面上的意思,它是文字、图片、音频和视频等的混合体,最关键的是含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。HTML就是我们所熟悉的超文本,事实上,我认为应该是超媒体。
    经过对于HTTP 里这三个名词的详细解释,我们能对什么是HTTP协议作出一个总结了,所谓的**“HTTP协议 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范”**。
  3. 什么不是HTTP
    • HTTP 不是互联网
    • HTTP 不是编程语言
    • HTTP 不是 HTML

三、TCP/IP协议族

  1. HTTP协议的背后依赖:

    在Web世界中,不是光靠一个HTTP协议的,而是由协议的集合支撑着网络世界,这个集合就是TCP/IP协议族。

    事实上,HTTP 是应用层的协议之一,通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。

  2. TCP/IP协议族(四层模型)

    事实上,网络之间的通信是分层的,因为如果把整个协议族放在单层运行的话,那是混乱的,没有逻辑,同时协议不是一成不变的,一旦协议有所改动的话,如果不分层,就需要把整体换掉。

    同时,使用分层时,仅需要替换改变的层的内容,只需要把每层之间的接口部分定义规划好,那么各层内部就可以随意改变,更加灵活自由,在设计上也简单很多

    初识HTTP协议—基础
    上图是我画的图解—TCP/IP四层模型,更多关于四层模型的知识可以参考博客 TCP/IP协议族四层模型简述、TCP/IP四层模型及各层协议首部详述、TCP/IP协议族四层模型简述
  3. TCP\IP协议数据流示意图

    发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。而接收端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除

    初识HTTP协议—基础
  4. TCP三次握手可靠连接:

    所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。以下为客户端主动发起连接的图解:

    初识HTTP协议—基础
    简述一下为什么要有三次握手,首先TCP协议是提供可靠的连接的,之所以要有3次握手,就是为了确认双方的收发能力都是正常的
    • 客户端第一次握手:客户端无法确认什么,服务端接收到客户端的报文,确认客户端发送功能正常,自身接收功能正常
    • 服务端第二次握手:客户端接收到服务端端的报文,确认自身发送和接收功能正常,服务端发送和接收功能也正常,但是服务端还没有确认自己的发送功能是否正常
    • 客户端第三次握手:服务端接收到客户端的报文,确认自身发送和接收功能正常,客户端发送和接收功能也正常,双方建立的连接是可靠的
    这里只是对三次握手做一个简单的描述,更多详细的资料,可以参考博客 详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
  5. DNS与HTTP的羁绊:

    在计算机网络世界里,我们访问Web网站,实际上是通过IP地址来定位的,但是一长串的IP地址实际上不好记也不容易辨别的,因此也就有了域名来为我们助记,像百度这样

    www.baidu.com

    ,这样就很好s记住,而在

    cmd

    命令行界面

    ping www.baidu.com

    得到的IP地址

    14.255.177.39

    是比较难记住的,同时这么做也有了多个IP地址映射一个域名的情况,缓解服务器压力。

    DNS域名系统,上面我们说到计算机世界是靠IP地址来定位的,而DNS就是帮我们把域名转化为IP地址的

    初识HTTP协议—基础
    画了简单的DNS域名解析图解,事实上域名解析的过程是比较复杂的,详细的资料可以参考这个 DNS解析详细讲解、DNS(域名系统)解析

四、浏览器的背后

在经过上面的讲解的HTTP与TCP/IP协议族的关联后,大致上我们也能想到一次Web请求的过程

首先是我们在浏览器的地址栏里输入一个网址,按下回车,接下来大致会有这些步骤:

  • 浏览器通过 DNS 把域名解析成对应的IP地址
  • 根据IP地址通过TCP协议三次握手建立连接
  • 生成HTTP请求
  • 接收HTTP回复
  • 浏览器根据请求的资源渲染页面
初识HTTP协议—基础

针对于更详细的知识点,可以参考博客 一次Web请求过程详解

继续阅读