《深入剖析Tomcat》一1.1 HTTP

1.1 HTTP

HTTP允许Web服务器和浏览器通过Internet发送并接收数据,是一种基于“请求-响应”的协议。客户端请求一个文件,服务器端对该请求进行响应。HTTP使用可靠的TCP连接,TCP协议默认使用TCP 80端口。HTTP协议的第一个版本是HTTP/0.9,后来被HTTP/1.0取代,随后HTTP/1.0又被当前版本HTTP/1.1取代。HTTP/1.1定义于RFC(Request for Comment,请求注解) 2616中,可以从http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf下载。
注意 本节简单地介绍HTTP 1.1,目的是帮助你了解Web服务器应用程序发送的消息。若你对此有兴趣,想了解更多信息,请阅读RFC 2616。
在HTTP中,总是由客户端通过建立连接并发送HTTP请求来初始化一个事务的。Web服务器端并不负责联系客户端或建立一个到客户端的回调连接。客户端或服务器端可提前关闭连接。例如,当使用Web浏览器浏览网页时,可以单击浏览器上的Stop按钮来停止下载文件,这样就有效地关闭了一个Web服务器的HTTP连接。

1.1.1 HTTP请求

一个HTTP请求包含以下三部分:
请求方法—统一资源标识符(Uniform Resource Identifier ,URI)—协议/版本
请求头
实体
HTTP请求的示例如下所示:

