TCP的滑窗
- RTT:发送一个数据包到收到对应的ACK,所花的时间
- RTO:重传时间间隔(TCP在发送数据包时,会启动一个重传定时器RTO就是这个超时时间)
RTO并不是一个固定的时间,根据RTT算出来RTO的时间。
TCP使用滑动窗口做流量控制与乱序重排
- 提供TCP的可靠性
- 保证TCP的流控制性
TCP会话的发送端:(发送但还没收到回应的和未发送但对端允许发送的组合起来就是滑动窗口)
TCP会话的接收方:
HTTP
超文本传输协议HTTP主要特点
- 支持C/S模式
- 简单快速
- 灵活
- 无连接
- 无状态
HTTP请求解构(图片来自 菜鸟教程)
HTTP响应正文(图片来自 菜鸟教程)
请求/响应步骤
- 客户端连接到Web服务器
- 发送HTTP请求
- 服务器接受请求并返回HTTP响应
- 释放连接TCP连接
- 客户端浏览器解析HTML内容
HTTP状态码
- 1xx:指示信息–表示请求已接收,继续处理
- 2xx:指示信息–表示请求已被成功处理、理解、接受
- 3xx:重定向–要完成请求必须进行更进一步的操作
- 4xx:客户端错误–请求有语法错误或请求无法实现
- 5xx:服务端错误–服务器未能实现合法的请求
常见状态码
200:正常返回信息
400:Bad Request:客户端请求语法有错误,不能被服务器所理解
401:Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报文域一起使用
403:Forbidden:服务器接收到请求,但是拒绝提供服务
404:Not Found:请求资源不存在
500:Internal Server Error:服务器发生不可预期的错误
503:Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
GET请求和POST请求的区别
- Http报文层面:GET将请求信息放在URL(?redirect=?&ticket=?&sessId=?&billId=?&sceneId=?&serialNum= 请求参数以?开始后续参数以&连接属于键值),POST放在报文体中。两者安全性并没有区别。
- 数据库层面:GET请求符合幂等性和安全性,POST不符合
- 其他层面:GET请求可以被缓存、被存储,而POST不行
Cookie和Session的区别
cookie
- 是由服务器发给客户端的特殊信息,以文本的形式放在客户端
- 客户端再次请求的时候,会把Cookie回发
- 服务端接收到请求后,会解析Cookie,生成与客户端相应的内容
Session(分布式应用会结合Redis)
- 服务器端的机制,在服务器上保存的信息
- 解析客户端请求并操作session id ,按需保存状态信息
Session的实现
-
使用Cookie来实现
客户端发送一个请求,服务器返回并且Set-cookie一个JsessionId,客户端再次请求会将JessionId发给服务端 -
使用URL回写来实现
区别
- Session是放在服务器中,Cookie是放在客户端浏览器中
- Cookie不是安全的
- 减轻服务器的开销,应当使用cookie