【JavaEE 初阶(九)】网络原理 HTTP与HTTPS协议

❣博主主页: 33的博客
▶️文章专栏分类:JavaEE◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多网络知识

在这里插入图片描述

1.前言

HTTP协议是应用层协议,对程序员来说是非常重要,HTTP协议的最新版本是3.0版本,但目前大规模使用的任然是1.1版本。在日常生活中,使用HTTP协议的场景非常多,比如浏览器打开网页,手机APP访问服务器等,那么我们学习HTTP重要的就是要学习它的报文格式,一起来学习吧。


2.HTTP格式

HTTP的格式和之前我们所学的TCP报文格式和UDP报文格式不同,要分请求和响应两个部分来看待。
那么我们如何查看到HTTP的报文格式呢?可以采用wireshark也可以使用Fiddler来实现,这俩都是抓报工具,但wireshark功能更多,操作也更复杂,博主在这里就使用相对简单的Fiddler。
Fidder官方网址:https://www.telerik.com/fiddler/fiddler-classic
当下载好之后,我们要手动开启HTTPS的功能,否则只能抓HTTP:
在这里插入图片描述
在这里插入图片描述
当勾选上以后弹出弹窗,问你是否安装证书,一定要勾选YES!!!
当我访问bing,就会出现一些抓包信息:

蓝色数据表示响应为HTML响应在这里插入图片描述蓝色数据表示响应为html,raw表示最原始的数据格式,可以查询http的响应的请求。


3.HTTP请求

HTTP的请求格式是文本格式:
在这里插入图片描述

3.1首行

在这里插入图片描述
首行由3个部分组成
1)GET,HTTP请求的方法,还有一些其他方法:
在这里插入图片描述
常用的还有post一般用于登录和传文件的时候。
经典面试题:谈谈GET和POST的区别

本质上没有区别,但在使用习惯上有区别:
GET通常把要传给服务器的数据放入query String中,POST常常把传给服务器的值放入body中。
GET大多数用来获取数据,POST大多数用来提价数据(登录、上传)
错误说法
1.GET传输数据有上限,POST没有:早期硬件资源有限,限制了URL长度,但是实际上并没有规定。
2.GET请求数据不安全,POST安全:安全是指传输的数据不容易被黑客获取到或者说获取到不容易破解。
3.GET只能传输文本数据:POST可以文本+二进制:完全可以!!

2)URL:唯一资源定位符,描述资源在网络上的位置。
一个标准的URL:
在这里插入图片描述
登录信息几乎不会用到了,端口号不写默认为80,查询字符串是一种键值对表示以?开头键值对之间用&连接,查询字符串是对请求补充说明(如果value包含特殊符号,需要urlencode操作转换)举个例子,加入我在学校食堂开了一家面馆,位置在6餐厅3号窗口那么当有同学想来吃就可以把URL写为:

http://学校6餐厅:3号窗口//牛肉面?葱=多加&香菜=多加

3)版本号:HTTP/1.1


3.2请求头(header

是一个个键值对的数据,键和值之间用:隔开
在这里插入图片描述
Host:表示服务器主机的地址和端口.
Content-Length:body数据长度(和粘包问题相关)
Content-Type:body数据格式,常见的有json,form,form-data,不同的Content-Type:服务器处理数据的逻辑不同
User-Agent:描述用啥设备上网
Referer:描述当前页面从哪一个页面跳转而来
Cookie:浏览器在本地存储数据的机制,是键值对。在一些程序过程中,会有一些数据,需要在浏览器存储,在后续请求的时候把这些数据一并发送给服务器,一般我们会想到直接把数据存到文件中,但是如果直接让网页来操纵我的电脑是非常不安全的,所有引入cookie来存储。


3.3空行

请求头结束的标记


3.4正文

有的http有,有的没有


4.HTTP响应

在这里插入图片描述

4.1首行

1)版本号:HTTP/1.1
2)状态码:200用于表示响应的结果如何(正确/错误,错误的话是什么原因)
3)状态描述:OK()
HTTP的状态码都是约定好的:
在这里插入图片描述
常见的状态码
1)200 ok: 成功
2)404 NOT FOUND :访问资源没有找到,url可能错了
3)403 Forbidden:请求资源没有权限访问
4)405 Method not Allowed:你的服务器只支持get请求,可是你发了一个post
5)500 Internal Server Error:服务器内部错误
6)302 Move temporarily:临时重定向
在这里插入图片描述

