JAVA EE_HTTP

为什么意气风发的少年,总是听不进去别人的劝解。

​​​​​​​ ----------陳長生.


❀主页:陳長生.-CSDN博客

📕上一篇:JAVA EE_网络原理_数据链路层-CSDN博客


1.HTTP

1.1.HTTP是什么

HTTP的中文名为超文本传输协议,是一种常用的应用层协议

1.2.HTTP工作过程

2.HTTP协议格式

HTTP是一种文本协议的格式,我们可以通过一些抓包软件来查询响应的请求和响应信息,例如Fibble

2.1.抓包工具Fiddler

可以把Fiddler 理解为一个代理,他可以帮客户端进行操作。

举个栗子:

假设有一个辣条工厂,这给厂做了很多辣条,当时单单靠老板自己卖不完,于是他找到了张三,李四,王五等人来帮他出售,这些人就可以称为代理,也就是正向代理。

于此同时,购买的人需要买这些辣条,但是他们不想自己买,找了人来替买,,这些被找来的人也可以称为代理,也就是反向代理。

2.1.1.下载地址

Web Debugging Proxy and Troubleshooting Tools | Fiddler

2.1.2.配置环境

由于大部分网站都是https,但是Fiddler 中默认没显示https内容,所有我们需要手动勾选一下。

2.2.如何使用

2.2.1.删除

点击想要删除的包信息,在点击键盘上的DEL

2.2.2.查看请求/响应信息

点击想要查看的包,在右边寻找ROW属性值,上面一个就代表包的请求信息,而下面的就为包的请求信息

我们可以点击右下角的View in Notepad查看文本内容的请求/响应内容

2.3.查看请求/响应内容

2.3.1.请求内容

  • 第一行为请求行
  • 从第二行开始到空一行的位置为请求报头
  • 空行代表请求头结束
  • 空行下面如果有内容那么就是请求正文(有的请求有,有的请求没有)

2.3.2.响应内容

  • 第一行为响应行
  • 从第二行开始到空一行的位置为响应报头
  • 空行代表响应头结束
  • 空行下面内容为响应正文

3.HTTP请求

3.1.URL

URL中最重要的为IP,端口号,路径,查询字符串。

一般我们用网址来查找网页的时候,只需要输入www.xxxx.com(例如百度:www.baudu.com)即可了,那么上面的一串URL怎么还需要那么多属性,其实是被省略掉了。

  • 协议:可以省略,默认下URL前面都会加个http
  • 登录信息:可以省略,这一个值是运用在几十年前的,现在已经不在URL中显示了
  • 端口号:可以省略,如果没有给端口号赋值的话,会默认给80端口号,如果是https的话会给443端口号
  • 带层次的文件路径:可以省略
  • 查询字符串:可以省略
  • 片段标识符:可以省略

3.1.1.键值对

在上面一串URL中,问号后面的查询字符串那段可以称为键值对,键值对是由程序员自己定义的,意思一般只有自己懂。

以百度为例,红色框中的内容都为键值对

3.2.GTE

表示获取数据,位于请求行的首位

3.2.1.出现情况

  • 直接在浏览器输入URL连接
  • 点击超文本传输连接
  • 加载图片

3.2.2.特点

  • 一般没有body内容
  • 要想传输数据要通过query string

3.3.POST

表示上传数据,位于请求行的首位

3.3.1.出现情况

  • 用户登录
  • 上传资源

3.2.2.特点

  • 有body,一般传输数据直接使用body

3.4.GET与POST

3.4.1.区别

  • GET用于获取,POST用于上传
  • GET一般没有body,要想传输数据需要通过query string
  • POST直接通过body传输

