HTTP协议
HTTP基本概念
HTTP是超文本传输协议,也就是HyperText Transfer Protocol。
详细解释超文本传输协议。
根据名字,可以将超文本传输协议分解为:超文本、传输、协议。
协议:HTTP 是⼀个⽤在计算机世界⾥的协议。它使⽤计算机能够理解的语⾔确⽴了⼀种计算机之间交流通信的规范,以及相关的各种控制和错误处理⽅式。
传输:就是把⼀堆东⻄从 A 点搬到 B 点,或者从 B 点 搬到 A 点。而HTTP协议是双向协议,
我们在上⽹冲浪时,浏览器是请求⽅ A ,百度⽹站就是应答⽅ B。双⽅约定⽤ HTTP 协议来通信,于是浏览器把请
求数据发送给⽹站,⽹站再把⼀些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图⽚、视频了。
数据虽然是在 A 和 B 之间传输,但允许中间有中转或接⼒。⽽在 HTTP ⾥,需要中间⼈遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意额外的东⻄。HTTP 是⼀个在计算机世界⾥专⻔⽤来在两点之间传输数据的约定和规范。
超文本:HTTP 传输的内容是「超⽂本」。
我们先来理解「⽂本」,在互联⽹早期的时候只是简单的字符⽂字,但现在「⽂本」的涵义已经可以扩展为图⽚、 视频、压缩包等,在 HTTP 眼⾥这些都算作「⽂本」。
再来理解「超⽂本」,它就是超越了普通⽂本的⽂本,它是⽂字、图⽚、视频等的混合体,最关键有超链接,能从 ⼀个超⽂本跳转到另外⼀个超⽂本。
HTML 就是最常⻅的超⽂本了,它本身只是纯⽂字⽂件,但内部⽤很多标签定义了图⽚、视频等的链接,再经过浏 览器的解释,呈现给我们的就是⼀个⽂字、有画⾯的⽹⻚了。
OK,经过了对 HTTP ⾥这三个名词的详细解释,就可以给出⽐「超⽂本传输协议」这七个字更准确更有技术含量的答案:
HTTP 是⼀个在计算机世界⾥专⻔在「两点」之间「传输」⽂字、图⽚、⾳频、视频等「超⽂本」数据的「约定和规范」。
http 常⻅字段有哪些?
Host 字段
客户端发送请求时,⽤来指定服务器的域名。
Content-Length 字段
服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。
如上⾯则是告诉浏览器,本次服务器回应的数据⻓度是 1000 个字节,后⾯的字节就属于下⼀个回应了。
Connection 字段
Connection 字段最常⽤于客户端要求服务器使⽤ TCP 持久连接,以便其他请求复⽤。
HTTP/1.1 版本的默认连接都是持久连接,但为了兼容⽼版本的 HTTP,需要指定 Connection ⾸部字段的值为 Keep-Alive 。
‘Connection: keep-alive’
⼀个可以复⽤的 TCP 连接就建⽴了,直到客户端或服务器主动关闭连接。但是,这不是标准字段。
Content-Type 字段
Content-Type 字段⽤于服务器回应时,告诉客户端,本次数据是什么格式。
Content-Type: text/html; charset=utf-8
上⾯的类型表明,发送的是⽹⻚,⽽且编码是UTF-8。
客户端请求的时候,可以使⽤ Accept 字段声明⾃⼰可以接受哪些数据格式。
Accept: /
上⾯代码中,客户端声明⾃⼰可以接受任何格式的数据。
Content-Encoding 字段
Content-Encoding 字段说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式
Content-Encoding: gzip
上⾯表示服务器返回的数据采⽤了 gzip ⽅式压缩,告知客户端需要⽤此⽅式解压。
客户端在请求时,⽤ Accept-Encoding 字段说明⾃⼰可以接受哪些压缩⽅法。
Accept-Encoding: gzip, deflate
GET 与 POST区别
Get ⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等。
⽽ POST ⽅法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报⽂的 body ⾥。
HTTP 特性
HTTP 最凸出的优点是「简单、灵活和易于扩展、应⽤⼴泛和跨平台」。
简单
HTTP 基本的报⽂格式就是 header + body ,头部信息也是 key-value 简单⽂本的形式,易于理解,降低了学
习和使⽤的⻔槛。
灵活和易于扩展
HTTP协议⾥的各类请求⽅法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发⼈员⾃定
义和扩充。
同时 HTTP 由于是⼯作在应⽤层( OSI 第七层),则它下层可以随意变化。
HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层,HTTP/3 甚⾄把 TCP 层换成了基于 UDP 的 QUIC。
应⽤⼴泛和跨平台
互联⽹发展⾄今,HTTP 的应⽤范围⾮常的⼴泛,从台式机的浏览器到⼿机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应⽤⽚地开花,同时天然具有跨平台的优越性。
缺点
HTTP 协议⾥有优缺点⼀体的双刃剑,分别是「⽆状态、明⽂传输」,同时还有⼀⼤缺点「不安全」。
- ⽆状态双刃剑⽆状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的
负担,能够把更多的 CPU 和内存⽤来对外提供服务。
⽆状态的坏处,既然服务器没有记忆能⼒,它在完成有关联性的操作时会⾮常麻烦。
例如登录->添加购物⻋->下单->结算->⽀付,这系列操作都要知道⽤户的身份才⾏。但服务器不知道这些请求是有关联的,每次都要问⼀遍身份信息。
这样每操作⼀次,都要验证信息,这样的购物体验还能愉快吗?别问,问就是酸爽!
对于⽆状态的问题,解法⽅案有很多种,其中⽐较简单的⽅式⽤ Cookie 技术。
Cookie 通过在请求和响应报⽂中写⼊ Cookie 信息来控制客户端的状态。
相当于,在客户端第⼀次请求后,服务器会下发⼀个装有客户信息的「⼩贴纸」,后续客户端请求服务器的时候, 带上「⼩贴纸」,服务器就能认得了了,
- 明⽂传输双刃剑
明⽂意味着在传输过程中的信息,是可⽅便阅读的,通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接⾁眼查看,为我们调试⼯作带了极⼤的便利性。
但是这正是这样,HTTP 的所有信息都暴露在了光天化⽇下,相当于信息裸奔。在传输的漫⻓的过程中,信息的内容都毫⽆隐私可⾔,很容易就能被窃取,如果⾥⾯有你的账号密码信息,那你号没了。 - 不安全
HTTP ⽐较严᯿的缺点就是不安全:
通信使⽤明⽂(不加密),内容可能会被窃听。⽐如,账号信息容易泄漏,那你号没了。
不验证通信⽅的身份,因此有可能遭遇伪装。⽐如,访问假的淘宝、拼多多,那你钱没了。
⽆法证明报⽂的完整性,所以有可能已遭篡改。⽐如,⽹⻚上植⼊垃圾⼴告,视觉污染,眼没了。
HTTP 与 HTTPS
- HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在
TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。 - HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
- HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTPS 解决了 HTTP 的哪些问题?
HTTP 由于是明⽂传输,所以安全上存在以下三个⻛险:
窃听⻛险,⽐如通信链路上可以获取通信内容,⽤户号容易没。
篡改⻛险,⽐如强制植⼊垃圾⼴告,视觉污染,⽤户眼容易瞎。
冒充⻛险,⽐如冒充淘宝⽹站,⽤户钱容易没。
本文参考暗暗黑风格-图解网络-小林coding-v3.0所作。