欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 网络原理 HTTP与HTTPS协议

网络原理 HTTP与HTTPS协议

2024/10/25 14:24:05 来源:https://blog.csdn.net/jj666mhhh/article/details/142410463  浏览:    关键词:网络原理 HTTP与HTTPS协议

22551b94e5f24840868244c6c92f4b9e.jpeg

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

关注博主带你了解更多计算机网络知识

73aac261e3644d2397dd71aa1927bc28.jpeg

目录

1.HTTP概念

2.HTTP报文格式

3.HTTP请求 

1.首行

1.1URL 

 1.2 GET⽅法 

1.3 POST⽅法

1.4 其他⽅法 

2.请求头(header) 

2.1 关于请求报头和响应报头(header)

2.2 User-Agent(简称UA)

2.3 Referer

2.4 Cookie

3.空行  

4.正文

4.HTTP响应

认识"状态码"

1.首行

2.响应头(header)

3.空行

4.正文

构造HTTP请求

5. HTTPS

1.概念

2.加密/密钥

1.对称加密

2.非对称加密

3.中间人攻击

4.引入证书


1.HTTP概念

HTTP全称为超文本传输协议,是⼀种应⽤⾮常⼴泛的应⽤层协议,不仅仅能传输文本,还能传输图片,传输音频,传输视频,传输其他的各类数据,广泛应用在日常开发的各种场景.

例如:打开浏览器网页;打开手机app;后端程序,都是分布式/微服务体系结构,服务器之间的相互调用,也大概率是HTTP.

e5495158ce3f41bea96e8b605ba8adb7.png

f555ea3e45154b44884cc3b5943d6148.png

目前互联网上见到的HTTP协议,绝大部分都是HTTP/1.1版本(已经很好用了),如果要升级,要考虑成本,收益,设备兼容等情况 

并且HTTP协议,是一种典型的"一问一答模型"协议:

客户端->服务器:客户端发一个请求,服务器返回一个响应(一一对应)

2.HTTP报文格式

先解释下抓包:抓包就是通过网卡上的数据,获取到,并且解析显示出来

借助抓包工具,观察到HTTP请求/响应的详细情况,我们可以通过使用Fiddler来抓包. Fidder官方下载网址:Fiddler Classic | Original Web Capturing Tool for Windows,下载完打开Fiddler:

f5efd60d767a4059a9ea21d2d7b86760.png

当我访问我的博客网页,就会出现一些抓包信息:c7cae6b616884ae9beab601eb8ce372a.png 蓝色数据表示响应为html,Raw表示最原始的数据格式,可以查询HTTP的响应的请求。

3.HTTP请求 

HTTP的请求格式是文本格式:

42233340bfec40b6b13e4f11234e338b.png

1.首行

a59ce5a9b7a746ddb9515c592617b835.png

1.1URL 

俗称的"⽹址"其实就是说的URL:统⼀资源定位符

20d5a19346b549eeb3e7067a170d5b51.png

登录信息几乎见不到了,http端口默认为80 ,键值对之间用&分割,键和值之间用=分割,比如:

https://search.bilibili.com/allvt=88073156&keyword=%E9%BB%91%E6%82%9F%E7%A9%BAmod&search_source=1

d16f6fa80553461399782679cac6cd7c.png URL主要关心四个部分:IP地址(域名);端口号;层次的路径;查询字符串(在Spring MVC重点学习). 

 4b94127d4df346678f615340b329c1b3.png

 1.2 GET⽅法 

GET是最常⽤的HTTP⽅法.常⽤于获取服务器上的某个资源.在浏览器中直接输⼊URL,此时浏览器就会发送出⼀个GET请求.GET把服务器的数据放到query string(URL)中.

GET请求的特点 : ⾸⾏的第⼀部分为GET;URL的query string可以为空,也可以不为空;header部分有若⼲个键值对结构;body部分为空.

1.3 POST⽅法

POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤⼾输⼊的数据给服务器(例如登陆⻚⾯).POST把服务器的数据放到body中

POST请求的特点: ⾸⾏的第⼀部分为POST;URL的query string⼀般为空(也可以不为空);header部分有若⼲个键值对结构;body部分⼀般不为空;body部分⼀般不为空body内的数据格式通过header中的Content-Type 指定.body的⻓度 由header中的Content-Length 指定

经典⾯试题:谈谈GET和POST的区别:

