当前位置: 首页 > news >正文

【Java EE初阶 --- 网络原理】应用层---HTTP(HTTPS)协议

乐观学习,乐观生活,才能不断前进啊!!!

我的主页:optimistic_chen

我的专栏:c语言 ,Java

欢迎大家访问~
创作不易,大佬们点赞鼓励下吧~

文章目录

  • 应用层协议
    • 自定义协议
    • 普遍的协议(HTTP)
  • 抓包工具
  • HTTP协议
    • URL
    • urlencode
    • 请求方法
      • GET方法
      • POST方法
    • Header
      • Cookie
  • 状态码
  • HTTPS
    • 对称加密
    • 非对称加密
    • 中间人攻击
  • 完结

应用层协议

自定义协议

在初识网络中,我们知道TCP/IP分成五层,每一层都涉及到一些关键的协议。应用层是和我们程序员联系最紧密的一层,并且只要涉及到网络通信都基本视为应用层的一部分。而应用层中涉及到的网络通信协议,很多也是程序员自己定制的。
自定制一般分为两个步骤:
1. 根据需求,确定要传输的信息
2. 约定好信息组织的格式
(一般客户端和服务端都按照定制的规则来构造/解析数据)

通常数据的组织格式
1. 行文本(最原始)
4. xml(可读性好,冗余较多)
5. json(主流方式,可读性好,冗余一般)
6. protobuf(高性能场景下使用,可读性差,冗余最小)

普遍的协议(HTTP)

FTP文件传输,SSH远程操作主机,telnet网络调试工具,HTTP协议
我们重点放在HTTP协议,它属于web开发中最核心的协议,网站都会用到http,我们平时看到最多的可能是它的加强版https,给http加一个安全层

HTTP协议是一问一答模式的协议:
客户端发一个请求,服务端就返回一个响应,请求和响应一一对应。

那就不得不说一个学习工具了,获取网络的数据包,解析格式的抓包工具。其实,抓包工具相当于“代理”,代替客户端完成一些事情
在这里插入图片描述

抓包工具

我推荐新手使用fiddler,专门抓http,功能简单,足够新手使用
直接去bin搜索fillder,官网下载
在这里插入图片描述
为了满足抓包https,设置中选择,
在这里插入图片描述
这里一定要全部选择,并且首次会弹出是否要信任此cookic,一定要选择yes,否则只能卸载重新安装
在这里插入图片描述
此时如果去浏览器打开网页,显示“您的链接不是私密链接”,检查你的证书是否受信任,重启fillder ,重启浏览器,即可。

HTTP协议

HTTP协议广泛的使用在web开发和app开发中,它规定了数据传输格式,是一个文本格式的协议,并且之前提到的协议分层在此是一个协议负责一部分工作。
请求格式
在这里插入图片描述
响应格式
在这里插入图片描述

URL

描述网络上的唯一资源的位置

在这里插入图片描述

注意:如果没写端口号,那就是默认取决于协议的端口号,这个端口号不是客户端的,而是要访问服务器的端口号

urlencode

在URL中有一些特殊符号,代表不同的特殊含义。
但是在查询参数部分,万一程序员自定义的一些符号里包含了特殊含义的符号,这就会导致浏览器或者服务器对URL解析失败,那要如何避免这种情况呢?

转义操作,不仅仅是某些特殊符号,对于非英文体系文字都需要转义;只是浏览器平时为了用户看起来方便,显示的是转义之前的字符。但是在抓包工具中,看到的已经是转义后的数据。

转义规则:把数据二进制的内容,每个字节取出来用十六进制表示,前面加 % 即可

请求方法

以什么方法发出请求,代表了此次请求的目的

方法说明
GET获取资源
POST传输实体主体
PUT传输文件
HEAD获得报文首部
DELETE删除文件
OPTIONS询问支持的方法
TRACE追踪路径
CONNECT要求用隧道协议连接代理
LINK建立和资源之间的联系
UNLINE断开连接联系

一般来说:请求操作大部分时间都是使用GET和POST操作

GET方法

获取html,获取css,获取js等都是GET操作

获取资源的前提,我们先要了解浏览器的缓存机制,浏览器加载网页速度从快到慢是:CPU>内存>硬盘>网络/服务器
浏览器为了加快访问速度,第一次访问服务器时就会把静态资源(图片、css、js等)先缓存到硬盘上,后续再访问只从硬盘中获取即可。

此外,GET请求一般没有正文,如果要通过GET给服务器发送一些数据,通过查询参数传递

POST方法

登录,上传文件等是POST操作
这种情况基本是请求中带有正文部分,正文中就是上传的数据内容

Header

在这里插入图片描述

Host: 表示服务器主机的地址和端口

HTTP协议中,传输的时候可能会涉及到“加密”(HTTPS),URL部分不会被加密,加密的是header和body
HTTP协议在传输层是基于TCP实现的,目的就是把字符串构造成HTTP约定的格式,对TCP来说,一个连接可以有多个请求,服务器就得区分哪一块是一个完整的HTTP请求。
在这里插入图片描述

Content-Length:表示body中数据长度,单位是字节;同时也能判断请求总是否有body

对于没有body的http请求,读到空行就结束了;
有body的http请求,先读取首行和header,读到空行,解析Content-Length,根据这里的值,接下来再读取固定字节的长度

在这里插入图片描述