4.2响应头(header)

是一个个键值对的数据,键和值之间用:隔开
Host:表示服务器主机的地址和端口.
Content-Length:body数据长度(和粘包问题相关)
Content-Type:body数据格式,例如HTML,CSS,JS,JSON,图片,字体,视频。
User-Agent:描述用啥设备上网
Referer:描述当前页面从哪一个页面跳转而来
Cookie:浏览器在本地存储数据的机制,是键值对。在一些程序过程中,会有一些数据,需要在浏览器存储,在后续请求的时候把这些数据一并发送给服务器,一般我们会想到直接把数据存到文件中,但是如果直接让网页来操纵我的电脑是非常不安全的,所有引入cookie来存储。


4.3空行

请求头结束的标记。

4.4正文

正文内容比较长,可能是多种格式,HTML,CSS,JS,JSON,图片,字体,视频等。

5.构造HTTP请求

构造HTTP请求可以利用第三方工具:Postmanhttps://www.postman.com/
操作非常简单:每一个标签页就是一个构造HTTP请求的配置页面,点击send就发送到对应服务器。
在这里插入图片描述


6. HTTPS

HTTPS是在HTTP的基础上,引入了一个加密层SSL。

大家是否遇到过这样的情况,当我们下载一个程序的时候,当要点击下载的时候,会发现并不是我们要下载的软件,这就是被运营商劫持了。运营商劫持无论是修改了referer还是修改返回的链接(body)本质上上市明文传输的原因。为了解决安全问题,那么最核心的要点就是加密。而和加密相对的就是解密,加密和解密设计一个关键就是密钥。

加密可以分为对称加密和非对称加密。
对称加密:加密和解密使用的是同一个密钥
非对称加密:加密和解密使用的是两个密钥

6.1对称加密

对称加密客户端和服务器都是使用的相同的密钥,不同的客户端需要使用不同的密钥。那么每一个客户端连接到服务器的时候,都需要随机生成一个密钥,并把这个密钥告知给服务器(也可以是客户端生成),那么告知给对方就需要网络传输到对方,在这过程中,如果黑客拿到了密钥,后续的加密操作就毫无意义了。
在这里插入图片描述
那么如果我们对key也对称加密那么是不是可以解决这个问题呢?那是不能的,如果使用对称加密就始终要通过网络告诉对方密钥是什么,那么黑客始终就可以劫持。所以我们就可以使用非对称加密。


6.2非对称加密

引入非对称加密的目的就是为了对对称密钥加密,或许这时候就有同学会想为什么不直接使用非对称加密直接对数据进行加密,因为非对称加密消耗的CPU资源是远远高于对称加密的,我们对密钥加密的消耗就是小于对数据加密的消耗的。服务器会生成一对非对称密钥,私有密钥自己持有,公钥会告诉给客户端。
在这里插入图片描述
但是这样对密钥和数据传输仍然还有一个巨大的问题黑客自己也可以生成公钥和私钥传给客户端,那么就会对客户端误导。
在这里插入图片描述
那么针对这个问题怎么解决呢?最关键的一点就是客户端拿到公钥的时候,能有办法严重是否是黑客伪造的。那么久要求服务器这边提供一个证书,证明自己是真的,没有被篡改过。


6.3证书

证书中会包含一系列信息,例如服务器的域名,公钥,证书有效日期,证书是大家服务器的人要向第三方公正机构申请的。
在这里插入图片描述
客户端收到的证书:
服务器域名:……
公钥:……
证书有效期:……
公证机构信息:……
证书签名:……(相当于校验和,把前面所有的数据通过一定的算法生成一个校验和,公证机关利用自己的私钥对校验和加密就得到签名)
当客户端收到证书以后:主要做两件事

1.按照同样的算法计算一个校验和1
2.使用系统内置的公证机构公钥对证书签名解密得到校验和2
如果校验和1与校验和2相等就证明是原版的,没有被修改
如果校验和2与校验和1不相等就证明被篡改过

这样,黑客就算能修改为自己的公钥,但黑客不知道公证机关的私钥就不能对签名进行修改,那么黑客就无机可乘了。如果黑客向公证机关申请了证书,直接替换证书可以吗?那更是不可以的,证书中的服务器域名是唯一的,客户端一看就知道是假冒的。


7.总结

本篇文章主要介绍了HTTP请求格式和响应格式以及HTTPS的加密方式,这是常考的面试题目,同学们要好好理解理解。

下期预告:JVM

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值