`
ylsun1113
  • 浏览: 27892 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HTTP协议和tomcat中的HTTP实现(一)

    博客分类:
  • http
阅读更多

这一段时间看了tomcatHTTP相关的源码实现,重点关注了keep-alive的实现机制。以下是对源码的分析和一些自己的感悟。

HTTP的实现还是要对http协议本身做一些了解。下面先对HTTP相关的知识做一些整理,再谈一下HTTPtomcat的实现。

 

一、HTTP协议

HTTP协议之前先谈下TCP/IP协议。

 

1TCP/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协议提供可靠的连接服务,采用三次握手建立一个连接。

 

2HTTPTCP/IP的关系

HTTP是使用TCP/IP协议的高层应用协议。

尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。

通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。

HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。

 

3HTTP

HTTP:超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议。

HTTP是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

HTTP可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以http://开头的原因。

 

4HTTP协议的内容

HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

 

4.1HTTP请求消息构成

请求消息格式如下所示:

 

请求行

 

通用信息头|请求头|实体头

 

CRLF(回车换行)

 

实体内容

 

其中“请求行”为:请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行]

 

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET     请求获取Request-URI所标识的资源

POST    Request-URI所标识的资源后附加新的数据

HEAD    请求获取由Request-URI所标识的资源的响应消息报头

PUT     请求服务器存储一个资源,并用Request-URI作为其标识

DELETE  请求服务器删除Request-URI所标识的资源

TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

 

4.2HTTP响应消息构成

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
分享到:
评论

相关推荐

    使用CAS在Tomcat中实现单点登录

    CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,对于采用 CAS 实现轻量级单点登录解决方案的入门读者具有一定指导作用。

    Java后端WebSocket的Tomcat实现.docx

    本文档主要讲述的是Java后端WebSocket的Tomcat实现;随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,...

    apr库(tomcat优化)

     AJP Connector, 基于AJP协议,AJP是专门设计用来为tomcat与http服务器之间通信专门定制的协议,能提供较高的通信速度和效率。如与Apache服务器集成时,采用这个协议。  APR HTTP Connector, 用C实现,通过JNI调用...

    在tomcat中配置https的总结

    为了使网站或开发的软件使用https协议访问,使用keytool工具实现生成证书,并在tomcat1.6的配置文件上设置相应的代码实现访问地址形式如:https://localhost/login.jsp。

    apache+tomcat 实现负载均衡

    在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_...

    tomcat和apache mod_jk.so

    除了性能的提升,mod_jk另外的一个作用可以实现apache与tomcat一对多的对应, 使后端tomcat负载均衡。mod_jk也提供apache与tomcat链接情况的监控。 mod_jk模块的典型工作流程是这样的:一个HTTP请求过来,mod_jk模块...

    tomcat是java的一个中间件,浏览器发出HTTP请求后经过tomcat中间件,通过tomcat返回给浏览器的实现

    tomcat是java的一个中间件,浏览器发出HTTP请求后经过tomcat中间件,转发到目的服务器,目的服务器返回响应消息,通过tomcat返回给浏览器。

    CVE-2020-1938 Apache Tomcat 文件包含EXP

    Tomcat是Apache软件基金会中的一个重要项目,性能稳定且免费,是目前较为流行的Web应用服务器。由于Tomcat应用范围较广,因此本次通告的漏洞影响范围较大,请相关用户及时采取防护措施修复此漏洞。 参考链接: ...

    基于HTTP协议的网络数据分析系统的设计与实现.pdf

    参考了 HTTP 协议中 User_Agent 字段的变动历史,提出了从 User_Agent 字段中提取浏览器信息、设备名称和操作系统的方法,实现了终端设备层面的 分析。对于用户层面,解析了 HTTP 协议正文,包括 JSON 格式和 HTML ...

    Apache-Tomcat-8.5.5(Linux )

    如果细究会发现Tomcat有两个NIO Connector,一个是Http11NioProtocol,另一个是Http11Nio2Protocol。 如果配置Connector不指定class name,而是指定协议。那么如果没有配置APR,Tomcat会使用Http11NioProtocol。 为...

    apr库(tomcat优化) for native 20

     AJP Connector, 基于AJP协议,AJP是专门设计用来为tomcat与http服务器之间通信专门定制的协议,能提供较高的通信速度和效率。如与Apache服务器集成时,采用这个协议。  APR HTTP Connector, 用C实现,通过JNI...

    spring-boot-protocol:springboot功能扩展-netty动态协议,可以支持各种网络协议的动态切换(单端口支持多个网络协议)。支持mmap,sendfile零拷贝,http请求批量聚合

    其中内置多个网络传输(标准与规范)的实现库,轻松添加或扩展协议。例如:HttpServlet,RPC,MQTT(物联网通讯协议),Websocket,RTSP(流媒体协议),DNS(域名解析协议),MYSQL协议。 1.可以替代tomcat或jetty....

    Tomcat中实现Session小结

    Http协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录; Session的主要目的就是为了弥补Http的无状态特性。简单的说,就是服务器可以利用session...

    apache-tomcat-8.5.50-src.zip

    Tomcat启动流程分析 组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 Server中的init方法示例 为啥StandardServer没有init方法 LifecycleBase中的init与...

    tomcat8+websocket演示

    tomcat8真正支持jsr-356(包含对websocket的支持), tomcat7部分版本的websocket实现不兼容jsr-356。 需要注意websocket与浏览器的兼容问题,有些早期版本的浏览器支持旧版本的websocket协议,可能会与新版本的...

    websocket实现一对一聊天

    基于tomcat的websocket,实现的一对一通讯,支持https协议。

    apache-tomcat-8.5.30.zip

    最小的 Java 版本和实现的规范版本保持不变。 与 8.5.29 相比,显着的变化包括:将对 maxDays 属性的支持添加到 AccessLogValve 和 ExtendedAccessLogValve。 这允许在定义删除之前保留轮询访问日志的最大天数在...

    基于XMPP协议的Android消息推送设计与实现.pdf

    本文介绍了一种基于XMPP 协议的AndroidPn 开源框架的实现模型,将其部署在MySQL 数据库和Tomcat 服务器下,实现并改进了实时推送消息、自定义消息结构和内容、推送服务开机启动、手机端服务唤醒、发送离线消息等实用...

    Tomcat汤姆猫

    Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制...

    HTTP Cookie 协议管理标准分析以及结构实现

    介绍Cookie的基本原理,服务器、客户端针对Cookie的使用; 讲述自己实现Cookie 管理器应该使用的方式,以及存储Cookie的结构说明。

Global site tag (gtag.js) - Google Analytics