JAVA EE_HTTP
为什么意气风发的少年,总是听不进去别人的劝解。
----------陳長生.
❀主页:陳長生.-CSDN博客❀
📕上一篇:JAVA EE_网络原理_数据链路层-CSDN博客
1.HTTP
1.1.HTTP是什么
HTTP的中文名为超文本传输协议,是一种常用的应用层协议
1.2.HTTP工作过程
2.HTTP协议格式
HTTP是一种文本协议的格式,我们可以通过一些抓包软件来查询响应的请求和响应信息,例如Fibble
2.1.抓包工具Fibbler
可以把Fibbler理解为一个代理,他可以帮客户端进行操作。
举个栗子:
假设有一个辣条工厂,这给厂做了很多辣条,当时单单靠老板自己卖不完,于是他找到了张三,李四,王五等人来帮他出售,这些人就可以称为代理,也就是正向代理。
于此同时,购买的人需要买这些辣条,但是他们不想自己买,找了人来替买,,这些被找来的人也可以称为代理,也就是反向代理。
2.1.1.下载地址
Web Debugging Proxy and Troubleshooting Tools | Fiddler
2.1.2.配置环境
由于大部分网站都是https,但是fibbler中默认没显示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>客户端如何拿到公证机构的公钥,黑客是否能伪造公证机构的公钥
答:公证机构的公钥不是从网络上获得的,而是内置在操作系统里,所以黑客是伪造不了的