什么是 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 主要特点
- 无连接: 即每次链接只处理一个请求。当服务器收到客户请求,进行数据处理返回响应后并收到客户应答后,即断开连接,节省传输时间。
- 灵活数据类型: HTTP 允许传输任意类型的数据对象。通过 Content-Type 标记。
- 简单快速: 客户端发送请求时,只需传送 请求方法 和 路径 。
- 无状态: 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)
实例
// 请求行 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
请求行
// 请求行 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 举例,
协议(Protocol)
「http://」 告诉浏览器使用何种协议。其它常用协议还有 ***https://、 ftp://、sftp://、smtp://、 mailto://、ssh://、telnet://***等等
主机(Domain Name)
「www.test.com」 是一个域名。它指示需要向网络的哪一台主机发起请求。也可以直接指向 IP Address 发起请求,例如 http://222.129.34.72/china/news.html 但直接使用 IP地址 的场景不常见。
端口(Port)
「:80」 是一个端口号。两个网络主机之间发起 TCP 连接需要两个条件 主机+端口 。通常 HTTP 的 80 端口和 HTTPS 的 443 端口通常省略,否则端口是 URL 的必须部分。
路径(Path to the file)
「/china/news.html」 是 Web 服务器上的资源路径。以端口号后面第一个 / 开始,直到 ? 号之前结束。中间每个 / 都代表了层级关系。
查询参数(Parameters)
「?key1=value1&key2=value2」 是提供给 Web 服务器的额外参数。这些参数是用 & 符号分隔 键/值对 列表
锚点(Anchor)
「#one」是资源本身的某一处的一个锚点。锚点代表资源内的一种 ”书签“,也称为片段标识符。
作用是锚点创建好后,在其它部分引入锚点,点击后快速滚动至锚点处。
# 号后面的部分永远不会与请求一起发送到服务器。
HTTP 版本
「 HTTP/1.1 」表示报文使用的 HTTP 协议版本。
请求头部
HTTP响应头和请求头信息对照表,还是转载方便(但也别忘记阅读!)
空白行
消息正文
服务端返回的主体资源信息
响应报文
响应报文 格式为: 状态行(响应头)+请求头部+空白行+消息正文
状态行
常见 HTTP 状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
HTTP状态码对照表,还是转载方便(但也别忘记阅读!)
请求头部、空白行、消息正文与 「请求报文」类似
接下来学习 什么是HTTPS?
扩展必读
cookie 和 session 有什么区别?
这里有你不知道的 GET、POST 的区别
什么是 HTTP 协议相关推荐
- 常用开源协议介绍以及开源软件规范列表
1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...
- Redis 笔记(11)— 文本协议 RESP(单行、多行字符串、整数、错误、数组、空值、空串格式、telnet 登录 redis)
RESP 是 Redis 序列化协议Redis Serialization Protocol 的简写.它是一种直观的文本协议,优势在于实现异常简单,解析性能极好. Redis 协议将传输的结构数据 ...
- HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
- 【JavaWeb】servlet与http请求协议
Servlet: 概念: server applet (服务端小程序)运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则. 将我我们自定义一个 ...
- synopsys PCIE IP协议解析
synopsys PCIE IP协议解析 1.Overview Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环.同时,Cor ...
- 用户自定义协议client/server代码示例
用户自定义协议client/server代码示例 代码参考链接:https://github.com/sogou/workflow message.h message.cc server.cc cli ...
- Thrift协议与传输选择
1 协议 Thrift 可以让用户选择客户端与服务端之间传输通信的消息协议类别,如我们前面所讲总体划分为文本 (text) 和二进制 (binary) ,为节约带宽,提高传输效率,一般情况下使用二进制 ...
- TCP/UDP协议基本概念
TCP和UDP协议是TCP/IP协议的核心. TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protoc ...
- 【网站汇总】单片机常用通讯协议
1.UART UART协议快速扫盲(图文并茂+超详细)_GREYWALL-CSDN博客 UART串口协议详解 - 知乎 基于STM32之UART串口通信协议(一)详解 - LLLIN000 - 博客园 ...
- RPC(远程过程调用协议)介绍
RPC框架解释 谁能用通俗的语言解释一下什么是RPC框架? -远程过程调用协议RPC(Remote Procedure Call Protocol) 首先了解什么叫RPC,为什么要RPC,RPC是指远 ...
最新文章
- mvn 默认scope_maven scope 的作用
- ubuntu下搭建nfs服务器
- feko软件_计算电磁学各种方法和电磁仿真软件简述
- python入门三剑客_python数据分析三剑客基础之matpoltlib初解
- sql server2008 远程过程调用失败
- candence 知识积累3
- java反射获取注解id,通过反射获取注解(Annotation)
- 简单的页面表格导出Excel
- PhotoShop2018安装与破解教程
- SPSS篇—方差分析
- excel单元格使用公式进行币种自动转换,亿,万,元
- 第三十一篇 -- 学习第六十八天打卡20190911
- excel怎么设置打印区域_Excel可以自动调整打印区域,这个技术学会就厉害了!...
- 简单的python小程序祝福母亲,母亲节快乐!
- Introduce Python to data sience/Python 在数据科学中的应用
- nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)六 在express中建立路由
- 汽车的杂七杂八-SOME/IP+控制器
- 土地报备坐标文件(TXT)生成
- Python 自动贩卖机系统
- android ---- 多渠道、多模块下自动化发布maven
热门文章
- vulhub靶场搭建+docker环境搭建详解(最稳定方式)
- .ui文件 c语言,参考ElementUI的文档实现方案,实现自己组件库的说明文档
- R语言 变量的操作函数
- QT::QNetworkReply类readAll()读取不到数据
- 七夕节最深情表白文案从此告别搓衣板
- Mycat安装、配置与实践(兼容mysql8)
- Comsys学生比赛管理系统
- MySQL 进阶 视图 -- 视图介绍、视图CRUD语法、检查选项(CASCADED、LOCAL)、视图的更新、视图作用、视图案例
- 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
- 数据分析---常用业务运营指标