Web编程

2021-11-01  本文已影响0人  小丸子的呆地

网络七层协议

应用层 HTTP FTP SMTP TelNet
表示层 JPEG
会话层 RPC SQL
传输层 TCP UDP
网络层 IP 路由器
数据链路层 交换机
物理层 光缆

TCP四层协议

应用层 HTTP FTP SMTP TelNet JPEG RPC SQL
传输层 TCP UDP
网际互联层 IP 路由器
网络接口层 交换机 光缆

TCP为什么合并应用层

因为应用层 表示层 会话层一般都在一个应用服务中一起实现,不大好区分,所以干脆就合并到一起

TCP三次握手四次挥手

TCP如何保证可靠

TCP最大连接数

操作系统使用socket封装tcp,socket本质上是一个CIP+C端口与SIP+S端口的映射关系
发送方 跟端口数量有关 最多65535;接收方就可以接受IP数量*65535个链接了

如果接收方滑动窗口满了,发送方会怎么做

接收方返回给发送方的ACK包中,会返回当前接收方缓冲区的窗口大小,发送方会通过坚持计时器周期性的询问接收方

CLOSS-WAIT 和 TIME-WAIT

服务器在接受到客户端发起的关闭链接请求之后,响应客户端,然后进入CLOSE-WAIT状态,因为服务器缓存区可能还有东西没有发送完,要等到数据发送完之后才能关闭连接
客户端在接收到服务端确认关闭连接后进入TIME-WAIT状态,防止还有数据发送过来,如果快速关闭,再吃创建连接有可能复用到刚才的端口接收到上一个连接的数据

TIME-WAIT状态有什么问题

高并发下,占用文件描述符,使新连接无法释放;修改配置或设置 SO_REUSEADDR 套接字,使得服务器处于 TIME-WAIT 状态下的端口能够快速回收和重用。

TIME-WAIT为什么是2MSL

客户端发送最后ACK之后,为了确认服务端接收到了,启动一个2MSL的定时器,如果2MSL没有接收到服务端的FIN保温,说明服务端已经close连接,完成了第四次挥手

TCP流量控制和拥塞控制

慢开始、拥塞避免、快重传、快恢复

UDP和TCP的区别

TCP是面向连接的,UDP不是面向连接的
TCP实现可靠传输,UDP不可靠
TCP发送的是字节流,UDP发送的是数据报文
TCP传输慢,UDP快
TCP需要资源多,UDP少
TCP首部20~60,UDP8字节

UDP为什么是不可靠的

UDP只有一个socket接收缓存区,没有发送缓冲区,所以有数据就发,不管对方是否接收到,对方接收缓冲区满了,就会丢弃新消息,也没有流量控制和重传机制,所以不可靠

HTTP协议

超文本传输协议 通用头+请求头+响应头+实体

什么是长链接

长链接是为了规避多次请求同一个服务每次都要进行三次握手和四次挥手,客户端通过通用头中的Connection: keep-alive 告诉服务端,这个链接我要维持一会儿
Http1.1默认长链接

长短链接使用场景

长:操作频繁,点对点通讯,即时通讯,网络游戏
端:用户数量较多,电商网站,因为长链接会占用大量资源

HTTP有哪些Method

1.0 GET, POST 和 HEAD
1.1 OPTIONS, PUT, PATCH, DELETE, TRACE CONNECT GET, POST HEAD

GET和POST区别

get参数放在url之后,参数会出现在地址栏,不安全;post是放在请求实体中
get编码只支持URL编码
get只支持ASCII 字符格式的参数
get提交数据长度有限制,一般由浏览器控制,chrome8182、火狐65535、IE2000

HTTP1.0 HTTP1.1 HTTP2 HTTP3

HTTPS

以安全为目标的 HTTP 协议,在 HTTP 的基础上通过传输加密和身份认证的方式保证了传输过程的安全性

  1. 客户端发起https请求,链接服务端433接口,发送本身支持的算法类型和秘钥长度
  2. 服务端接到消息,从自身支持的算法中选择一个发送给客户端
  3. 服务端发送包含数字证书的报文,证书内容、公钥
  4. 服务端发送一个完成报文给客户端,第一阶段协商完成。
  5. 客户端发送一个由公钥加密过的报文,包含一个随机密码串pre_master_secre
  6. 客户端发送finish 等待服务端解密后的回执
  7. 服务端解密之后发送finish给客户端,自己可以正确解密
  8. 之后进入TCP握手阶段,报文都以pre_master_secre进行对称加密传输

HTTP和HTTPS区别

端口,http80 https443
内容 http明文 https密文
https 除了握手还要有ssl协商

对称加密和非对称加密

对称加密指同一个秘钥进行加密解密
非对称加密指一个密钥对,私钥加密数据可以用公钥解密,

RSA

RSA是一个非常经典的非对称加密算法
原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥;
素数选择的越大,越安全,但是素数越大,加密和解密耗时也越长;
所以在一般场景,RSA用于传递对称加密的秘钥

