WEB
2023-06-13 09:15:29 时间
1. TCP与UDP的区别
- 传输控制协议 TCP(Transmission Control Protocol) 提供面向连接的、可靠的数据传输协议,以字节流的形式传递,其传输效率慢,耗费资源多,首部字节为20-60,适用于要求通信数据可靠的场所
- 用户数据协议 UDP(User Datagram Protocol) 提供无连接的,尽最大努力的数据连接,以数据报文段的形式传输,其传输效率快、耗费资源低,首部字节为8,适用于要求通信速度快的场所
2. TCP与UDP所对应的协议
- TCP
- FTP:定义了文件传输协议,端口号:21
- Telnet:用于远程登录的接口,端口号:23
- SMTP:邮件传送协议,端口号:25
- POP3:与SMTP相对应,用于接收邮件,端口号:110
- HTTP:从web服务器传输超文本到本地浏览器的传送协议
- UDP
- DNS:用于域名解析,将域名地址转换为ip地址,端口号:53
- SNMP:简单网络管理协议,端口号:161
- TFTP:简单文件传输协议,端口号:69
3. TCP的三次握手与四次挥手
- 三次握手
三次握手的目的是双方确认自己与对方的发送和接收是否正常
- 客户端向服务端发送一个带有
syn
标志的数据包,此时客户端无任何确认信息,服务端确认对方发送正常,己方接收正常 - 服务端接收到数据包后,向客户端发送一个带有
syn/ack
标志的数据包,此时客户端确认己方发送/接收正常,对方发送/接收正常,服务端确认对方发送正常,自己接收正常 - 客户端接收到后,再向服务端发送一个带有
ack
标志的数据包,此时客户端确认己方发送/接收正常,对方发送/接收正常,服务端确认己方发送/接收正常,对方发送/接收正常
- 四次挥手
断开一个tcp连接则需要四次挥手
- 客户端发送一个
fin
,用于关闭客户端到服务端的数据传输 - 服务端收到一个
fin
后将发送一个ack
给客户端,此时确认序号为收到序号加1 - 服务端关闭与客户端的连接,并发送一个
fin
给客户端 - 客户端发送
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协议包括的请求
- GET:对服务器资源的简单请求
- POST:用于发送包含用户提交数据的请求,可能会改变数据的种类
- HEAD:类似与GET,但返回的响应中没有具体内容,仅用于获取头部
- PUT:发送修改数据的请求,但只会修改内容而不会修改种类
- DELETE:发出一个删除指定文档的请求
- TRACE:发送一个请求副本以跟踪其处理进程
- OPTIONS:返回所有可用方法,用于检查服务器支持的方法
- CONNECT:用于ssl隧道的基于代理的请求
6. GET与POST的区别
- GET
- GET重点是从服务器获取资源
- GET传输数据通过url请求,以
field = value
的形式置于url后并通过?
连接,用&
连接多个请求数据 - GET传输数据量小,因为其会收到url长度的限制,但效率高
- GET传输数据由于url可见因而是非安全的
- GET仅支持ASCII字符
- POST
- POST重点是向服务器发送数据
- POST传输数据是通过HTTP的post机制,将字段与对应值封存在请求实体中发送的,用户不可见,安全性高
- POST可以传输大量数据
- POST支持标准字符集
- 总结
- GET用于获取信息,无副作用,幂等且可缓存
- POST用于修改服务器数据,有副作用,非幂等且不可缓存
7. HTTP中的重定向与请求转发
- 重定向是客户端的行为,有两次请求,浏览器的地址会发生变化,可以访问自己web之外的资源,传输的数据会丢失
- 转发是服务器行为,只请求一次,浏览器地址不变,访问自己本身的web资源,传输的数据不会丢失
8. HTTP与HTTPS的区别
- HTTPS有CA证书,HTTP一般没有
- HTTP是超文本传输协议,而HTTPS则是具有安全性的SSL加密传输协议
- HTTP默认端口号为80,而HTTPS则为443
9. 在浏览器中输入url地址到显示主页的过程
- 域名解析
- 发起TCP的三次握手
- 建立TCP连接后发起HTTP请求
- 服务器相应HTTP请求,浏览器得到HTML代码
- 浏览器解析HTML代码,并请求其中的资源文件
- 浏览器对页面进行渲染并呈现
- 发起TCP的四次挥手
- 连接结束
10. cookie与session的区别
- cookie 是web服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个web服务器存储cookie。当日后浏览器再给特定的web服务器发送请求时,同时会发送为改服务器存储的cookie
- session 是存储在web服务器端的一块信息。session对象存储特定用户会话所需的属性与配置信息。当用户在应用程序的web页面之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去
- 区别:
- 存在的位置
- cookie存在于客户端的临时文件夹中
- session存在于服务器的内存中,一个session域对象为一个用户浏览器服务
- 安全性
- cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放
- session存放于服务器的内存中所以安全性高
- 网络传输量
- cookie会传递消息给服务器
- session本身存放与服务器故不会传递流量
- 生命周期
- cookie的生命周期是累积的,从创建时就开始计时,到达指定时间后,cookie的生命周期便结束
- session的生命周期是间隔的,从创建开始,只要在生命周期内有过访问,便会刷新生命周期的计时
- 访问范围
- 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的生命周期
- 根据Servlet的配置参数决定实例化时机,没有配置该参数项或者参数为负,则第一次访问时才会被实例化并调用
init()
函数;如果为0或者为正数,则服务器启动时就会被加载,加载顺序由小到大。 - 服务器关闭,或者Servlet长时间未使用,Servlet会通过调用
destory()
函数结束 - 最后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前后执行
相关文章
- springboot实现Web系统License授权认证
- Go语言WEB框架之Gin
- Javalin:一个轻量的 Web Framework
- Web项目部署到腾讯云服务器
- 一文了解Web Worker
- 搭建本地Web服务器Linux下打造强大的前端本地Web服务器(前端用Linux)
- web.py开发详解编程语言
- Spring MVC框架处理Web请求的基本流程详解编程语言
- Python Web 框架 Flask 1.0 正式发布
- 加密云储出席Web 3.0成都中国峰会,共谋“东数西算”建设发展
- 使用这个 Python 工具分析你的 Web 服务器日志文件
- 犀利网站扫描工具WVS(Web Vulnerability Scanner)下载
- Web项目下使用Redis加速优化(web项目 redis)
- 应用基于Redis的Web应用运行稳定性提升(redis运行web)
- web标准常见问题集合3
- Linux下Web性能压力测试工具http_load使用教程