zl程序教程

您现在的位置是:首页 >  前端

当前栏目

WEB

Web
2023-06-13 09:15:29 时间

1. TCP与UDP的区别

  1. 传输控制协议 TCP(Transmission Control Protocol) 提供面向连接的、可靠的数据传输协议,以字节流的形式传递,其传输效率慢,耗费资源多,首部字节为20-60,适用于要求通信数据可靠的场所
  2. 用户数据协议 UDP(User Datagram Protocol) 提供无连接的,尽最大努力的数据连接,以数据报文段的形式传输,其传输效率快、耗费资源低,首部字节为8,适用于要求通信速度快的场所

2. TCP与UDP所对应的协议

  • TCP
    1. FTP:定义了文件传输协议,端口号:21
    2. Telnet:用于远程登录的接口,端口号:23
    3. SMTP:邮件传送协议,端口号:25
    4. POP3:与SMTP相对应,用于接收邮件,端口号:110
    5. HTTP:从web服务器传输超文本到本地浏览器的传送协议
  • UDP
    1. DNS:用于域名解析,将域名地址转换为ip地址,端口号:53
    2. SNMP:简单网络管理协议,端口号:161
    3. TFTP:简单文件传输协议,端口号:69

3. TCP的三次握手与四次挥手

  • 三次握手

三次握手的目的是双方确认自己与对方的发送和接收是否正常

  1. 客户端向服务端发送一个带有syn标志的数据包,此时客户端无任何确认信息,服务端确认对方发送正常,己方接收正常
  2. 服务端接收到数据包后,向客户端发送一个带有syn/ack标志的数据包,此时客户端确认己方发送/接收正常,对方发送/接收正常,服务端确认对方发送正常,自己接收正常
  3. 客户端接收到后,再向服务端发送一个带有ack标志的数据包,此时客户端确认己方发送/接收正常,对方发送/接收正常,服务端确认己方发送/接收正常,对方发送/接收正常

  • 四次挥手

断开一个tcp连接则需要四次挥手

  1. 客户端发送一个fin,用于关闭客户端到服务端的数据传输
  2. 服务端收到一个fin后将发送一个ack给客户端,此时确认序号为收到序号加1
  3. 服务端关闭与客户端的连接,并发送一个fin给客户端
  4. 客户端发送ack报文确认,并将确认序号设置为收到序号加1


4. HTTP相应状态码

类别

原因短语

1XX

Informational(信息性状态码)

接收的请求正在处理

2XX

Success(成功状态码)

请求正常处理完毕

3XX

Redirextion(重定向状态码)

需要进行附加操作以完成请求

4XX

Client Error(客户端错误状态码)

服务器无法处理请求

5XX

Server Error(服务器错误状态码)

服务器处理请求出错

  • 200:请求被正常处理
  • 204:请求被受理但没有资源可以返回
  • 206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源
  • 301:永久重定向
  • 302:临时重定向
  • 303:与302类似,只是它希望客户端在请求一个uri时,能通过GET方法重定向到另一个uri上
  • 304:发送附带条件的请求时,如果条件不满足则返回,与重定向无关
  • 307:临时重定向,与302类似,只是强制要求使用POST方法
  • 400:请求报文语法有误,服务器无法识别
  • 401:请求需要认证
  • 403:对应请求资源禁止被访问
  • 404:服务器无法找到对应资源
  • 500:服务器内部错误
  • 503:服务器正忙

5. HTTP协议包括的请求

  1. GET:对服务器资源的简单请求
  2. POST:用于发送包含用户提交数据的请求,可能会改变数据的种类
  3. HEAD:类似与GET,但返回的响应中没有具体内容,仅用于获取头部
  4. PUT:发送修改数据的请求,但只会修改内容而不会修改种类
  5. DELETE:发出一个删除指定文档的请求
  6. TRACE:发送一个请求副本以跟踪其处理进程
  7. OPTIONS:返回所有可用方法,用于检查服务器支持的方法
  8. CONNECT:用于ssl隧道的基于代理的请求

6. GET与POST的区别

  • GET
    1. GET重点是从服务器获取资源
    2. GET传输数据通过url请求,以field = value的形式置于url后并通过?连接,用&连接多个请求数据
    3. GET传输数据量小,因为其会收到url长度的限制,但效率高
    4. GET传输数据由于url可见因而是非安全的
    5. GET仅支持ASCII字符
  • POST
    1. POST重点是向服务器发送数据
    2. POST传输数据是通过HTTP的post机制,将字段与对应值封存在请求实体中发送的,用户不可见,安全性高
    3. POST可以传输大量数据
    4. POST支持标准字符集
  • 总结
    1. GET用于获取信息,无副作用,幂等且可缓存
    2. POST用于修改服务器数据,有副作用,非幂等且不可缓存