**Content-Type:**表示请求中body的格式;提示接收方以此方式解析body中的数据
在这里插入图片描述
User-Agent:表示用户使用的设备的浏览器和操作系统的情况

在这里插入图片描述
Refere:描述了当前页面的来源

Cookie

浏览器允许网页在本地硬盘存储数据的一种机制,按照键值对的方式来存储数据

最典型的场景就是登录身份认证
在这里插入图片描述
以上过程只是浏览器和服务器之间的互动;
注意:Cookie是有可能过期的,服务器返回Cookie时,是可以设置有效时间的,具体还要看网站对安全性的要求高不高。安全性越高,Cookie有效期越短

状态码

此表引用自:HTTP状态码
在这里插入图片描述

返回出错原因的关键手段。
最常见的是:
404 Not Found :访问的资源没找到
403 Forbidden:访问被拒绝(无权限)
405 Method Not Allowed:请求的方法和服务器这边声明的注解不匹配
500 Internal Server Error:服务器出现错误

基本我们能看到就这些,其实还有很多,这里不一一列举
总结:
1. 2xx 都可以视为成功
2. 3xx 都是重定向
3. 4xx 客户端出错,用户请求有问题
4. 5xx 服务器出错

HTTPS

HTTPS=HTTP+S(也是应用层协议,专门用于加密)

对称加密

加密和解密使用同一个密钥
在这里插入图片描述
对称加密:运算速度快,开销小,适合针对大量数据进行加密

非对称加密

加密使用一个密钥,解密使用另一个密钥。

非对称加密:只能用私钥(公钥)解密公钥(私钥),把公钥公开出去,另一服务器在里面是私钥;实现公钥加密私钥解密,私钥加密公钥解。
在这里插入图片描述
非对称加密:运算速度满,开销大,加密小的数据,可以,加密大量数据就不行。

中间人攻击

在这里插入图片描述
这个问题的关键在于,客户端无法区分收到的公钥是不是服务器发送的,中间是否经历了修改。想一个办法能够对公钥是否准确进行校验。

证书是服务器由第三方认证机构申请认证的数字证书,一直保存在服务器;包含了证书的颁布机构、证书有效期、服务器公钥、服务器域名、证书的数字签名等信息。
为了验证身份,把证书中这些信息按照一个公式进行计算得到一个数字,称为校验和。第三方机构生成的私钥公钥对这个数字进行加密, 就得到了数字签名。
在这里插入图片描述

客户端收到证书后,进行校验:
1. 客户端通过证书中的信息使用同样的公式,得到校验和1
2. 在通过第三方机构的公钥对数字签名进行解密,得到校验和2
3. 对比校验和1和校验和2身份相同,相同:说明证书密钥被修改(安全);不相同:证书无效(不安全)

这里可能有一个疑问,服务器如何确定拿到的pub2是公正机构的pub2呢,或者校验和是否也会受到中间人攻击?

其实,pub2不是通过网络传输的,而是操作系统内置的,只要按照了正版系统,就可以确定安全。

完结


可以点一个免费的赞并收藏起来~
可以点点关注,避免找不到我~ ,我的主页:optimistic_chen
我们下期不见不散 ~ ~ ~

http://www.dtcms.com/a/290728.html

相关文章:

  • 内网与外网是通过什么进行传输的?内外网文件传输的安全方法
  • Java从入门到精通 - 面向对象高级(三)
  • kafka 生产和消费 性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-test.sh
  • kafka 生产消息和消费消息 kafka-console-producer.sh kafka-console-consumer.sh
  • Python 进阶(六): Word 基本操作
  • ROS 与 Ubuntu 版本的对应关系
  • 初学者STM32—USART
  • 了解类加载器吗?类加载器的类型有哪些?
  • Java 大视界 -- 基于 Java 的大数据分布式计算在地球物理勘探数据处理与地质结构建模中的应用(356)
  • 鹏鼎控股入职测评综合能力真题SHL测评题库2025年攻略
  • postgresql16.4 配置 数据库主从
  • PyTorch 实现 CIFAR-10 图像分类:从数据预处理到模型训练与评估
  • git bash命令不够完善,想整合msys2该怎么办?
  • 02-UE5蓝图初始的三个节点作用
  • 文娱投资的逆势突破:博派资本的文化旅游综合体战略
  • 阿里云宝塔Linux面板相关操作记录
  • 照片to谷歌地球/奥维地图新增功能:导出 GeoJSON 数据
  • 高级技术【Java】【反射】【注解】【动态代理】
  • c++:父类的析构函数定义为纯虚函数注意事项
  • “专属私有云”或“行业公有云(逻辑隔离的公共云专区)”两种主流部署模式到底有什么区别?政务云不就应该是专属的私有云么?政务云是不是不能混用?
  • 网络编程基础:从 OSI 模型到 TCP/IP 协议族的全面解析
  • 【AI高性能网络解析】第三期:数据快递,海量数据跨广域高效传输技术实践
  • 计算机网络:概述层---计算机网络的组成和功能
  • harbor镜像仓库由原来的v2.11.1版本升级到v2.13.1,数据不丢失
  • Taro 生命周期相关 API 详解
  • HTML整理
  • Lists的分批次操作
  • 安卓第一个项目
  • 信息学奥赛一本通 1576:【例 2】选课 | 洛谷 P2014 [CTSC1997] 选课
  • Netty中CompositeByteBuf的使用