“网络协议入门:HTTP通信的四大组成部分“
🙉专栏推荐:Java入门知识🙉
🐹今日诗词: 春水满四泽,夏云多奇峰🐹
⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏
⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏
目录
前言
http和https都应用层协议, 区别就是https在http基础上进行了加密, 减少数据被劫持的风险
日常开发中也是https使用的比较多, 想要学习https, 我们要从http开始学起
HTTP
http是一种一问一答式的协议, 请求和响应一一对应
TCP/UDP协议不仅支持一问一答, 还支持一问多答, 多问一答, 多问多答
为了直观了解http协议, 我们可以通过抓包来快速学习, 常见的抓包工具: Fiddler
官网链接: Fiddler
抓包工具通俗点说就是代理工具, 也就是跑腿的, 一般分为正向代理和反向代理
正向代理: 你让室友(义父)给你带饭, 你不需要亲自去, 室友买完饭给你带回来, 此时你的室友扮演的是正向代理角色
反向代理: 点外卖, 你在客户端下单, 饭店老板做好饭, 不是老板亲自给你送饭, 让外卖员给你送饭, 此时外卖员充当的是反向代理角色
Fiddler抓包注意事项
由于网络上大部分数据包都是HTTPS, 所以我们要在Fiddler开启抓取HTTPS的选项
HTTP请求
HTTP是一个文本格式的协议, 构造出文本写到TCP的Socket中
一个完整的HTTP请求有以下几个部分
1. 首行(它有包括三个部分)
2. 请求头(header)
3. 空行
4. 正文(也称body)
1. 首行
首行包括: 1. 请求方法 2. URL 3. 版本号
比如这个, 这个三个部分通过空格区分
方法还有POST方法.... 待会会说
2. 请求头(header)
请求头: 由若干行数据组成, 每行数据由键值对组成, 通过 : 将键和值进行分割
这么多行, 怎么判定请求头结束呢?
3. 空行
4. 正文(body)
正文这个东西, 是可以选择的, 可以有, 也可以没有
那么正文里面可以放什么内容呢?
可以放任意类型的数据, css, json, js, html类型的都可以
HTTP响应
HTTP的响应部分的组成和HTTP的请求非常类似也分为4个部分
1. 响应的首行
2. 响应的报头(header)
3. 响应的空行
4. 响应的正文(body)
1. 响应的首行
响应的首行有三个部分组成
1. 版本号
2. 状态码
3. 状态码描述
状态码是一串数字, 不同的数字对应不同的请求结果
状态码描述就是描述当前请求返回的结果, OK代表成功, 还有很多其他的描述
例如404...
请求的结果有很多种, 后面会统一介绍
2. 响应报头(header)
响应报头也是键值对的形式
3. 响应的空行
响应的空行用于区分报头(header)和正文(body)
空行有很多个, 第一个才是响应的空行, 因为正文什么都可以存储, 所以空行也可以,
因此第一个空行作为报头(header)和正文(body)分界线
4. 响应的正文(body)
剩下的就都是正文了, 正文存啥都可以
HTTP请求URL
请求里的URL, 也就是我们经常说的网址, 正式名称叫: 唯一资源定位符
urlencode
urlencode是一种表示特殊字符的编码体制, 像转义字符一样, 有些字符组合会有特殊含义,会引起冲突, 因此urlencode就是用来解决冲突, 像转义字符一样,用其他字符代替当前字符
HTTP方法
前面介绍HTTP请求时说了GET方法, HTTP还有很多方法
HTTP方法的作用: 描述请求具体要做什么
HTTP方法虽然有很多, 但是它们就像二八法则一样, 经常出现的
get方法占八成, post方法占一成, 剩下的方法占一成
get方法
get方法: 从服务器获取数据
post方法
post方法: 往服务器发送/提交数据
二者区别
大部分使用get方法居多, post方法一般用于登录和上传文件
实际上get方法也可以用来发送或者提交数据
post方法也可以用来获取数据
二者最大的区别: get方法使用Query String传输数据, 一般不搭配body
post方法使用body传输数据, 一般不搭配Query String
get和post方法有什么区别(经典面试题)
1. get和post本质没什么区别, get能用的场景, post也可以
post能用的场景, get也可以使用, 很多公司get一把梭, 或者post一把梭哈
2. 从语义上说
get方法: 一般用于获取数据, 传输数据一般使用query string
post方法: 一般用于发送/提交数据, 传输数据一般使用body
3. get方法构造时, 一般设计成幂等的
post方法构造时, 则不要求幂等
幂等: 发送相同请求, 一定返回相同的结果
不幂等: 发送相同的请求, 返回的结果不一定相同
get方法也是可以设置成不幂等的
4. get方法请求的结果可以被缓存, 可以被浏览器收藏, 下次直接点击
post方法一般不能被缓存
post其实也可以缓存, 但是缓存一般使用get方法
get方法和post方法, 容易出现误区的地方
1. get方法没有post方法安全(×)
这种说法是错误的, 安不安全取决于加不加密
2. get方法传输数据量比较有限, post方法传输数据量比较大(×)
这个说法也是错误的, HTTP标准没有对get方法的URL做出限制
3. get方法只能传输文本数据, post方法既可以传输文本数据,也可以传输二进制数据(×)
这种说法也是错误的, get方法可以通过urlencode转义来传输二进制数据
HTTP请求报头(header)
host
host: 请求的主机ip和端口号
Content-Length和Content-Type
Content-Length: 描述body的长度
Content-Type: 描述body的数据类型
Content-Length作用: 防止粘包问题
区分请求方法和报头(header) 通过空行
区分报头body部分就通过长度, 提前说明body是多长
Content-Type
传输的数据有很多格式, 像图片, 视频, 文本, 音频, html, css, js.....
不同的数据的处理方式不同, 因此要告知数据类型便于后续处理
常见几种数据类型
html中的form表单的格式
也是通过form表单构造的, 这个数据格式一般提交文件或者图片
json格式
这个经常使用, 日常开发经常用到
User-Agent
User-Agent: 又称作UA, 用于描述操作系统的版本和浏览器的版本
告诉服务器, 用户使用了什么样的设备和系统去访问你的网页或者资源
UA的作用
现在UA最大的作用就是区分手机和电脑设备, 如果是电脑就返回大一点的界面, 手机就返回窄一点的界面, 适应我们的设备, 可以简单的理解为自适应窗口大小
Referer
Referer: 表示当前页面是从哪个页面跳转过来的
如果是直接在浏览器输入网址, 那么Referer就是空,
Cookie(header最最最重要的)
Cookie: 是网站能在用户计算机硬盘上持久化存储的小型文本文件
每个网站都会有属于自己的Cookie文件, 并且不同的网站的Cookie文件不会相互干扰
Cookie的由来: 网页运行在浏览器中的, 正常情况下网页是不能访问我们本地的硬盘文件资源(随意访问修改容易让我们的电脑出问题), 但是有些网站有一些必要的信息希望持久化存储,
浏览器就提供了Cookie机制, 让网页能够访问到硬盘, Cookie机制相当于浏览器对我们的硬盘做了一层封装
Cookie的特点: 文本文件, 键值对的形式, 键和值都必须是文本
Cookie的作用: 举个例子吧!
假如你有一家经常去的咖啡馆, 每次你去都会点一杯少糖, 多奶的拿铁, 并且喜欢在周二去, 坐在靠窗的位置, 于是店员就会记住你的喜好, 你下次再来的时候就能为你提供更加个性化的服务, 这里你的习惯就是Cookie数据, 你下次再来Cookie数据也会发送给服务器(店员)
Cookie应用场景很多: 根据你的喜好提供个性化服务
自动登录, 这里自动登录不是记住密码的那种自动登录
自动登录指的是, 后续你访问该网站的其他界面时, 就不需要重新登录了
因为向服务器发送的请求中包含你的Cookie, Cookie里又包含你的信息
Cookie中最关键的信息(会话ID)
会话ID(SessionId): 不同用户的会话ID不能相同, 因此会话ID是一个唯一的标识符
作用: 跟踪用户在网络上的所有活动, 记录用户的行为, 连续的为用户提供个性化服务
举个例子:
美图分享
✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄
⭐️点赞收藏加关注,学习知识不迷路⭐️
🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉
👍😏⛳️点赞☀️收藏⭐️关注😏👍
👍😏⛳️点赞☀️收藏⭐️关注😏👍
👍😏⛳️点赞☀️收藏⭐️关注😏👍
🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️
原文地址:https://blog.csdn.net/qq_34471880/article/details/139203823
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!