- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
HTTP
HTTP 使得 Web 服务器与浏览器之间可以通过互联网或内网进行数据交互。作为一个制定标准的国际社区,万维网联盟(W3C)负责和维护 HTTP。HTTP 第一版是 HTTP 0.9,随后更新为 HTTP 1.0,之后的版本是 HTTP 1.1。HTTP 1.1 版本的 RFC 编号是 2616。编写本书时,HTTP 1.1 依然是当前最流行的 HTTP 版本。当前最新版本是发布于 2015 年 5 月的 HTTP/2,附表 1.1 列出了 HTTP 各个版本及其发布时间,HTTP 的第二个主要版本通常表示为 HTTP/2,而不是 HTTP2。
附表 1.1 HTTP 版本与发布日期
版本 | 发布时间 |
|---|---|
HTTP 0.9 | 1991 年 |
HTTP 1.0 | 1996 年 |
HTTP 1.1 | 1997 年发布,1999 年更新 |
HTTP/2 | 2015 年 5 月 |
Web 服务器每天 24 小时不间断运行,并等待 HTTP 客户端(通常是 Web 浏览器)来连接并请求资源。通常,客户端发起一个连接,服务端不会主动连接客户端。
互联网用户需要通过点击链接或者输入一个 URL 地址来访问一个资源,以下为两个示例:
http://google.com/index.html
http://facebook.com/index.html
URL 的第一个部分是 HTTP,代表所采用的协议。除 HTTP 外,URL 还可以采用其他类型的协议,以下为两个示例:
mailto:joe@example.org
ftp://marketing@ftp.example.org通常,HTTP 的 URL 格式如下:
protocol://[host.]domain[:port][/context][/resource][?query string | path variable]或者
protocol://IP Address[:port][/context][/resource][?query string | path variable]中括号中的内容是可选项。因此,一个最简单的 URL 是 http://yahoo.ca 或者是 http://192.168.1.9。
需要说明的是,除了输入 http://google.com 外,还可以用 http://173.194.46.35 来访问谷歌。可以用 ping 命令来获取域名对应的 IP 地址。
ping google.com由于 IP 地址不容易记忆,所以实践中更倾向于使用域名。一台计算机可以托管不止一个域名,因此,不同的域名可能指向同一个 IP。另外,example.com 或者 example.org 无法被注册,因为它们被保留作为各类文档手册举例使用。
URL 中的 host 部分用来表示在互联网或内网中一个唯一的地址。例如,http://yahoo.com(没有 host)访问的地址完全不同于 http://mail.yahoo.com(有 host)。多年以来,作为最受欢迎的主机名,www 是默认的主机名。通常,http://www.domainName 会被映射到 http://domainName。
HTTP 的默认端口是 80 端口。因此,对于采用 80 端口的 Web 服务器,无需输入端口号。有时,Web 服务器并未运行在 80 端口上,此时必须输入相应的端口号。例如,Tomcat 服务器的默认端口号是 8080,为了能正确访问服务器,必须提供输入端口号。
http://localhost:8080/index.html
localhost 作为一个保留关键字,用于指向本机。
URL 中的 context 部分用来代表应用名称,该部分也是可选的。一台 Web 服务器可以运行多个上下文(应用),其中一个可以配置为默认上下文。若访问默认上下文中的资源,可以跳过 context 部分。
最后,一个 context 可以有一个或多个默认资源(通常为 index.html、index.htm 或者 default.htm)。一个不带资源名称的 URL 通常指向默认资源。当存在多个默认资源时,其中最高优先级的资源将被返回给客户端。
资源名后可以有一个或多个查询语句或者路径参数。查询语句是一个 key/value 组,多个查询语句间用“&”符号分隔。路径参数类似于查询语句,但只有 value 部分,多个 value 部分用“/”符号分隔。
接下来,我们介绍 HTTP 请求和响应。
HTTP 请求
一个 HTTP 请求包含 3 部分内容。
1.方法—URI—协议/版本。
2.请求头信息。
3.请求正文。
下面为一个 HTTP 请求示例。
POST /examples/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language:en-gb
Connection:Keep-Alive
Host:localhost
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6
Content-Length:30
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
lastName=Blanks&firstName=Mike请求的第一行 POST /examples/default.jsp HTTP/1.1 是方法—URI—协议/版本。
请求方法为 POST,URI 为/examples/default.jsp,而协议/版本为 HTTP/1.1。
HTTP 1.1 规范定义了 7 种类型的方法,包括 GET、POST、HEAD、OPTIONS、PUT、DELETE 以及 TRACE,其中 GET 和 POST 广泛应用于互联网。
URI 定义了一个互联网资源,通常解析为服务器根目录的相对路径。因此,通常用“/”符号打头。另外,URL 是 URI 的一个具体类型(详见 http://www.ietf.org/rfc/rfc2396.txt)。
HTTP 请求包含的请求头信息,包括关于客户端环境以及实体内容等非常有用的信息。例如,浏览器设置的语言、实体内容长度等。每个 header 都用回车/换行(即 CRLF)分隔。
HTTP 请求头信息和请求正文用一行空行分隔,HTTP 服务器据此判断请求正文的起始位置。因此,在一些关于互联网的书籍中,CRLF 被作为 HTTP 请求的第 4 种组件。
示例中,请求正文是 lastName=Blanks&firstName=Mike。
在正常的 HTTP 请求中,请求正文的内容不止如此。
HTTP 响应
同 HTTP 请求一样,HTTP 响应也包含 3 部分。
1.协议—状态码—描述。
2.响应头信息。
3.响应正文。
下面为一个 HTTP 响应示例。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Date: Thu, 29 Sep 2013 13:13:33 GMT
Content-Type: text/html
Last-Modified: Web, 28 Sep 2013 13:13:12 GMT
Content-Length: 112
<html>
<head>
<title>HTTP Response Example</title>
</head>
<body>
Welcome to Brainy Software
</body>
</html>类似于 HTTP 请求报文,HTTP 响应报文的第一行说明了 HTTP 的版本是 1.1,并且请求结果是成功的(状态代码 200 为响应成功)。
同 HTTP 请求报文头信息一样,HTTP 响应报文头信息也包含了大量有用的信息。HTTP 响应报文的响应正文是 HTML 文档。HTTP 响应报文的头信息和响应正文也是用 CRLF 分隔的。
状态代码 200 表示 Web 服务器能正确响应所请求的资源。若一个请求的资源不能被找到或者理解,则 Web 服务器将返回不同的状态代码。例如,访问未授权的资源将返回 401,而使用被禁用的请求方法将返回 405。完整的 HTTP 响应状态代码列表详见网址 http://www.w3. org/Protocols/rfc2616/rfc2616-sec10.html。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论