程序员

HTTP 协议图解

2020-12-04  本文已影响0人  码农充电站pro

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
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 请求由四部分组成:

例子:

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

其中:

6,HTTP 请求响应结构

HTTP 响应

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

例子:

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>

其中:

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 方法,来看下其异同点:

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 有如下特点:

15,什么是HTTPS

https

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

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

HTTPS 协议层

(完。)

上一篇下一篇

猜你喜欢

热点阅读