3.4.2.判别网络流言

  • 1流言:POST比GET更安全,原因是POST的内容是在body里,而GET的内容是在URL上;
  • 1解析:错误,谈到安全那肯定得想到加密,如果POST和GET的内容都没有加密,那么黑客通过抓包,不管是POST还是GET,都可以获取到其中的信息。

  • 2流言:POST请求的数据量比GET请求的数据量大
  • 2解析:错误,这是在很早之前的浏览器上的限制了,当时的技术并不发达,传输的自然就少了,随着技术的不断更新换代,这种说法早已被淘汰了,而且http中并没有限制请求数据的大小。

  • 3流言:GET官方建议幂相等,POST则没有
  • 3解析:差不多是对的,官方建议是建议,但是并没有强制实施,所以程序员可以不遵守该规则。
  • 幂相等:请求一定,响应一定,假设申请一个百度的浏览器,那么返回的界面也是百度。

3.5.请求报头

以下是一些常见的报头类型

3.5.1.Host

表示当前请求报头的域名和端口号

3.5.2.Content-Length

表示当前请求正文的长度(单位:字节)

3.5.3.User-Agent

表示当前客户端是什么类型(爬虫/浏览器/客户端)

也可以根据当前使用的机子(PC端/手机端)显示合适的页面

3.5.4.content-type

表示当前的数据格式

3.5.5.Referer

表示当前的请求数据是有哪个网址跳转的

3.5.6.Cookie

以键值对的形式表示(使用";"分割多个键值对,"="分割键和值)

cookie本质上是浏览器在本地存储数据的一种形式

众所周知,在浏览器中向服务器访问是有风险的,但是浏览器会提供一个方案,那就是cookie,cookie中的内容,其实是服务器给浏览器的,浏览器会把cookie保存在本地硬盘上,为了安全,不允许网站随意访问硬盘,而是只是按照"键值对"方式来存储简单数据。

cookie的作用就是保存一些不怎么重要的,但是有用的信息,例如"上次访问时间",同时它也是一种保护用户身份的表示。

关于sessionld:

sessionld是会话id,用来标识当前浏览器的身份。

举个栗子:

长生是A公司厂库的管理员,它有一张身份卡,这张身份卡中只记录了长生这个人,长生可以用这张卡自由进出A公司厂库的各个地方,但是他要是想去B公司厂库里乱逛,那肯定是不行的。

回过来,sessionld就代表着身份卡,记录着长生这个人,至于他的身高年龄等各属性是由cookid来存储的。

4.HTTP请求

4.1.状态码

4.1.1.200开头

表示响应正常

200:访问成功

4.1.2.300开头

重定向

指客户端访问一个URL时,它自动跳转到另一个URL

301:永久重定向

例如:网站 http://aaa.com 的http升级,永久变为 https://aaa.com

302:临时重定向

例如:登录一些网站后,自动跳转到个人主页

4.1.3.400开头

表示客户端出现问题

404:客户端要访问的资源不存在

403:访问被拒绝(没有权限)

4.1.4.500开头

表示服务端出现问题

500:服务器临时故障

502:网关没有从服务器上获取有效响应

504:当处理的数据量过大时或网络延时以及服务堵塞,就可能会造成超时异常

5.HTTPS

5.1.HTTPS是什么

HTTPS是根据HTTP协议为基础进行一个升级,使其更安全

5.2.加密是什么

明文:任何人都能看得懂的

密文:明文通过加密,得到密文

假设小美提前跟长生说,都会把你看到的单词内容,从第二个单词开始,把每个字母的前一个字母或数字都去掉再读,过了一会小美写好了小纸条(TI ULEOAV0E 9Yooku),让旁边的同学传给了长生,传纸条的同学都瞄了一眼内容,但是看不懂,传到长生那的时候,长生按小美之前说的话开始解读字条内容,解读到(I LOVE You)~~

上诉中,小美跟长生将的话就为密钥,而小美所做的就为加密,其他人都看不懂,只有她和长生能看的懂。

5.3.HTTPS的工作原理

由于再互联网上明文传输信息很危险,所以数据都会进行加密传输

而加密的方式有很多,可以分为"对称加密"和"非对称加密"

5.3.1.对称加密

对称加密就是使用同一个密钥进行传输

使用密文传输,黑客即使截获数据也不知道内容,但真的是这样吗?