明确结论,这两个方法其实没有本质区别,但在使用习惯上,还是有区别的:

1.语义不同:  方法表示的含义:GET表示从服务器拿数据,POST表示往服务器提交数据

2.传输数据方式不同: GET传递数据,通常通过query string 把自定义数据交给服务器; POST传递数据,通常是通过body把自定义数据交给服务器

3.GET方法对应的请求,通常设计成"幂等"的;POST方法对应请求,对于"幂等性"则无要求

4.GET如果设计成幂等性,此时GET的结果是可以被缓存的;POST不设计成幂等性,POST就不应该被缓存.

错误说法:
1.GET传输数据有上限,POST没有:早期硬件资源有限,限制了URL长度,但是实际上并没有规定。
2.GET请求数据不安全,POST安全:安全是指传输的数据不容易被黑客获取到或者说获取到不容易破解。
3.GET只能传输文本数据:POST可以文本+二进制:完全可以!!

1.4 其他⽅法 

PUT与POST相似,只是PUT具有幂等特性,⼀般⽤于更新,PUT是把数据放到body中

DELETE删除服务器指定资源,DELETE是把数据放到query string中

1c32799c48154d649a2576e1e0b0409d.png

2.请求头(header) 

a25e7bc97bbc4821960bb688bd6df042.png

2.1 关于请求报头和响应报头(header)

Host: 表⽰服务器主机的地址和端⼝.

Content-Length: 表⽰body中的数据⻓度.(没有正文则没有这个属性)

Content-Type: 表⽰请求的body中的数据格式. (没有正文则没有这个属性)

Content-Length Content-Type,如果有body但是没有这两个属性,意味着这是非法的请求/错误的请求

2.2 User-Agent(简称UA)

User-Agent 是一个 HTTP 请求头部字段,它允许网络请求标识发起请求的客户端应用程序的信息,包括应用程序的类型、版本以及正在使用的操作系统等

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

0d71cc0be57e4878bc7cc4d71bf4ad48.png

2.3 Referer

Referer是一个 HTTP 请求头部字段,用于指示一个请求是从哪个页面发起的。这个字段通常由浏览器设置,当用户点击链接时,它会告诉服务器请求是从哪个页面(URL)跳转过来的。

2.4 Cookie

HTTP 协议中,Cookie 是服务器发送到用户浏览器并保存在本地的小块数据。它用于存储有关用户会话的信息,以便在用户浏览网站时跨多个页面请求或在后续的会话中识别用户,也就是说Cookie就属于浏览器给网站提供的一种"客户端存储数据"的机制.它是按照域名为为维度分别进行存储. 

Cookie也是键值对结构,使用; 来分割键值对,使用= 来分割键和值

为了安全,浏览器禁止网页直接访问你的电脑硬盘,浏览器并没有把路完全堵死,它允许网页通过键值对的方式(Cookie)来存储数据(本质也是储存在硬盘上),具体这样的键值对是如何储存到硬盘上的,浏览器封装好,网页本身无法干预.

首次访问某个网站,可能是不带Cookie的,在响应中就会有Set-Cookie这样的header,把一些键值对写回到浏览器这边,浏览器后续访问这个网站就会带有Cookie

Cookie来源:当用户访问一个网站时,服务器可以通过 HTTP 响应中的 Set-Cookie 向用户的浏览器发送一个或多个 Cookie

Cookie去向:当用户再次访问同一个网站时,浏览器会把之前存储的 Cookie 带上,发送回服务器。

有一个Cookie非常经典的使用场景,使用Cookie保存用户的身份信息 ,浏览器登录页面

e18aab7f5e054e19a25b7bd2d459aab4.png

3.空行  

请求头结束的标记

4.正文

有的http请求有,有的没有

4.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:临时重定向

1.首行

e1cce610a6324239835ee5c9fc88cb23.png

2.响应头(header)

5f04e36b59e1458bb3ffc2f99413625a.png

3.空行

请求头结束的标记。

4.正文

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

构造HTTP请求

可以通过postman/Apifox

5. HTTPS

1.概念

HTTPS也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层.HTTP协议内容都是按照⽂本的⽅式明⽂传输的.这就导致在传输过程中出现⼀些被篡改的情况.

