美文网首页程序员
HTTP 协议图解

HTTP 协议图解

作者: 码农充电站pro | 来源:发表于2020-12-04 10:34 被阅读0次

    HTTP 协议是一个非常重要的网络协议,我们平时能够使用浏览器浏览网页,其中一个非常重要的条件就是HTTP 协议

    0,什么是网络协议

    互联网的目的是分享信息,网络协议是互联网的重要组成部分。

    在互联网诞生之前,计算机中的信息是无法跨机器传输的。为了更方便的分享信息,诞生了互联网。

    信息能够在不同的计算机之间快速传输,其基础技术就是网络。信息的传输,则涉及到信息的发送接收,那我们就得知道如何发送信息如何接收信息

    协议就是约定网络协议就约定了信息在网络之间是如何传输的,即如何发送如何接收

    协议分层

    网络协议不是一个协议,而是一堆协议。

    网络是分层的,分层的好处是,层与层之间分工明确,互不干预。其可分为四层网络协议五层网络协议七层网络协议,粗略一点可以分为四层,详细一点则可以分为五层或七层。

    每一层网络都有一组协议,被称为协议簇

    协议分层

    1,什么是HTTP 协议

    HTTP 全称为HyperText Transfer Protocol,即超文本传输协议。从字面上理解,其作用就是传输超文本超文本超级文本,它用超级链接的方式,将互联网中无数的文档链接在一起。

    可以简单的将超文本理解为我们平时上网浏览的网页,所以可以认为HTTP 协议的作用就是传输网页。

    2,HTTP 的发展历史

    蒂姆·伯纳斯

    HTTP 协议由英国计算机科学家蒂姆·伯纳斯于1989年在欧洲发起,蒂姆·伯纳斯 作为HTTP 的发明者,对HTTP 的发展起到了至关重要的作用,他被称为互联网之父。2017年,他因发明万维网、第一个浏览器和使万维网得以扩展的基本协议和算法而获得2016年度的图灵奖

    HTTP 协议标准由W3CIETF 共同制定,最终发布一系列的RFC

    HTTP 协议重要的发展阶段如下:

    • 1989年,由蒂姆·伯纳斯 发起
    • 1991年,发布HTTP/0.9,这是HTTP 协议的第一个版本,也是最简单的版本,只支持一个GET 方法,并且只能传输简单的文本字符串。
    • 1996年,发布HTTP/1.0,其内容大大增加,可传输图像视频二进制格式等丰富的网页。支持GETPOSTHEAD 三种方法,增加了HTTP Header头信息,状态码内容编码等功能。
    • 1997年,发布HTTP1.1,是较为完整的版本。在之前的基础上,其主要引入了持久连接分块传输等功能。另外,增加了OPTIONSPUTPATCHDELETETRACECONNECT方法。对于客户端,引入了重要的Host 头部字段,用来指定服务器的域名,使得一个请求可以发往同一台服务器上的不同网站,为虚拟主机的流行打下基础。
    • 2009年,谷歌公开了其自主研发的SPDY 协议,主要解决HTTP1.1 效率不高的问题。SPDY 协议的主要特性被引入了HTTP/2 中。
    • 2015年,发布HTTP/2,而不是HTTP/2.0,是因为标准委员会不打算再发布子版本,下一个新版本将直接是 HTTP/3
    年份 事件
    1989年 蒂姆·伯纳斯 发起
    1991年 发布HTTP/0.9
    1996年 发布HTTP/1.0
    1997年 发布HTTP/1.1
    2009年 谷歌公布SPDY
    2015年 发布HTTP/2

    3,HTTP 所在的网络层次

    HTTP 协议建立在Tcp/Ip 协议之上,HTTP 属于应用层协议。其协议层结构如下:

    HTTP 协议层

    4,HTTP 请求与响应

    HTTP 协议是一个请求-响应式协议,一般由客户端(比如浏览器)向服务端发起,服务端处理后,再向客户端返回信息。

    客户端发出的消息称为HTTP 请求Request),服务端返回的消息称为HTTP 响应Response)。

    HTTP 流程

    每种协议都有它的消息结构,有了消息结构,发送方就知道以怎样的结构发送消息,接收方就知道以怎样的结构接收消息。下面介绍HTTP 消息结构。

    5,HTTP 请求消息结构

    HTTP 请求

    由上图可看出,HTTP 请求由四部分组成:

    • 请求行:分别是请求方法+空格+URL+空格+协议版本+\r\n
    • 请求头部:由多个请求头部键值对组成,中间以冒号:隔开,每个键值对最后是\r\n
    • 空行:即\r\n
    • 请求包体:包体部分

    例子:

    GET / HTTP/1.0
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
    Accept: */*
    

    其中:

    • 第1行是请求行GET 为请求方法,/URLHTTP1.0 为协议版本,中间以空格隔开。
    • 第2行与第3行是请求头
    • 请求头下面的空行,这里没有显示。
    • 一般GET 请求不包含请求体,所以本请求中没有请求体。

    6,HTTP 请求响应结构

    HTTP 响应

    由上图可看出,HTTP 响应由四部分组成:

    • 状态行:分别是协议版本+空格+状态码+空格+状态码描述+\r\n
    • 响应头部:由多个响应头部键值对组成,中间以冒号:隔开,每个键值对最后是\r\n
    • 空行:即\r\n
    • 响应包体:包体部分

    例子:

    HTTP/1.0 200 OK 
    Content-Type: text/plain
    Content-Length: 82
    Expires: Thu, 05 Dec 1997 16:00:00 GMT
    Last-Modified: Wed, 5 August 1996 15:55:28 GMT
    Server: Apache 0.84
    
    <html>
      <body>Hello HTTP</body>
    </html>
    

    其中:

    • 第1行为响应状态行HTTP/1.0 为协议版本,200 是响应状态码OK状态码描述,中间用空格隔开。
    • 第2行到第6行为响应头
    • 第7行为空行
    • 第8行到第10行为响应内容

    7,HTTP 请求方法

    HTTP 协议支持9 种请求方法,最常用的是GETPOST 方法。

    HTTP 方法 含义
    GET 获取指定页面信息
    HEAD 类似GET 请求,但响应中没有具体内容,只有响应Header
    POST 向指定URL 提交信息
    PUT 向服务器传送数据
    DELETE 请求服务器删除指定内容
    OPTIONS 查看服务器信息
    TRACE 回显服务器收到的请求,主要用于测试或诊断
    PATCH 是对PUT 方法的补充,用来对已知资源进行局部更新
    CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器

    8,HTTP GET 与POST 方法

    GET 方法POST 方法是最常用的两个HTTP 方法,来看下其异同点:

    • 请求内容存放位置不同:GET 方法一般没有请求体,其请求内容放在URL 参数中,POST 方法则将请求内容放在请求体中。
    • POST 方法 安全性更高:GET 请求一般是明文传输,不利于传输敏感数据。POST 请求内容在请求体中,更方便加密,提高安全性。
    • POST 方法传输的数据量更大:GET 请求内容在URL 中,因此有大小限制,而POST 请求 内容在请求体中,理论上没有大小限制。

    9,HTTP 请求头字段

    这里介绍一些常用的HTTP 请求头字段:

    Host:客户端端请求的域名。
    Connection:告诉服务端,处理完本请求后,是否关闭连接。
    User-Agent:客户端使用的浏览器或APP 类型/版本。
    Accept:客户端支持哪些类型的文档。
    Accept-Encoding :客户端支持的编码类型。
    Accept-Language :客户端支持的语言类型。
    Referer :客户端从哪个网页过来的。
    Cache-Control:指定缓存机制。

    10,HTTP 响应头字段

    这里介绍一些常用的HTTP 响应头字段:

    Allow:表明服务器支持哪些请求方法,如GET,POST 等。
    Content-Encoding:响应内容编码方法。
    Content-Type:响应内容属于什么MIME 类型。
    Content-Length:响应内容的长度。
    Date:当前GMT 时间。
    Expiress:响应内容过期时间,过期后将不再缓存内容。
    Last-Modified:文档的最后改动时间。
    Location:告诉客户端到哪里获取文档,一般用于重定向。
    Refresh:浏览器在多少秒后刷新文档。
    Server:服务器名字。
    Set-Cookie:设置和页面关联的Cookie。
    Date:表示消息发送时间。

    11,HTTP 响应状态码

    服务器在向客户端返回内容时,会带有一个HTTP Status Code(状态码),用于告诉客户端的返回状态。

    HTTP 状态码分为5 种类型,由三个十进制数字组成。第一个数字(1-5)代表状态码的分类,后两位是其含义。

    状态码类型 含义
    1xx 表明服务器已经收到请求
    2xx 表明服务器已经成功接收并处理请求
    3xx 表明请求的资源已重定向到其它地方
    4xx 表明客户端的请求有错误
    5xx 表明服务端出现错误

    常见状态码:

    常见状态码 状态码描述 含义
    100 Continue 客户端应继续其请求
    200 OK 请求成功,一般用于GET与POST请求
    301 Moved Permanently 请求的资源已被永久重定向到新地址
    302 Found 请求的资源已被临时重定向到新地址
    304 Not Modified 客户端访问的内容未修改,应从缓存中获取内容
    400 Bad Request 客户端的请求有误
    401 Unauthorized 请求要求客户端进行身份认证
    403 Forbidden 服务器拒绝客户端访问
    404 Not Found 客户端请求的资源,服务端不存在
    405 Method Not Allowed 客户端请求中的方法被禁止
    500 Internal Server Error 服务器内部错误
    501 Not Implemented 服务器不支持该请求
    503 Service Unavailable 服务器过载,暂时不可用
    505 HTTP Version not supported 客户端使用的HTTP版本,服务端不支持

    12,用浏览器演示HTTP

    下面通过一个例子实际感受以下HTTP 协议。

    在浏览器(我这里用的是Chrome)中访问新浪网https://www.sina.com.cn/,通过F12键,调出浏览器开发者工具

    开发者工具
    1. 点击Network,可查看网络请求
    2. 点击某个请求,可查看该请求信息
    3. 点击Response Header,可查看响应头内容
    4. 点击Request Header,可查看请求头信息
    5. 点击点击Response,可查看响应内容

    13,用curl 命令演示HTTP

    curl 命令可以发送HTTP(S) 协议,这里curl 命令的常用方法。

    我们使用 curl -v 参数 来显示详细的HTTP 协议包信息:

    curl 命令

    14,什么是HTTP/2

    HTTP/2 可看作是HTTP1.x 的增强版,其主要解决HTTP1.x 的效率等问题,其消息结构也已经发生了改变。

    我们来访问https://http2.akamai.com/demo,来感受下HTTP2的速度。HTTP/1.1 耗时15 秒多,HTTP/2耗时6 秒多。

    http2

    HTTP2 有如下特点:

    • HTTP2 是一个彻底的二进制协议,所有信息以二进制格式传输。
    • HTTP2 支持多工(Multiplexing),在一个TCP 链接中可同时处理多个HTTP 请求。
    • HTTP2 中的数据流不是按照顺序发送的,是乱序的。
    • HTTP2 支持头信息压缩
    • HTTP2 支持服务端主动向客户端发送信息。

    15,什么是HTTPS

    https

    HTTPS 中的S 是指Security,即是安全的意思,所以HTTPS 就是安全的HTTP

    HTTPS 在HTTP 协议的基础上加入了一层SSL/TLS,用于对HTTP 信息加密,其加密采用非对称加密算法RSA 算法。其协议层结构如下:

    HTTPS 协议层

    (完。)

    相关文章

      网友评论

        本文标题:HTTP 协议图解

        本文链接:https://www.haomeiwen.com/subject/goxmwktx.html