java 知识点突击-(141-150)
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 知识点突击-(141-150)相关的知识,希望对你有一定的参考价值。
文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
java 知识点扫盲目录
https://blog.csdn.net/weixin_38316697/article/details/121991582
java 知识点突击-(141-150)
141 jwt的优缺点?
优点:
1、无状态;
token 自身包含了身份验证所需要的所有信息,使得我们的服务器不需要存储 Session 信息,这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。
2、有效避免了CSRF 攻击(跨站请求伪造);
导致这个问题很大的原因就是: Session 认证中 Cookie 中的 session_id 是由浏览器发送到服务端的,借助这个特性,攻击者就可以通过让用户误点攻击链接,达到攻击效果。
3、适合移动端应用
因为只要 token 可以被客户端存储就能够使用,而且 token 还可以跨语言使用。
4、单点登录友好
使用 Session 进行身份认证的话,实现单点登录,需要我们把用户的 Session 信息保存在一台电脑上,并且还会遇到常见的 Cookie 跨域的问题。但是,使用 token 进行认证的话, token 被保存在客户端,不会存在这些问题。
缺点:
1、因为无状态,相要立即废除一个token或者更改权限,不会立即生效,一般需要等到有效期过后才可以,当然这个也可以通过设计解决。
2、注销登录等场景下 token 还有效
3、token 的续签问题
142 Get 和 Post 请求有哪些区别? Get 和 Post 请求有哪些区别?
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中。
143 开放式系统互联模型(网络的七层架构)?
概述:
序列 | 层级名称 | 举例 | 用处 | 单位 | 协议 |
---|---|---|---|---|---|
1 | 物理层 | 网线的接口类型、光纤的接口类型 | 由 1、0 转化为【电流强弱】来进行传输,到达目的地后在转化为 1、0 | 比特流 | V.35、EIA/TIA-232 |
2 | 数据链路层 | 交换机,网桥、网卡 | 从物理层接收的数据进行【MAC 地址(网卡的地址)】的封装与解封装 | 帧 | 802.2、802.3ATM、HDLC |
3 | 网络层 | 路由器,网桥路由器 | 主要将从下层接收到的数据进行 【IP 地址(例 192.168.0.1)】的封装与解封装,常把这一层的数据叫做数据包。 | 数据包 | IP(IPV4、IPV6) ICMP4 |
4 | 传输层 | 定义了一些【传输数据的协议和端口号】(WWW 端口 8080和TCP协议,UDP协议) | 将从下层接收的数据进行分段进行传输,到达目的地址后在进行重组 | 数据段 | TCP,UDP |
5 | 会话层 | 主要在你的系统之间发起会话或或者接受会话请求 | 通过传输层(端口号:传输端口与接收端口)建立数据传输】的通路。 | 数据流 | FTP SSH TLS HTTP(S) SQL |
6 | 表示层 | 把计算机能够 识别的东西转换成人能够能识别的东西(如图片、声音等) | / | 数据流 | CSS GIF html JSON XML GIF |
7 | 应用层 | 终端的应用 | 展示我们在电脑屏幕上可以看到的东西 | 数据流 | Telnet、FTP、HTTP、SNMP等 |
个人认为,作为一个开发者来说,在开发阶段,主要在意后四个阶段【传输层】,【会话层】,【表示层】,【应用层】 就可以了。
144 post为什么是两次TCP连接?
GET和POST本质上就是TCP链接,服务类别(GET, POST, PUT, DELETE等等)就相当于TCP连接中的交通规则,
GET和HTTP最大的区别就是GET产生一个TCP数据包,POST产生两个TCP数据包。
即 对于POST,浏览器先发送header,服务器响应【100 continue】,浏览器再发送data,服务器响应【200 ok】(返回数据),因此POST是两次TCP连接。
145 相比http1.x,http2.x最大的特点
1)、最大的特点就是http 2.x 采用二进制格式而非文本格式,完【全多路复用】 ,而非有序并阻塞的、只需一个连接即可实现并行;
2)、【完全二进制协议】 HTTP1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制,http2.x 完全是二进制;
3)、【报头压缩】 HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie,一 样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
对于相同的头部,不必再通过请求发送,只需发送一次,HTTP 2.x 对这一点做了优化,引入了头信息压缩机制;
一方面,头信息使用gzip或compress压缩后再发送,另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。
4)、【服务器推送】 HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS。
146 http1.0和http1.1缺陷
1)http1.0:
浏览器的每次请求都需要与服务器建立一个【TCP连接】,成本太高
2)http1.1:
虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是【按次序进行】的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“【队头堵塞】”
避免方式 :一是减少请求数,二是同时多开持久连接。
147 https过程?
1)、客户端使用HTTPS的URL访问Web服务器,要求与WEb服务器建立SSL连接;
2)、Web服务器收到客户端的请求后,会将网站信息(证书中包含公钥)传送一份给客户端;
3)、客户端的浏览器与Web服务器协商SSL/TSL连接的安全协议等级,也就是信息加密的等级;
4)、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将对话的密钥加密并·传送网站;
5)、Web服务器利用自己的私钥密出会话密钥;
6)、web服务器利用会话密钥加密与客户端之间进行通信;
148 http状态码?
一、状态码分类
序号 | 状态码范围 | 原因 |
---|---|---|
1 | 100+ /<200 | 消息响应 |
2 | 200+ /<300 | 成功响应 |
3 | 300+ /<400 | 重定向 |
4 | 400+ /<500 | 客户端错误 |
5 | 500+ /<600 | 服务端错误 |
二、状态码详情
1、消息响应(100+ /<200)
序号 | 状态码 | 原因 |
---|---|---|
1 | 100 | Continue(继续) |
2 | 101 | Switching Protocol(切换协议) |
2、成功响应(200+ /<300)
序号 | 状态码 | 原因 |
---|---|---|
1 | 200 | OK(成功) |
2 | 201 | Created(已创建) |
3 | 202 | Accepted(已创建) |
4 | 203 | Non-Authoritative Information(未授权信息) |
5 | 204 | No Content(无内容) |
6 | 205 | Reset Content(重置内容) |
7 | 206 | Partial Content(部分内容) |
3、重定向(300+ /<400)
序号 | 状态码 | 原因 |
---|---|---|
1 | 300 | Multiple Choice(多种选择) |
2 | 301 | Moved Permanently(永久移动) |
3 | 302 | Found(临时移动) |
4 | 303 | See Other(查看其他位置) |
5 | 304 | Not Modified(未修改) |
6 | 305 | Use Proxy(使用代理) |
7 | 306 | unused(未使用) |
8 | 307 | Temporary Redirect(临时重定向) |
9 | 308 | Permanent Redirect(永久重定向) |
4、客户端错误(400+ /<500)
序号 | 状态码 | 原因 |
---|---|---|
1 | 400 | Bad Request(错误请求) |
2 | 401 | Unauthorized(未授权) |
3 | 402 | Payment Required(需要付款) |
4 | 403 | Forbidden(禁止访问) |
5 | 404 | Not Found(未找到) |
6 | 405 | Method Not Allowed(不允许使用该方法) |
7 | 406 | Not Acceptable(无法接受) |
8 | 407 | Proxy Authentication Required(要求代理身份验证) |
9 | 408 | Request Timeout(请求超时) |
10 | 409 | Conflict(冲突) |
11 | 410 | Gone(已失效) |
12 | 411 | Length Required(需要内容长度头) |
13 | 412 | Precondition Failed(预处理失败) |
14 | 413 | Request Entity Too Large(请求实体过长) |
15 | 414 | Request-URI Too Long(请求网址过长) |
16 | 415 | Unsupported Media Type(媒体类型不支持) |
17 | 416 | Requested Range Not Satisfiable(请求范围不合要求) |
18 | 417 | Expectation Failed(预期结果失败) |
5、服务端错误(500+ /<600)
序号 | 状态码 | 原因 |
---|---|---|
1 | 500 | Internal Server Error(内部服务器错误) |
2 | 501 | Implemented(未实现) |
3 | 502 | Bad Gateway(网关错误) |
4 | 503 | Service Unavailable(服务不可用) |
5 | 504 | Gateway Timeout (网关超时) |
6 | 505 | HTTP Version Not Supported(HTTP 版本不受支持) |
149 TCP 三次握手?
TCP 传输前进行三次沟通,简称为【三次握手】
知识点:
1、当建立一个新的连接时, 【SYN】 标志变 1
2、【顺序号 seq】( 32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个 报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则TCP 用【顺序号】对每个字节进行计数
3、【确认号 ack】( 32 位):包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当 是上次已成功收到数据字节顺序号加 1 。只有 【ACK】 标志为 1 时确认序号字段才有效。
4、【SYN 】:同步序号为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )
【第一次握手】: 【主机 A】 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器, 【主 机 B】
由 SYN=1 知道, 【主机 A】 要求建立联机;
【第二次握手】 : 【主 机 B】 收 到 请 求 后 要 确 认 联 机 信 息 , 向 【主机 A】发 送 ack number=( 【主机 A】 的 seq+1),syn=1,ack=1,随机产生 seq=7654321 的包
【第三次握手】: 【主机 A】 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码 ack 是否为 1,若正确, 【主机 A】 会再发送 ack number=(主机 B 的 seq+1),ack=1, 【主 机 B】 收到后确认seq 值与 ack=1 则连接建立成功。
150 TCP 四次挥手?
TCP 传输完数据断开的时候,进行四次沟通,简称【四次挥手】
知识点:
【FIN】 :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。
1) 关闭客户端到服务器的连接:首先客户端 A 发送一个 FIN,用来关闭客户到服务器的数据传送, 然后等待服务器的确认。其中终止标志位 FIN=1,序列号 seq=u
2) 服务器收到这个 FIN,它发回一个 ACK,确认号 ack 为收到的序号加 1。
3) 关闭服务器到客户端的连接:也是发送一个 FIN 给客户端。
4) 客户段收到 FIN 后,并发回一个 ACK 报文确认,并将确认序号 seq 设置为收到序号加 1。
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
四次挥手描述:
主机 A 发送 FIN 后,进入终止等待状态, 服务器 B 收到主机 A 连接释放报文段后,就立即 给主机 A 发送确认,然后服务器 B 就进入 close-wait 状态,此时 TCP 服务器进程就通知高 层应用进程,因而从 A 到 B 的连接就释放了。此时是“半关闭”状态。即 A 不可以发送给 B,但是 B 可以发送给 A。此时,若 B 没有数据报要发送给 A 了,其应用进程就通知 TCP 释放连接,然后发送给 A 连接释放报文段,并等待确认。A 发送确认后,进入 time-wait,注 意,此时 TCP 连接还没有释放掉,然后经过时间等待计时器设置的 2MSL 后,A 才进入到 close 状态。
创作不易、点关注、不迷路
点击主页、更精彩 !!!
以上是关于java 知识点突击-(141-150)的主要内容,如果未能解决你的问题,请参考以下文章