一,什么是Web容器?
1,Http服务器
早期的Web应用主要用于浏览新闻等静态页面,Http服务器(比如Apache,Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。
2,Servlet技术
需求:为了不仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果。那么可以通过让HTTP服务器调用服务端程序来实现。
那么服务端如何来实现这个需求呢?
Sun公司就推出了Servlet技术。Servlet可以理解为运行在服务端的Java小程序,因为Servlet不能独立运行,所以必须把Servlet部署到容器中,由容器来实例化并调用Servlet。
3,Tomcat就是这样的Serlvet容器。
Tomcat可以实例化Serlvet并调用执行Servlet来处理业务逻辑。并且它也具有HTTP服务器的功能。所以,Tomcat
就是一个 HTTP服务器 + Servlet容器。Tomcat也叫Web容器
4,扩展:
其他应用服务器比如JBoss,WebLogic,他们不仅有Servlet容器的功能,也包含EJB容器,是完整的JavaEE应用服务器。所以Tomcat也算是一个轻量级的应用服务器。
5,Tomcat是SpringBoot默认的嵌入式Servlet容器,那么Springboot如何以内嵌方式运行Servlet容器的?
应用程序(Springboot)直接调用Web容器提供的API去创建一个Web容器(HTTP服务器和Servlet容器),同时程序注册一个Servlet到Servlet 容器中,比如:SpringMVC的DispatcherServlet,这样请求到达时,Servlet容器负责调用你的Servlet。
二,HTTP协议
1,HTTP协议的本质
HTTP协议是浏览器与服务器之间的数据传输协议。它是应用层协议,Http协议基于TCP/IP协议来传递数据(HTML文件,图片,查询结果等),HTTP协议不涉及数据包的传输,它主要规定了客户端和服务器之间的通信格式。
本质:本质就是一种浏览器与服务器之间约定好的通信格式。
2,一次HTTP请求过程
3,HTTP请求组成
请求行 + 请求头 + 请求体
4,HTTP响应组成
状态行 + 响应头 + 响应体
5,HTTP/1.0和HTTP/1.1区别
HTTP/1.0时期,每次HTTP请求都会创建一个新的TCP连接,请求完成之后这个TCP连接就会被关闭。但是这种通信模式效率太低。
HTTP/1.1时期,使用长连接的HTTP协议,会在响应头加入Connection:keep-alive。当浏览器完成一次请求后,浏览器和服务器之间TCP连接不会关闭,再次访问这个服务器上的网页时,浏览器会继续使用这一条已经建立的连接,也就是说两个请求可能公用一个TCP连接。
6,HTTP协议是无状态的,如何理解?
无状态:不同请求之间没有内容上的依赖关系,本次响应也只是针对本次请求的数据。
keep-alive表示tcp连接可以复用,指的是利用已有的传输通道进行http协议内容的传输,省去了创建/关闭连接的开销,达到提升性能的效果。应用程序不关心一次HTTP请求的TCP传输细节,只关心HTTP协议传输的内容。所以只要复用tcp连接时做好数据重置,就不算有状态的。
7,Resetful风格的无状态
首先REST是一种架构风格:把网络上的信息实体看做是资源(可以是图片,文件,一个服务....),资源用URI统一标识(URI中没有动词)。如何操作这一资源呢?我们可以定义一些动作:GET,POST,PUT,DELETE。通过URI+动作 来操作一个资源。
无状态是指:为了完成一个操作,请求里包含了所有信息,而服务端不再需要保存请求的状态(不需要保存session).没有了session,服务端可以有良好的伸缩性。