目录
HTTP协议
1、HTTP协议简介
HTTP(HyperText Transfer Protocol),超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个基于请求与响应模式的、无状态的、应用层的协议,运行于TCP协议基础之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
2、HTTP协议特点
(1)支持客户端(浏览器)/服务器模式。
(2)简单快速:客户端只向服务器发送请求方法和路径,服务器即可响应数据,因而通信速度很快。请求方法常用的有get和post等。
(3)灵活:HTTP允许传输任意类型的数据,传输的数据类型由Content-Type标识。
(4)无连接:无连接指的是每次TC连接只处理一个或多个请求,服务器处理完客户的请求后,即断开连接。采用这种方式可以节省传输时间。
HTTP1.0版本一个请求响应之后,直接就断开了。称为短连接。
HTTP1.1版本不是响应之后直接就断开了,而是等几秒钟,这几秒钟之内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这几秒钟用户没有发送新的请求,就会断开连接。称为长连接。
(5)无状态:HTTP协议是无状态协议。
无状态是指协议对于事务处理没有记忆能力。
3、HTTP协议通信流程(工作原理)
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户端与服务器建立连接(三次握手)。
(2)客户向服务器发送请求。
(3)服务器接受请求,并根据请求返回响应的文件作为应答。
(4)客户与服务器关闭连接(四次挥手)。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接。
HTTP支持持久连接,在HTTP / 0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP / 1.1中,引入了保持活动机制,其中连接可以重用于多个请求。这样的持久性连接可以明显减少请求延迟,因为在发送第一个请求之后,客户端不需要重新协商TCP 3-Way-Handshake连接。另一个积极的副作用是,通常,由于TCP的缓慢启动机制,连接随着时间的推移而变得更快。
该协议的1.1版还对HTTP / 1.0进行了带宽优化改进。例如,HTTP / 1.1引入了分块传输编码,以允许流传输而不是缓冲持久连接上的内容。HTTP流水线进一步减少了延迟时间,允许客户端在等待每个响应之前发送多个请求。协议的另一项附加功能是字节服务,即服务器仅传输客户端明确请求的资源部分。
从技术上讲是客户在一个特定的TCP端口(端口号一般为80)上打开一个套接字。如果服务器一直在这个周知的端口上倾听连接,则该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。
HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。
4、HTTP报文格式
HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。
4.1、HTTP请求报文
当浏览器向Web服务器发出请求时,它向服务器传送了一个数据块,也就是所谓的请求信息(请求报文),HTTP请求信息由4个部分组成,分别是:1、请求行 请求方法/地址/ URI协议/版本 2、请求头(Request Header) 3、空行 4、请求正文
4.2、HTTP响应报文
HTTP响应报文与HTTP请求报文相似,HTTP响应报文也由4个部分组成:1、状态行 2、响应头(Response Header) 3、空行 4、响应正文
4.3、HTTP状态消息
HTTP的状态消息有很多,在这里主要列举最常见的一些状态消息。
状态代码 | 状态描述 | 说明 |
---|---|---|
200 | OK | 客户端请求成功 |
302 | Found | 临时重定向 |
403 | Forbidden | 服务器收到请求,但是拒绝提供服务。 服务器通常会在响应正文中给出不提供服务的原因 |
404 | Not Found | 请求的资源不存在,最常见的就是输入了错误的路径 |
500 | Internal Server Error | 服务器发生不可预期的错误,导致无法完成客户端的请求 |
Servlet详解
1、Servlet核心接口和类
在Servlet体系结构中,除了第三节中讲的实现Servlet接口,还可以通过继承GenericServlet或HttpServlet类,完成自定义Servlet的编写。
1.1、Servlet接口
在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。该接口中包括以下5个方法:
destroy()
ServletConfig getServletConfig()
String getServletInfo()
void init(ServletConfig arg0)
void service(ServletRequest arg0, ServletResponse arg1)