请求方法—URI—协议/版本部分出现在请求的第一行,
POST /examples/default.jsp HTTP/1.1
其中POST是请求方法,/examples/default.jsp表示URI,HTTP/1.1表明请求使用的协议及其版本。
每个HTTP请求可以使用HTTP标准中指定的诸多请求方法中的一种。HTTP 1.1支持的7种请求方法包括:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE。其中GET和POST是Internet应用中最常用的两种请求方法。
URI指定Internet资源的完整路径。URI通常会被解释为相对于服务器根目录的相对路径。因此,它总是以“/”开头的。统一资源定位符(Uniform Resource Locator ,URL)实际上是URI的一种类型(参见http://www.ietf.org/rfc/rfc2396.txt)。协议版本指明了当前请求使用的HTTP协议的版本。
请求头包含客户端环境和请求实体正文的相关信息。例如,请求头可能会包含浏览器使用的语言,请求实体正文的长度等信息。各个请求头之间用回车/换行(Carriage Return/LineFeed, CRLF)符间隔开。
在请求头和请求实体正文之间有一个空行,该空行只有CRLF符。这个空行对HTTP请求格式非常重要。CRLF告诉HTTP服务器请求实体正文从哪里开始。在有些Internet编程书籍中,CRLF被认为是HTTP请求的第4部分。
在前面的HTTP请求的示例中,请求实体正文很简单,如下所示:

当然,在一个典型的HTTP请求中,HTTP请求实体正文也可以很长。

1.1.2 HTTP响应

与HTTP请求类似,HTTP响应也包括三部分:
协议—状态码—描述
响应头
响应实体段
下面是一个HTTP响应的示例:

HTTP响应头的第一行与HTTP请求头的第一行类似。第一行指明了使用的协议是HTTP/1.1,请求发送成功(状态码200表示请求成功),一切都正常执行。
从上面的示例中可以看出,它与请求头类似,响应头也包含了一些有用的信息。响应实体正文是一段HTML代码。响应头和响应实体正文之间由只包含CRLF的一个空行分隔。

时间: 2024-11-01 00:57:57

《深入剖析Tomcat》一1.1 HTTP的相关文章

《深入剖析Tomcat》一导读

前 言 欢迎阅读本书.本书剖析了Tomcat 4.1.12版本和Tomcat 5.0.18版本的基本结构,并解释了其servlet容器Catalina的内部工作原理.Catalina是开源.免费的,也是最受欢迎的servlet容器之一.Tomcat本身是一个复杂的系统,包含了许多不同的组件.若你想学习Tomcat的工作方式,应该从了解这些组件开始.本书描述Tomcat的总体结构,并针对每个组件建立一个简单的版本,使你更好地理解组件的工作机制,之后对真实组件进行描述."本书结构"一节会对

《深入剖析Tomcat》一3.2 应用程序

3.2 应用程序 从本章开始,每章的应用程序都会按照模块进行划分.本章的应用程序包含3个模块:连接器模块.启动模块和核心模块. 启动模块只有一个类(Bootstrap),后者负责启动应用程序.连接器模块中的类可分为以下5个类型: 连接器及其支持类(HttpConnector和HttpProcessor): 表示HTTP请求的类(HttpRequest)及其支持类: 表示HTTP响应的类(HttpResponse)及其支持类: 外观类(HttpRequestFacade和HttpResponseF

《深入剖析Tomcat》一第 3 章 连 接 器

第 3 章 连 接 器 正如前言所述,Catalina中有两个主要的模块,连接器(connector)和容器(container).在本章中,将会建立一个连接器来增强第2章中的应用程序的功能,用一种更好的方法来创建request对和response对象.兼容Servlet 2.3和2.4规范的连接器必须要负责创建javax.servlet.http.HttpServletRequest对象和javax.servlet.http.HttpServletResponse的实例,并将它们作为servl

《深入剖析Tomcat》一3.3 小结

3.3 小结 本章学习了连接器是如何工作的.本章所构建的连接器是Tomcat 4中默认连接器的一个简化版.如你所知,由于该默认连接器性能不高,已经不推荐使用.例如,所有的HTTP请求头都会被解析,即使并不会在servlet中使用它们.因此,默认连接器运行缓慢,现在已经被Coyote连接器所替代.Coyote连接器执行起来速度更快一些,其源代码可以在Apache软件基金会的网站上下载.但无论如何,默认连接器是一个不错的学习工具,将在第4章详细讨论.

《深入剖析Tomcat》一3.1 StringManager类

3.1 StringManager类 像Tomcat这样的大型应用程序必须小心仔细地处理错误消息.在Tomcat中,错误消息对系统管理员和servlet程序员来说都是很有用的.例如,系统管理员可以很容易地根据Tomcat的错误日志消息定位到发生异常的位置.而对于servlet程序员来说,在抛出的每个javax.servlet.servletException异常中,Tomcat都会发送一条特殊的错误消息,这样,程序员就可以知道servlet程序到底哪里出错了.Tomcat处理错误消息的方法是将错

《深入剖析Tomcat》一2.2 应用程序 1

2.2 应用程序 1 下面从servlet容器的角度审视servlet程序的开发.简单来说,对一个Servlet的每个HTTP请求,一个功能齐全的servlet容器有以下几件事要做: 当第一次调用某个servlet时,要载入该servlet类,并调用其init()方法(仅此一次): 针对每个request请求,创建一个javax.servlet.ServletRequest实例和一个javax.servlet.ServletResponse实例: 调用该servlet的service()方法,将

深入剖析tomcat之一个简单的web服务器

这个简单的web服务器包含三个类 HttpServer Request Response 在应用程序的入口点,也就是静态main函数中,创建一个HttpServer实例,然后调用其await()方法.顾名思义,await方法会在制定的端口上等待http请求,并对其进行处理,然后发送相应的消息回客户端.在接收到命令之前,它会一直保持等待的状态. HttpServer类 package simpleHttpServer; import java.io.File; import java.io.IOE

深入剖析tomcat之一个简单的servlet容器

上一篇,我们讲解了如果开发一个简单的Http服务器,这一篇,我们扩展一下,让我们的服务器具备servlet的解析功能. 简单介绍下Servlet接口 如果我们想要自定义一个Servlet,那么我们必须继承Servlet,并且实现下面几个重要的方法 public void init(ServletConfig config) throws ServletException public void service(ServletRequest request,ServletResponse resp

《深入剖析Tomcat》一1.2 Socket类

1.2 Socket类 套接字是网络连接的端点.套接字使应用程序可以从网络中读取数据,可以向网络中写入数据.不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的.为了从一个应用程序向另一个应用程序发送消息,需要知道另一个应用程序中套接字的IP地址和端口号.在Java中,套接字由java.net.Socket表示. 要创建一个套接字,可以使用Socket类中众多构造函数中的一个.其中一个构造函数接收两个参数:主机名和端口号. public Socket (java.lan

《深入剖析Tomcat》一第 1 章 一个简单的Web服务器

第 1 章 一个简单的Web服务器 本章介绍Java Web服务器是如何运行的.Web服务器也称为超文本传输协议(HyperText Transfer Protocol,HTTP)服务器,因为它使用HTTP与其客户端(通常是Web浏览器)进行通信.基于Java的Web服务器会使用两个重要的类:java.net.Socket类和java.net.ServerSocket类,并通过发送HTTP消息进行通信.本章先介绍HTTP协议和这两个类,然后介绍一个简单的Web服务器.