7. HTTP中的重定向与请求转发

  • 重定向是客户端的行为,有两次请求,浏览器的地址会发生变化,可以访问自己web之外的资源,传输的数据会丢失
  • 转发是服务器行为,只请求一次,浏览器地址不变,访问自己本身的web资源,传输的数据不会丢失

8. HTTP与HTTPS的区别

  1. HTTPS有CA证书,HTTP一般没有
  2. HTTP是超文本传输协议,而HTTPS则是具有安全性的SSL加密传输协议
  3. HTTP默认端口号为80,而HTTPS则为443

9. 在浏览器中输入url地址到显示主页的过程

  1. 域名解析
  2. 发起TCP的三次握手
  3. 建立TCP连接后发起HTTP请求
  4. 服务器相应HTTP请求,浏览器得到HTML代码
  5. 浏览器解析HTML代码,并请求其中的资源文件
  6. 浏览器对页面进行渲染并呈现
  7. 发起TCP的四次挥手
  8. 连接结束

10. cookie与session的区别

  • cookie 是web服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个web服务器存储cookie。当日后浏览器再给特定的web服务器发送请求时,同时会发送为改服务器存储的cookie
  • session 是存储在web服务器端的一块信息。session对象存储特定用户会话所需的属性与配置信息。当用户在应用程序的web页面之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去
  • 区别:
    1. 存在的位置
      • cookie存在于客户端的临时文件夹中
      • session存在于服务器的内存中,一个session域对象为一个用户浏览器服务
    2. 安全性
      • cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放
      • session存放于服务器的内存中所以安全性高
    3. 网络传输量
      • cookie会传递消息给服务器
      • session本身存放与服务器故不会传递流量
    4. 生命周期
      • cookie的生命周期是累积的,从创建时就开始计时,到达指定时间后,cookie的生命周期便结束
      • session的生命周期是间隔的,从创建开始,只要在生命周期内有过访问,便会刷新生命周期的计时
    5. 访问范围
      • cookie为多个用户浏览器共享
      • session为一个用户浏览器独享

11. cookie的过期与session的超时

cookie的过期与session的超时都是针对某个对象设置一个时间,然后采用轮询机制(或者首次访问时)检查当前对象是否超时,超时则移除。cookie保存在浏览器中,不安全。而session保存在服务器中。cookie的生命周期很长,而session的生命周期很短。

  • cookie是保存在客户端的,session则保存在服务端,cookie中保存着session的相关信息。如果cookie没有超时,则浏览器每次请求都会带上该cookie信息,服务器端根据cookie信息从session缓存中获取相对应的session。二者有一个超时,用户连接即失败
  • session的超时由服务器维护,它不同于cookie的失效。首先,session一般基于驻留内存的cookie,不是维持性的cookie,因而也就没有截止时间。即使截取到JSESSIONID cookie,并为它设置失效时间再发送,浏览器session与服务器session也会截然不同

12. Tomcat的生命周期

  1. 根据Servlet的配置参数决定实例化时机,没有配置该参数项或者参数为负,则第一次访问时才会被实例化并调用init()函数;如果为0或者为正数,则服务器启动时就会被加载,加载顺序由小到大。
  2. 服务器关闭,或者Servlet长时间未使用,Servlet会通过调用destory()函数结束
  3. 最后Servlet由JVM的垃圾回收器进行回收

13. Servlet中Request对象的方法

  • getAttribute(String name):返回由name指定的属性
  • getCookies():返回客户端所有cookie对象组成的数组
  • getCharacterEncoding():返回请求中的字符编码方式
  • getHeader(String name):获得HTTP协议定义的文件头信息
  • getInputStream():返回请求的输入流,用于获得请求中的数据
  • getParameter(String name):获得客户端传送给服务端的由name指定的参数值
  • getProtocol():获取客户端向服务端传送数据时所依赖的协议
  • getQueryString():获取查询字符串
  • getRequestURI():获取发出请求字符串的客户端地址
  • getRemoteAddr():获取客户端ip
  • getRemoteHost():获取客户端名字

14. 过滤器与拦截器的区别

  • 实现原理:过滤器基于回调实现;拦截器基于动态代理
  • 控制粒度:过滤器与拦截器都能够实现对请求的拦截功能,但是拦截器对访问控制的粒度更细
  • 使用场景:拦截器主要用于权限检查、日志记录等;过滤器主要用于过滤请求中的无效参数、安全校验等
  • 依赖容器:过滤器依赖于Servlet容器,局限与web;过滤器依赖于Spring框架,能够使用框架中的资源
  • 触发时机:过滤器在Servlet前后执行;拦截器在handler前后执行