这一段时间看了tomcat的HTTP相关的源码实现,重点关注了keep-alive的实现机制。以下是对源码的分析和一些自己的感悟。
谈HTTP的实现还是要对http协议本身做一些了解。下面先对HTTP相关的知识做一些整理,再谈一下HTTP在tomcat的实现。
一、HTTP协议
谈HTTP协议之前先谈下TCP/IP协议。
1、TCP/IP
TCP/IP:传输控制协议/因特网互联协议(Transmission Control Protocol/Internet Protocol),又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。
TCP/IP定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。
TCP/IP是一个四层的分层体系结构。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。这些包通过网络传送到接收端的TCP层,接收端的TCP层把包还原为原始文件。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。网络上的网关计算机根据信息的地址来进行路由选择。即使来自同一文件的分包路由也有可能不同,但最后会在目的地汇合。
TCP/IP使用客户端/服务器模式进行通信。TCP/IP通信是点对点的,意思是通信是网络中的一台主机与另一台主机之间的。TCP/IP与上层应用程序之间可以说是“没有国籍的”,因为每个客户请求都被看做是与上一个请求无关的。正是它们之间的“无国籍的”释放了网络路径,才是每个人都可以连续不断的使用网络。
许多用户熟悉使用TCP/IP协议的高层应用协议。包括万维网的超文本传输协议(HTTP),文件传输协议(FTP),远程网络访问协议(Telnet)和简单邮件传输协议(SMTP)。这些协议通常和TCP/IP协议打包在一起。
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
2、HTTP和TCP/IP的关系
HTTP是使用TCP/IP协议的高层应用协议。
尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。
HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。
3、HTTP
HTTP:超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。
HTTP是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。
HTTP可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以http://开头的原因。
4、HTTP协议的内容
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
4.1、HTTP请求消息构成
请求消息格式如下所示:
请求行
通用信息头|请求头|实体头
CRLF(回车换行)
实体内容
其中“请求行”为:请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行]
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
4.2、HTTP响应消息构成
HTTP响应消息的格式如下所示:
状态行
通用信息头|响应头|实体头
CRLF(回车换行)
实体内容
其中:状态行 = 版本号 [空格] 状态码 [空格] 原因 [回车换行]
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
- 大小: 106.7 KB
分享到:
相关推荐
Tomcat是Apache软件基金会下的Jakarta项目中的一个核心项目,是一个开源的、免费的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。Tomcat简单易用,适合小型到中型的JavaWeb应用部署。在...
Tomcat 是一个基于 Java 的开源实现的 Servlet 容器,可以运行 Java Servlet 和 JavaServer Pages(JSP)程序,而 Http 协议是万维网(World Wide Web)中使用的主要协议。 首先,我们来了解 JavaEE 规范。JavaEE ...
Tomcat是一款开源的Java Servlet容器,它实现了Java EE的Web应用服务规范,特别是Servlet和JSP。Tomcat的工作流程主要包括以下步骤: 1. **接收到请求**:当客户端发送HTTP请求到Tomcat时,请求首先由Connector组件...
Tomcat是一款开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,用于部署和运行Java Web应用。在Android客户端与服务器通信的场景下,Tomcat扮演了接收和响应HTTP请求的角色。 三、HTTP协议...
4. ALPN(Application-Layer Protocol Negotiation):为实现HTTP/2提供了更高效的连接处理。 5. WebSocket增强:除了基本的WebSocket 1.1支持,还添加了更多的控制和管理功能。 6. 更强的可扩展性:通过改进插件...
为了在Tomcat中启用SSL支持,需要创建一个自签名证书。以下步骤展示了如何在Tomcat中设置SSL证书: 1. **生成证书**:使用`keytool`命令工具来生成证书。命令如下: ```bash %JAVA_HOME%\bin\keytool -genkey -...
Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,是一个开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。Tomcat7、Tomcat8和Tomcat9是不同版本的Tomcat,每个版本都有其特性和改进...
HTTP(超文本传输协议)是一种应用层协议,用于在Web浏览器和Web服务器之间交换数据。HTTP协议基于请求-响应模型,即客户端发起请求,服务器根据请求内容返回响应。 在B/S(Browser/Server)架构中,客户端通常是...
Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,它是一个开源的、免费的Web应用服务器,实现了Java Servlet和JavaServer Pages(JSP)规范。 【描述】"tomcat的简易源码实现"指的是通过阅读和理解Tomcat...
1. mod_jk:安装并配置mod_jk模块后,Apache和Tomcat之间会建立一个工作线程池,Apache将请求分发给线程池中的Tomcat实例。这种方式支持负载均衡和故障转移,可以有效地管理和扩展Web服务器集群。 2. mod_proxy_ajp...
JAX-WS支持SOAP(Simple Object Access Protocol)协议,这是一种XML格式的协议,用于在分布式环境中交换结构化信息。 接下来,我们将在Tomcat上部署Web服务服务器端(webserviceServer)。以下是一般的步骤: 1. ...
例如,可以通过修改workers.properties文件中的worker列表,实现请求在多个Tomcat实例间的分发,从而提高系统可用性和性能。 总结来说,Apache HttpServer 2.4.X与Tomcat连接器的使用涉及到Apache服务器的模块配置...
Apache HTTP Server(通常简称为Apache)是世界上最流行的Web服务器软件之一,而Tomcat则是一个开源的Java Servlet容器,主要用于运行Java应用,特别是JSP和Servlet。这两种服务器在部署Web应用程序时常常结合使用,...
在这个“tomcat实现websocket聊天室”的项目中,我们将深入探讨如何利用Tomcat搭建一个具备单聊、群聊、数据库管理以及用户管理功能的聊天室。 首先,我们需要理解WebSocket API的基本概念。WebSocket协议定义了两...
在传统的HTTP协议中,浏览器和服务器之间的通信是基于请求-响应模型的,即每次交互都需要客户端发起请求,服务器才能响应。而WebSocket则允许持久连接,允许数据双向传输,大大减少了延迟,提高了效率,尤其适合实时...
7. **连接器与协议**:讲解`Connector`元素在`server.xml`中的配置,包括HTTP、AJP等协议的使用,以及调整连接器参数以优化性能。 8. **安全性**:讨论如何设置用户认证、角色权限和 Realm,以实现基本的访问控制。...
在单个Tomcat实例中部署多个应用程序是一种常见的场景,尤其是在开发环境中,这种做法可以帮助开发者更高效地管理资源和测试环境。本文档将详细介绍如何在一个Tomcat实例中部署多个Web应用程序,包括必要的步骤、...
WebSocket是Web交互技术的一种革新,它为客户端和服务器之间提供了全双工的通信渠道,意味着数据可以在两者之间双向实时传输,而不仅仅局限于HTTP协议的请求-响应模式。在标题"Tomcat WebSocket"中,我们讨论的是...
在本例中,Netty被用来替代传统的HTTP服务器(如Tomcat),处理HTTP请求和响应,它的非阻塞I/O模型使得处理大量并发连接变得更加高效。 2. **HTTP协议**: HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络...