什么是 HTTP 协议

继续加油⛽️

上一篇学习了 OSI七层网络模型学习记录 ,接下来我要学习 什么是 HTTP、TCP/IP,状态码?报文?三次握手?四次挥手?回手掏?

本文通过以下文章学习,强烈推荐!

软件工程师能力认证 - 100篇精选文章玩转http协议
100篇精选文章玩转http协议
100篇精选文章带你玩转TCP/IP协议
看完这篇HTTP,跟面试官扯皮就没问题了
HTTP和HTTPS协议,看一篇就够了
等等,文章内部有引链

认识 HTTP

HTTP 是一种 超文本传输协议 ( Hypertext Transfer Protocol ) ,是 万维网 中两个及以上数量的终端进行互相通信时所遵守的约定和规范,说白了就是浏览器与服务器端间交互时必须按照某种格式的数据进行传递。

超文本传输协议可以拆分为三部分,分别是:
超文本 : 两台终端传输的文字、音频、视频、图片等
传输 : 将 超文本 解析成二进制数据包,由传输载体 (电话线、同轴电缆、光缆) 把二进制数据包由A终端传到B终端的过程称为 传输 (transfer)
协议 : 网络中传递数据、管理信息所遵守的规范

HTTP 为应用层协议,基于 B/S架构 进行通信,由 请求响应 构成。
HTTP 协议永远都是客户端发起请求,服务端回送响应。
HTTP 服务器端实现程序有 Nginx、httpd 等,客户端实现程序有 Web浏览器(火狐浏览器谷歌浏览器等)、命令行工具(curl、elink)。


HTTP 主要特点

  1. 无连接: 即每次链接只处理一个请求。当服务器收到客户请求,进行数据处理返回响应后并收到客户应答后,即断开连接,节省传输时间。
  2. 灵活数据类型: HTTP 允许传输任意类型的数据对象。通过 Content-Type 标记。
  3. 简单快速: 客户端发送请求时,只需传送 请求方法路径
  4. 无状态: HTTP 为无状态协议。即 对事务处理没有记忆能力。后续处理之前信息,需要重传。

HTTP 不足

1. 通信中使用明文传输,可能会被窃取。

所谓窃取是指 HTTP 协议传输 未经过加密的报文,所以在传输过程中,窃听者可以直观读取所传输的内容,比如姓名、身份证号、银行卡号等。

解决:

内容加密: 客户端与服务端采用加密解密策略,将报文加密后传输,接收方再进行解密。虽然进行加密后无法直观获得用户信息,但加密后的数据依然可见。

— 如何实现内容加密 ?—

​ 加密方式: 对称加密、非对称加密、对称加密 + 非对称加密

2. 无法证明报文完整性,可能遭到篡改。

​所谓篡改是指 文件内容中传输过程中可能被中间人攻击,使 请求方发出的数据与接收端接收到的数据前后不同。

—如何防止篡改 ?—

​ md5 + SHA-1 等散列值校验、数字签名

3. 不验证通信方的身份,可能遭到伪装。

所谓伪装是指 HTTP 协议无法确定通信双主是否为真实请求或真实响应的对象。也就产生了无论是谁对服务器请求,都会进行响应,就容易被攻击(dos攻击)。

—如何防止伪装 ?—:

1.通信加密: 可通过 SSL (安全套接层)或 TLS (完全层传输协议) 组合使用。

2.证书


HTTP 请求响应流程

请查看各位大佬的总结

HTTP请求的完全过程
浏览器发送http请求过程分析
一次完整的HTTP请求所经历的7个步骤
浏览器输入网址后发生了什么?
浏览器输入地址后发生了什么
浏览器输入网址后发生了什么?


HTTP 报文格式

请求报文

请求报文 格式为: 请求行(Start Line) + 请求头部(Header)+空白行(CRLF)+请求数据(Body)

image-20210508150652852

实例

// 请求行
POST /home.html HTTP/1.1

// 请求头部
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
// 空行

// 消息正文
age=18&name=Bob

请求行

image-20210508093858088

// 请求行
POST /home.html HTTP/1.1
请求方法

请求方法,最常用的是 GET、POST。

拓展这里有你不知道的 GET、POST 的区别

序号 请求方法 描述
1 GET 请求指定的页面信息,获取资源
2 POST 请求指定页面信息,提交资源(表单或文件)
3 PUT 传输文件,从客户端向服务器传送的数据取代指定的文档的内容
4 DELETE 删除文件
5 HEAD 获取报文首部,类似 GET 请求,不过返回的响应中没有主体
6 CONNECT 要求用隧道协议连接代理,HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器
7 OPTIONS 询问支持的方法,允许客户端查看服务器的性能
8 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新
9 TRACE 追踪路径,回显服务器收到的请求,主要用于测试或诊断
10 LINK 建立和资源之间的联系
11 UNLINE 断开连接关系
12 MOVE 请求服务器将指定的页面移至另一个网络地址
13 COPY 请求服务器将指定的页面拷贝至另一个网络地址
14 WRAPPED 允许客户端发送经过封装的请求。
15 Extension-mothed 在不改动协议的前提下,可增加另外的方法。
请求 URL

URL组成方式: URL 由 协议/主机/端口/路径/查询参数/锚点 组成。

用http://www.test.com:80/china/news.html?key1=value1&key2=value2#one 举例,

  1. 协议(Protocol)

    「http://」 告诉浏览器使用何种协议。其它常用协议还有 ***https://、 ftp://、sftp://、smtp://、 mailto://、ssh://、telnet://***等等

  2. 主机(Domain Name)

    「www.test.com」 是一个域名。它指示需要向网络的哪一台主机发起请求。也可以直接指向 IP Address 发起请求,例如 http://222.129.34.72/china/news.html 但直接使用 IP地址 的场景不常见。

  3. 端口(Port)

    「:80」 是一个端口号。两个网络主机之间发起 TCP 连接需要两个条件 主机+端口 。通常 HTTP 的 80 端口和 HTTPS 的 443 端口通常省略,否则端口是 URL 的必须部分。

  4. 路径(Path to the file)

    「/china/news.html」 是 Web 服务器上的资源路径。以端口号后面第一个 / 开始,直到 ? 号之前结束。中间每个 / 都代表了层级关系。

  5. 查询参数(Parameters)

    「?key1=value1&key2=value2」 是提供给 Web 服务器的额外参数。这些参数是用 & 符号分隔 键/值对 列表

  6. 锚点(Anchor)

    「#one」是资源本身的某一处的一个锚点。锚点代表资源内的一种 ”书签“,也称为片段标识符。

    作用是锚点创建好后,在其它部分引入锚点,点击后快速滚动至锚点处。

    # 号后面的部分永远不会与请求一起发送到服务器。

HTTP 版本

「 HTTP/1.1 」表示报文使用的 HTTP 协议版本。

请求头部

HTTP响应头和请求头信息对照表,还是转载方便(但也别忘记阅读!)

空白行

消息正文

服务端返回的主体资源信息

响应报文

响应报文 格式为: 状态行(响应头)+请求头部+空白行+消息正文

状态行

常见 HTTP 状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

HTTP状态码对照表,还是转载方便(但也别忘记阅读!)

请求头部、空白行、消息正文与 「请求报文」类似


接下来学习 什么是HTTPS?

扩展必读

cookie 和 session 有什么区别?

这里有你不知道的 GET、POST 的区别

Guess you like

Origin blog.csdn.net/qq_35453862/article/details/115728685