Java Web开发教程:基于Struts2+Hibernate+Spring
上QQ阅读APP看书,第一时间看更新

1.3 HTTP

HTTP 是互联网上应用最广泛的一种网络协议。它允许将 HTML 文档从 Web 服务器传送到Web浏览器。在Web浏览器和Web服务器之间的通信,从HTTP的角度看,Web浏览器就是一个 HTTP 客户,在 Web 服务器收到 HTTP 客户的请求后,根据需求进行处理,再把结果返回给Web浏览器。

1.3.1 什么是HTTP

HTTP是通用的、无状态的、面向对象的协议。HTTP的版本分别是:HTTP1.0、HTTP1.1和HTTP-NG。HTTP的消息分为请求消息和响应消息。

1.3.2 URL含义

统一资源定位符(URL)用来标识万维网上的各种资源,如文档、图像、声音等。URL由3个部分组成:协议类型、主机名和路径及文件名。

HTTP的URL的一般格式如下。

http://host[":"port][path]

其中,http表示此处要使用HTTP协议来定位网络资源;

host表示表示合法的Internet主机域名,或者是主机的IP地址;

port表示指定端口号。默认情况下,HTTP的端口号为80,可以省略;

path表示请求资源的路径,由零个或多个“/”符号间隔的字符串组成。表示主机上的一个目录或文件地址,该参数可以省略。若没有该项,则URL会指向Internet上的某个主页。

例如,如果用户想查询获取百度文库中的资料,则可以先进入百度文库的主页,其对应的URL为:http://wenku.baidu.com/,如图1.2所示。

图1.2 URL示例

该URL只给出了主机名,省略了端口号和URI,即使用默认端口号80,而该URL则指向了百度文库的主页,进入主页后可以根据全库搜索或者主页的链接来查找相关信息。

1.3.3 HTTP请求

HTTP的请求包括:请求行、请求报头和请求体3个部分。其中,某些请求报头和请求体的内容是可选的,它们之间需要用空行隔开。

1.请求行

请求行包含:方法(Method)、请求资源的URI(Request-URI)和HTTP版本(HTTP-Version) 3个内容,其格式如下。

Method Request-URI HTTP-Version CRLF

其中,CRLF表示回车和换行,方法(Method)指的是操作或命令。

2.请求报头

请求报头包含客户端请求的附加信息及自身信息。常用的请求报头有 Accept 和 User-Agent两种。Accept 用于指定客户端所接受的信息类型。常有多个Accept行,例如:

Accept: text/html

Accept: image/gif

表明客户端可接收图像和HTML或文本文件。

User-Agent 用于将发送请求客户端的操作系统名称和版本信息、浏览器的名称和版本信息等客户端信息通知服务器。

3.请求体

请求报头体也称为请求正文,是可选部分,例如GET请求就没有请求体。

4.GET方法与POST方法

HTTP中包含了多种方法,在需要的时候可以查询相关协议文档。通常最常用的方法是GET方法和POST方法。使用GET方法和POST方法来传递参数是不同的。

GET方法是最简单的HTTP方法,它的主要任务就是向服务器请求资源,并得到资源。资源的类型可能是HTML页面、JPEG图像,也可以是PDF文档、Word文档等。GET方法的关键就是要从服务器获得资源。

使用GET方法时,在URL地址后面常常可以附加一些参数,下面是一个使用GET方法的请求行:

GET http://www.apache.org.org/servlet?param1=abc&param2=def HTTP/1.1

注意

● 总字符数有限制,这和服务器有关。若地址栏中输入的文本过长,可能会导致GET方法无法正常工作。

● 参数会追加到请求URL后面,且以“?”开头。多个参数之间使用“&”进行分隔。

● 数据会追加到URL的后面,而且在浏览器的地址栏中显示,所以不要使用GET方法发送敏感数据。

● 数据量一般不超过1KB。

和GET方法的区别在于,POST方法不仅可以向服务器请求资源,而且同时可以向服务器发送表单数据。使用POST方法发送数据的示例如下。

POST /index.html HTTP/1.1      /*请求行*/

HOST:www.baidu.com        /*存放所请求对象的主机*/

User-Agent:Mozilla/4.5(WinNT)   /*指定用户代理*/

Accept: text/html         /*HTML文本文件*/

Accept-language:zh-cn       /*指定可接受的语言-中文*/

Content-Length: 22        /*实体内容长度*/

Connection: keep-alive       /*一直保持连接*/

param1=abc&param2=def       /*提交的参数*/

注意

● 使用POST方法请求时,参数被放到消息体中,因此不受地址栏中文本过长的限制,而且这些参数并不会直接显示在地址栏上。

● 传递的数据量没有限制。需要将请求报头 Content-Type 设置为 application/x-www-form -urlencoded,将Content-Length设置为实体内容的长度。

1.3.4 HTTP响应

在接收到一个请求后,服务器会返回一个HTTP响应。HTTP响应包括:状态行、响应报头和响应正文3个部分。

1.状态行

状态行包括:HTTP 版本(HTTP-Version)、状态码(Status-Code),以及解释状态码的简单短语(Reason- phrase)3个部分,其格式如下。

HTTP-Version Status-Code Reason-phrase CRLF

其中,状态码由三位数字组成,共有5大类33种,其第一个数字指定了响应类别,取值为1~5,后面两位没有明确的规定。具体的含义如下。

● 1xx:指示信息,例如:请求收到了或正在处理。

● 2xx:成功。

● 3xx:重定向,即通过各种方法将各种网络请求重新定个方向转到其他位置。

● 4xx:客户端错误,例如:请求中含有错误的语法或不能正常完成。

● 5xx:服务器端错误,例如:服务器出现异常而无法完成请求。

典型的响应状态码解释如下。

● 200:表示请求成功,并成功返回了请求的资源。

● 302:表示临时重定向,此时被请求的文档已经临时移动到其他位置,该文档新的 URL将在Location响应报头中给出。

● 400:表示错误请求。

● 401:表示浏览器访问的是一个受到密码保护的页面。

● 403:表示服务器收到请求,但拒绝提供服务。

● 404:表示访问的网页不存在,即服务器上不存在浏览器请求的资源。

● 500:表示内部服务器错误,即CGI、ASP、JSP等服务器端的程序发生了错误。

● 503:表示服务器超时。用户请求量比较大,服务器暂时性超载,不能处理当前的请求,例如:12306网站春节前购票,双十一淘宝购物都可能出现这样的状态响应。

2.响应报头

有了响应报头,服务器就可以传递不能放在状态行中的附加响应信息,服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

3.响应正文

响应正文是指服务器所返回的资源内容,如HTML页面。响应报头和响应正文之间必须使用空行来分隔。HTTP响应示例如下。

HTTP/1.1 200 OK  /*状态行,给出服务器正在运行的HTTP版本号和应答代码"200 OK"表示请求完成。*/

Connection: close             /*连接状态*/

Date: Wed, 19 Nov 2011 02:20:45 GMT    /*日期*/

Server: Apache/2.0.54(Unix)        /*服务器*/

Content-Length:397             /*指定数据包含的字节长度*/

Content-Type: text/html           /*指定返回数据的MIME类型*/

/*空行*/

<html>

<body>

/*数据*/

</body>

</html>

极客学院

jikexueyuan.com

极客学院在线视频学习网址:

http://www.jikexueyuan.com/course/1706.htmll

手机扫描二维码

细说HTTP的报文格式和工作流程