WEB服务器和浏览器之间的一问一答的交互过程也得遵循一定的规则,这个规则就是HTTP协议。它是TCP/IP协议集中的一个应用层协议,用于定义浏览器和WEB服务器之间交换数据过程以及数据本身的格式。现在被广泛使用的HTTP/1.1相对HTTP/1.0而言,最大的特点就是支持持续连接。
1.HTTP/1.0的会话方式:
建立连接,发送请求信息
-------------------------------------------------------------------------->
客户机 服务器
<--------------------------------------------------------------------------
关闭连接,回送响应消息
每次连接只处理一个请求,即使是对同一个网站的每一个页面的访问,浏览器和WEB服务器都要建立一次单独的连接。
2.HTTP/1.1的会话方式:
建立连接,第1个请求信息
-------------------------------------------------------------------------->
............
发送第N请求信息
-------------------------------------------------------------------------->
客户机 回送第1次响应 服务器
<--------------------------------------------------------------------------
..............
回应第n次响应
<--------------------------------------------------------------------------
发送关闭连接请求
-------------------------------------------------------------------------->
关闭连接
<--------------------------------------------------------------------------
HTTP/1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图象的网页文件的多个请求和响应可以在一个连接中传输,但每个单独的网页文件的请求和响应仍然需要使用各自的连接,还允许客户端不用等待上一次请求结果返回就可以发送下一个请求。
HTTP消息的格式:
一个完整的请求消息包括:一个请求行、若干消息头、以及实体内容。
一个完整的响应消息包括:一个状态行、若干消息头、以及实体内容。
这在前面已经有过简单的介绍。下面对这几个部分再做个详细的解说:
1.请求行:包括三个部分,即请求方式、资源路径、以及使用的HTTP协议版本。语法如下:请求方式 资源路径 HTTP版本号<CRLF>,其中<CRLF>表示回车和换行这两个字符的组合。HTTP请求方式包括POST、GET、HEAD、OPTIONS、DELETE、TRACE和PUT几种。常用的是前两种。
2.状态行:包括HTTP协议的版本号、一个状态码、以及对状态码进行描述的文本信息。
语法如下:HTTP版本号 状态码 原因叙述<CRLF>
使用GET和POST传递参数:
在URL地址后面可以附加一些参数,每个参数都由参数名和参数值组成,中间用=分隔,各个参数用&分隔,URL地址和整个参数之间用?分隔,如下所示:
http://www.it315.org/servlet/ParamsServlet?param1=aaa¶m2=bbb
使用GET传递参数的数据量是有限的,一般限制在1KB以下。使用POST比GET要大的多。是没有限制的。但是必须设置Content=Type消息头为‘application/x-www-form-urlencoded’和设置Content-Length消息头为实体内容的长度。
响应状态码:
200:表示一切正常,返回的是正常请求结果。
404:表示服务器上不存在客户机上所请求的资源,这个状态码在浏览网页时最常见的。
通用信息头:
Cache-Control:此字段用于通知客户机和服务器之间的代理服务器如何使用已缓存的页面。
Connection:用于指定处理完本次请求/响应后,客户端和服务器是否还要继续保持连接。
Date:用于表示HTTP消息产生的当前时间。
Transfer-Encoding:用于指定实体内容的传输编码方式。
请求头:
Accept:用于指定客户端程序能够处理的MIME类型。有多个时用逗号隔开。
Accept-Charset:指出客户端程序可以使用的字符集。有多个时用逗号隔开。
Accept-Encoding:指定客户机能够进行解码的数据编码方式。有多个时用逗号隔开。
Accept-Language:指定客户机期望服务器返回哪个国家语言的文档。有多个时用逗号隔开。
Host:指定资源所在的主机名和端口号。
响应头:
Accept-Range:用于说明当前WEB服务器是否接受Range请求和Range请求中指定的数据的单位。
Location:用于通知客户机应该到哪个新的地址去获取文档。由于当前响应并没有直接返回内容给客户机,所以使用Location头的HTTP消息不应该有实体内容,由此可见,在消息头中不能同时出现Location和Contect-Type这两个头自段。
实体头:
Allow:用于指定客户机请求的资源所支持的请求方法。
Content-Encoding:用于指定实体内容的压缩编码方式。
Content-Language:用于指定返回的网页文档的国家语言类型。
Content-Length:用于指定实体内容的长度。
Content-Location:用于指定响应消息中所封装的实体内容的实际位置路径。
Content-Type:用于指定实体内容的MIME类型。客户机通过检查服务器响应消息的此字段中的MIME类型就能知道实体内容的数据格式和知道以何种方式来进行处理了。<Tomcat>安装目录下的conf目录下的web.xml文件里面就定义了很多的类型。
Last-Modified:用于指定文档的最后修改时间。
扩展头:
Refresh:此字段告诉浏览器隔多长时间刷新。
分享到:
相关推荐
这个“HTTP协议精解.zip”压缩包包含了一份详细的文档“HTTP协议精解.doc”,我们来深入探讨一下HTTP协议的相关知识。 一、HTTP协议基础 HTTP协议基于TCP/IP协议,工作在应用层,主要用于传输Web内容。其基本工作...
HTTP协议精解 WEB服务器和浏览器之间的一问一答的交互过程也得遵循一定的规则,这个规则就是HTTP协议。它是TCP/IP协议集中的一个应用层协议,用于定义浏览 器和WEB服务器之间交换数据过程以及数据本身的格式。现在被...
HTTP协议基于TCP/IP协议集,属于应用层协议,负责处理用户通过浏览器发起的网页请求,并将服务器响应的数据传回给用户。 在HTTP/1.0版本中,每进行一次HTTP通信,客户端和服务器都需要建立一次新的TCP连接,完成...
- **HTTP协议**:超文本传输协议,用于浏览器与Web服务器之间的通信。Java的HttpURLConnection类提供了HTTP协议的支持。 - **FTP协议**:文件传输协议,Java通过java.net.Socket和java.io流类可以实现FTP客户端...
3. **计算机网络**:软件设计师需要理解网络通信的基本原理,如TCP/IP协议、HTTP协议、DNS解析等,以及网络安全相关的知识,例如加密、防火墙和入侵检测。 4. **数据库设计与管理**:数据库是软件系统中的核心组件...
Qt提供了一套完整的网络API,使得开发者能够轻松地处理HTTP、FTP等网络协议。同时,通过QSql模块,开发者可以方便地连接各种数据库系统,进行数据的读取和写入。多线程技术在现代应用中不可或缺,Qt提供了QThread类...
- **支持多种协议**:除了 HTTP,还支持 FTP、SFTP 等多种协议。 - **可定制性强**:支持设置各种选项,如超时时间、请求头等。 - **使用灵活**:既可以用于简单的 GET 请求,也可以用于复杂的 POST 请求。 **使用...
此外,还支持WebSocket协议,可用于实时通信。 6. **会话控制**:session和cookie是保持用户状态的主要手段。理解如何创建、修改和管理session,以及如何设置和读取cookie,对于构建用户登录、购物车等应用场景至关...
5. **网络编程**:J2ME支持HTTP、WAP等网络协议,使得移动应用可以访问互联网资源,进行数据交换。 6. **数据存储**:在J2ME中,可以使用Record Management System (RMS)进行本地数据存储,适用于小型数据库操作。 ...
网络编程是现代应用程序的常见需求,Perl可以方便地处理HTTP、FTP等协议。书中的示例可能包括发送HTTP请求、下载文件或创建简单的Web服务器。 模块是Perl的强大力量之一,它们允许程序员重用和分发代码。Perl的CPAN...
JSP提供了九个内置对象,如request、response、session、application等,它们对应于HTTP协议中的相应对象,简化了开发者对请求数据、响应内容、会话和全局应用程序状态的处理。 6. **EL(Expression Language)** ...
还可以使用OAuth、OpenID Connect等协议集成第三方登录服务。 总的来说,“ASP.NET+MVC网站编程案例精解”将引导你通过实际案例掌握ASP.NET MVC框架的核心概念和实践技巧,包括但不限于模型绑定、过滤器、异常处理...
7. **HTTP协议处理**: Java通过HttpURLConnection或第三方库如Apache HttpClient可以方便地实现HTTP请求和响应的处理,包括GET、POST等方法,以及设置请求头、处理响应码和解析响应体等。 8. **异常处理**: 网络...
7. **网络编程**:Qt包含强大的网络编程模块,支持HTTP、FTP、TCP/IP等多种网络协议。 8. **数据库集成**:通过Qt SQL模块,可以轻松连接多种关系型数据库。 9. **多媒体支持**:提供多媒体播放和处理功能,支持音频...
5. **网络编程**:Delphi提供了诸如Indy、HTTPClient等库,用于实现网络通信,包括HTTP、FTP、SMTP等协议,可用于构建网络应用程序和服务。 6. **图形和多媒体**:Delphi支持GDI+和DirectX等图形库,可以创建丰富的...
8. **网络编程**:C++Builder6可以用于开发网络应用,书中可能会包含TCP/IP通信、HTTP协议、套接字编程等内容。 9. **程序打包与发布**:如何将完成的项目打包成可执行文件,并进行部署,也是书中不可或缺的部分。 ...
3. **网络编程**:如何使用Qt的网络模块进行HTTP请求、WebSocket通信,以及FTP和SMTP协议的实现。 4. **数据库集成**:介绍如何使用Qt的SQL模块与各种数据库系统(如SQLite、MySQL等)交互。 5. **多线程**:在Qt...
4. **网络通信**:可能涵盖TCP/IP、HTTP、WebSocket等网络协议,以及使用C#的System.Net命名空间进行网络编程的方法,如创建服务器和客户端应用程序,发送和接收数据。 5. **多线程**:C#支持多线程编程,源代码中...
6. **网络编程**:Qt提供了丰富的网络编程API,可以方便地进行HTTP、FTP、TCP/IP等协议的客户端和服务器端编程。 7. **数据库支持**:Qt通过QSql模块提供对多种数据库系统的访问,如SQLite、MySQL、PostgreSQL等。 ...