HTTPS是一种安全的通信协议,它在HTTP的基础上通过SSL/TLS协议提供了数据加密、完整性校验和身份验证等功能。HTTPS的主要目的是确保数据传输的安全性,保护用户信息不被窃听和篡改,同时验证通信双方的身份,防止中间人攻击。

2.加密/密钥

加密就是把明⽂进⾏⼀系列变换,⽣成密⽂. 解密就是把密⽂再进⾏⼀系列变换,还原成明⽂

在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密钥

1.对称加密

对称加密就是通过同⼀个"密钥",把明⽂加密成密⽂,并且也能把密⽂解密成明⽂.

引⼊对称加密之后,即使数据被截获,由于⿊客不知道密钥是啥,因此就⽆法进⾏解密,也就不知道请求 的真实内容是啥了.

但是服务器同⼀时刻其实是给很多客⼾端提供服务的.这么多客⼾端,每个⼈⽤的密钥都 必须是不同的(如果是相同那密钥就会被⿊客轻易拿到了).因此服务器就需要维护每个客⼾ 端和每个密钥之间的关联关系,所以就是能在客⼾端和服务器建⽴连接的时候,双⽅协商确定这次的密钥是什么,但是如果直接把密钥明⽂传输,那么⿊客也就能获得密钥了,因此密钥的传输也必须加密传输!但是要想对密钥进⾏加密,就需要引⼊⾮对称加密,非对称加密来安全地交换一个对称密钥,然后使用这个对称密钥来加密实际的数据传输,即使对称密钥在传输过程中被截获,没有对应的私钥也无法解密通信内容

2.非对称加密

非对称加密使用一对密钥:公钥和私钥。公钥可以公开分享,而私钥则必须保密。公钥和私钥是配对的.缺点就是运算速度⾮常慢,⽐对称加密要慢很多.

通过公钥对明⽂加密,变成密⽂ 通过私钥对密⽂解密,变成明⽂也可以反着⽤ 通过私钥对明⽂加密,变成密⽂ 通过公钥对密⽂解密,变成明⽂

客⼾端在本地⽣成对称密钥,通过公钥加密,发送给服务器.由于中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密 钥,服务器通过私钥解密,还原出客⼾端发送的对称密钥.并且使⽤这个对称密钥加密给客⼾端返回的响应数据.

3.中间人攻击

不要以为通过非对称加密加密对称加密,就特别安全了,其实还是有风险的.

如图,服务器具有⾮对称加密算法的公钥pub1,私钥pri1,中间⼈(黑客)具有⾮对称加密算法的公钥pub2,私钥pri2.
客⼾端向服务器发起请求,服务器明⽂传送公钥pub1给客⼾端,中间⼈劫持数据报⽂,提取公钥pub1并保存好,然后将被劫持报⽂中的公钥pub1替换成为⾃⼰的公钥pub2,并将伪造报⽂发给客⼾端.
客⼾端收到报⽂,提取公钥pub2(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥xxxxx,⽤公钥pub2加密xxxxx,形成报⽂发送给服务器.
中间⼈再次劫持后,直接⽤⾃⼰的私钥pri2进⾏解密,得到通信秘钥xxxxx,再⽤曾经保存的服务端公钥pub1加密后,将报⽂推送给服务器.
服务器拿到报⽂,⽤⾃⼰的私钥pri1解密,得到通信秘钥xxxxx.
双⽅开始采⽤xxxxx进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚⾄修改

为了避免中间人攻击,就引入了证书机制

4.引入证书

引入证书通常指的是在建立安全连接时使用数字证书来验证通信双方的身份.由可信的第三方机构(称为证书颁发机构,CA)签发,用于证明公钥的所有者身份。

服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性,证书中会包含一系列信息,例如服务器的域名,公钥,证书有效日期,证书是大家服务器的人要向第三方公正机构申请的。

客户端收到的证书:服务器域名,公钥,证书有效期,公证机构信息,证书签名(相当于校验和,把前面所有的数据通过一定的算法生成一个校验和,公证机关利用自己的私钥对校验和加密就得到签名)

当客户端收到证书以后:主要做两件事

1.按照同样的算法计算一个校验和1
2.使用系统内置的公证机构公钥对证书签名解密得到校验和2
如果校验和1与校验和2相等就证明是原版的,没有被修改
如果校验和2与校验和1不相等就证明被篡改过,可能会弹出红色的警告页面,提示用户不安全

客户端手里拿着的公证机构的公钥是操作系统内置的.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com