内容简介:HTTP 协议是一个非常重要的
HTTP 协议是一个非常重要的 网络协议 ,我们平时能够使用浏览器浏览网页,其中一个非常重要的条件就是 HTTP 协议 。
0,什么是网络协议
互联网的目的是分享信息,网络协议是互联网的重要组成部分。
在互联网诞生之前,计算机中的信息是无法跨机器传输的。为了更方便的分享信息,诞生了互联网。
信息能够在不同的计算机之间快速传输,其基础技术就是 网络 。信息的 传输 ,则涉及到信息的 发送 与 接收 ,那我们就得知道 如何发送信息 与 如何接收信息 。
协议 就是 约定 , 网络协议 就约定了信息在网络之间是 如何传输 的,即 如何发送 与 如何接收 。
协议分层
网络协议不是一个协议,而是一堆协议。
网络是分层的,分层的好处是,层与层之间分工明确,互不干预。其可分为 四层网络协议 或 五层网络协议 或 七层网络协议 ,粗略一点可以分为四层,详细一点则可以分为五层或七层。
每一层网络都有一组协议,被称为 协议簇 。
1,什么是HTTP 协议
HTTP 全称为 HyperText Transfer Protocol ,即 超文本传输协议 。从字面上理解,其作用就是传输 超文本 。 超文本 即 超级文本 ,它用 超级链接 的方式,将互联网中无数的文档链接在一起。
可以简单的将 超文本 理解为我们平时上网浏览的 网页 ,所以可以认为HTTP 协议的作用就是 传输 网页。
2,HTTP 的发展历史
HTTP 协议由英国计算机科学家 蒂姆·伯纳斯 于1989年在欧洲发起, 蒂姆·伯纳斯 作为HTTP 的发明者,对HTTP 的发展起到了至关重要的作用,他被称为 互联网之父 。2017年,他因 发明万维网、第一个浏览器和使万维网得以扩展的基本协议和算法 而获得2016年度的 图灵奖 。
HTTP 协议标准由 W3C 和 IETF 共同制定,最终发布一系列的 RFC 。
HTTP 协议重要的发展阶段如下:
- 1989年,由
蒂姆·伯纳斯发起 - 1991年,发布
HTTP/0.9,这是HTTP 协议的第一个版本,也是最简单的版本,只支持一个GET方法,并且只能传输简单的文本字符串。 - 1996年,发布
HTTP/1.0,其内容大大增加,可传输图像,视频,二进制格式等丰富的网页。支持GET,POST,HEAD三种方法,增加了HTTP Header头信息,状态码,内容编码等功能。 - 1997年,发布
HTTP1.1,是较为完整的版本。在之前的基础上,其主要引入了持久连接,分块传输等功能。另外,增加了OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法。对于客户端,引入了重要的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 属于应用层协议。其协议层结构如下:
4,HTTP 请求与响应
HTTP 协议是一个 请求-响应 式协议,一般由 客户端 (比如浏览器)向 服务端 发起,服务端处理后,再向客户端返回信息。
客户端发出的消息称为 HTTP 请求 ( Request ),服务端返回的消息称为 HTTP 响应 ( Response )。
每种协议都有它的消息结构,有了消息结构,发送方就知道以怎样的结构发送消息,接收方就知道以怎样的结构接收消息。下面介绍HTTP 消息结构。
5,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为请求方法,/为URL,HTTP1.0为协议版本,中间以空格隔开。 - 第2行与第3行是
请求头。 - 请求头下面的
空行,这里没有显示。 - 一般
GET请求不包含请求体,所以本请求中没有请求体。
6,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 种 请求方法 ,最常用的是 GET 和 POST 方法。
| 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 键,调出浏览器 开发者工具 。
Network 某个请求 Response Header Request Header 点击Response
13,用curl 命令演示HTTP
curl 命令可以发送 HTTP(S) 协议, 这里 有 curl 命令的常用方法。
我们使用 curl -v 参数 来显示详细的HTTP 协议包信息:
14,什么是HTTP/2
HTTP/2 可看作是 HTTP1.x 的增强版,其主要解决 HTTP1.x 的效率等问题,其消息结构也已经发生了改变。
我们来访问 https://http2.akamai.com/demo ,来感受下 HTTP2 的速度。 HTTP/1.1 耗时15 秒多, HTTP/2 耗时6 秒多。
HTTP2 有如下特点:
二进制协议 Multiplexing 数据流 头信息压缩
15,什么是HTTPS
HTTPS 中的 S 是指 Security ,即是 安全 的意思,所以 HTTPS 就是安全的 HTTP 。
HTTPS 在HTTP 协议的基础上加入了一层 SSL/TLS ,用于对HTTP 信息加密,其加密采用 非对称加密算法RSA 算法 。其协议层结构如下:
(完。)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
嵌入式系统软件设计中的常用算法
周航慈 / 2010-1 / 24.00元
《嵌入式系统软件设计中的常用算法》根据嵌入式系统软件设计需要的常用算法知识编写而成。基本内容有:线性方程组求解、代数插值和曲线拟合、数值积分、能谱处理、数字滤波、数理统计、自动控制、数据排序、数据压缩和检错纠错等常用算法。从嵌入式系统的实际应用出发,用通俗易懂的语言代替枯燥难懂的数学推导,使读者能在比较轻松的条件下学到最基本的常用算法,并为继续学习其他算法打下基础。 《嵌入式系统软件设计中的......一起来看看 《嵌入式系统软件设计中的常用算法》 这本书的介绍吧!