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

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

我的主页:optimistic_chen

我的专栏:c语言Java

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

应用层协议

自定义协议

在初识网络中,我们知道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
我们下期不见不散 ~ ~ ~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值