如果有多台客户端与服务器进行数据传输,那么多台的客户端的密钥肯定都是不相同的(如果都是相同的密钥,如果黑客直到了其中一台客户端的密钥,其他的客户端也就都遭殃了),既然是不同的密钥,那么服务器要维护那么多密钥是很麻烦的,所以比较理想的做法就是在传输前告知服务器密钥是什么

但是,如果在传输前告知服务器本次传输的密钥是什么,由于该条信息是明文传输的,所以黑客也能知道密钥是什么,那之后传输的数据黑客也能通过密钥破解,就跟明文传输没什么区别的,所以https引用了"非对称加密"

5.3.2.非对称加密

非对称加密就是使用两把钥,公钥(pub1)和私钥(pri1)

公钥:所有人都拿的到,可以理解为锁

私钥:只有之间有,可以理解为钥匙

客户端通过公钥pub1将密钥进行加密传输给服务端,服务端根据私钥进行解密得到密钥,之后就使用对称加密进行传输

为什么使用对称加密:

因为非对称加密的运算速度是非常慢的,于是就需要非对称加密和对称加密联合使用

5.3.3.中间人攻击

但是即使是使用了非对称加密,黑客还是有办法进行攻击,就比如"中间人攻击"

由于公钥是服务端发布给客户端的,所以黑客也能够拿到,如果黑客截获信息,篡改公钥,客户端就收到黑客的公钥,使用黑客的公钥进行数据传输,那么黑客就能根据自己的公钥破解该条信息

5.3.4.证书

为了防止这种"中间人攻击"的出现,于是https就引用了证书

证书是在计算机出厂的时候就在操作系统里的,里面有一系列的信息

证书的有效期

证书的所有者

证书对应服务器的地址/域名

数字签名

开启一段会话的时候,服务器会向公证机构申请证书,证书中的各种信息就会以字符串的形式表示出来,当数据发送到客户端的时候,客户端就会判断该证书是否为真。

5.3.5.数字签名

公证机构发布证书后,会对该证书生成校验和

公证机构会拿着自己生成的非对称密钥对(pbu2/pri2),使用其中的私钥pri3对校验和进行加密,就得到了数字签名

数字签名的验证:

客户端拿到证书后,会对该证书进行校验和计算,拿到check1,然后再时候公证机构的pub2对证书中的数字签名进行解密,得到check2,如果相等,则信任该信息,如果黑客再其中篡改了证书中的内容,则不会相等,浏览器就会对用户进行提示"该网站存在风险"

黑客是否能通过其他操作进行攻击:

1>能否篡改公钥

答:不能,一旦篡改了,check1和check2就对应不上

2>能否直接做一个证书

答:不能,证书中包含了服务器的地址/渔民,浏览器很容易识别出来

3>能否在篡改公钥的同时,将数字签名也改了

答:不能,数字签名是通过私钥加密的,黑客拿不到

4>客户端如何拿到公证机构的公钥,黑客是否能伪造公证机构的公钥

答:公证机构的公钥不是从网络上获得的,而是内置在操作系统里,所以黑客是伪造不了的

相关推荐
sg_knight2 小时前
Docker网络全景解析:Overlay与Macvlan深度实践,直通Service Mesh集成核心
java·网络·spring boot·spring cloud·docker·容器·service_mesh
草明5 小时前
Brave 连接 Websocket 失败
网络·websocket·网络协议
k↑5 小时前
物联网之使用Vertx实现HTTP/WebSocket最佳实践
websocket·网络协议·http
日日行不惧千万里5 小时前
数据库故障排查指南
网络·数据库·oracle
傻啦嘿哟7 小时前
HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析
网络协议·http·https
会飞的架狗师7 小时前
【HTTP】connectionRequestTimeout与connectTimeout的本质区别
网络·网络协议·http
wzw_______9 小时前
BGP local preference选路 AS-Path
网络
zdd567899 小时前
网络学习中通信方面的相关知识、及再次解读B=2W
网络·信息与通信
Endeavors_YT10 小时前
计算机网络基础概念
服务器·网络·计算机网络