什么是Restful

select poll epoll

操作系统提供的NIO方式,IO多路复用,同步不阻塞IO
select()方法会返回已经准备好的数据流,有1000个的限制
poll()比select(),没有限制
epoll()是基于信号通知的机制,首先创建一个epoll文件描述符,想epoll描述符中添加监听事件,比如某socket的read()操作,然后调用epoll_wait()方法,等待通知

水平触发,只要有就发 边缘触发,只要改变就发 epoll默认是水平

转发与重定向

转发一般指servlet之间的请求传递,会携带request和response内容,地址栏无变化
重定向只通过response返回一个302状态码+location地址头,浏览器获取之后,再次发起访问,两次请求,独立req和resp,地址栏变化

servlet

servlet是java对web开发指定的web服务器功能组件。
servlet可以处理动态资源的请求,扩展web服务器的功能。

tomcat原理

tomcat是一个servlet容器,同时也是一个http服务器

tomcat架构

server 一个tomcat实例
service 一个server至少包含一个service
Connector 用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;一个service可以有多个;http https

Endpoint处理socket;Processor封装request;Adapter将reqeust交给container
Container 用于封装和管理Servlet,以及具体处理Request请求;一个service只有一个
Engine引擎,管理多个站点;
Host 代表一个站点;
Context 代表一个应用,一个war包就是一个context;一个host下可以有多个context
Wrapper 是一个servlet的包装,一个context包含多个

tomcat请求执行流程

tomcat在Container是通过责任链模式调用的

tomcat中最大可以有多少链接

connector上可以配置maxConnections和acceptCount
tomcat的最大连接数参数是maxConnections,这个值表示最多可以有多少个socket连接到tomcat上。
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
BIO模式下默认最大连接数是它的最大线程数(缺省是200),NIO模式下默认是10000,APR模式则是8192(windows上则是低于或等于maxConnections的1024的倍数)。如果设置为-1则表示不限制。

tomcat使用的是什么链接框架

NIO:非阻塞 I/O,采用 Java NIO 类库实现。
NIO2:异步 I/O,采用 JDK 7 最新的 NIO2 类库实现。
APR:采用 Apache 可移植运行库实现,是 C/C++ 编写的本地库。

单点登录

单点登录指,在分布式系统中的会话跟踪,以前我们使用session保存在服务器上,在分布式中需要解决session共享分问题,一种是使用另外的存储介质统一存储session,一种是使用token

cookie和session

cookie是一种客户端状态管理技术,支持服务器将一些信息埋到浏览器对应的域名之下,浏览器在访问此域名的资源时会自动携带,在response中通过set-cookie的header
cookie随意复制,伪装成用户
session是一种服务端状态管理技术,有web服务器创建,并保存在web服务器上,将sessionId通过set-cookie写入浏览器cookie

会话跟踪技术

http请求是无状态的,很多情况需要确认http发起方的身份,又不能总让用户传递用户名和密码,所以需要会话跟踪技术

JWT

token是一种客户端状态管理技术,用户验证身份后,服务端发给客户端一个token,客户端保存次token,每次请求的时候将token写入header 的Authorization=
'Bearer' + token,服务端拿到请求的token,进行解析,只是本地解析,不进行记录
json web token,是一种基于json的token,分为三部分 header(声明加密算法)、playload(有效信息用户身份)、signature(签名)

XSS攻击

跨站脚本注入攻击,向正常网站的表单中注入恶意脚本代码,窃取网站私有内容,比如窃取cookies、localstorage、sessionstorage的内容。或是注入一些代码,指令等。
设置cookies为HttpOnly 使cookie不可被js读取操作。
使用XSSFilter过滤此类请求参数。

CSRF攻击

跨站请求伪造,诱导用户在恶意网站内点击链接,链接请求正常网站的功能业务,会自动携带正常网站的cookies,在用户不知情的情况下完成一些操作。

  1. 健强服务端逻辑,严格restful风格,可以防御一些低端的攻击。
  2. 利用请求头中的refer内容,refer是浏览器在发起请求是设置的当前请求来源网站的信息,可以防御绝大部分的攻击。
  3. 每次请求需要用户填写验证码,可以防御所有攻击,当然这种方式体验太差。
  4. x-xsrf-token,在发起请求前由前端从cookie中读取一个随机token,这个token可能是之前种下的,写到header中,因为只有同一个域下的js才能访问cookie(未设置httponly的),可以防御所有攻击。

跨域请求

浏览器对网站的一种保护,非原网站发起的请求,需要跨域资源共享,才被允许访问
1.jsonp
2.服务端允许跨域Access-Control-Allow-Origin 、Access-Control-Allow-Credentials:true

Request中attr和param的区别

param为请求传入的参数,attr是主动设置的参数
param不可以修改,attr可以修改可以删除
param只能是string,attr可以是对象

上一篇下一篇

猜你喜欢

热点阅读