HTTP协议是每一位Web开发者都应该熟悉甚至精通的网络协议。HTTP协议详解视频仍旧是张孝祥老师讲解的,视频全面介绍了HTTP协议及在JSP开发中的使用。学习完视频后,逐步掌握HTTP协议的基础知识,了解在Web应用中请求-响应回路的详细过程,掌握HTTP协议中最重要的一些概念(GET/POST/状态码/响应头与实体头等等)。张老师用telnet模拟浏览器发送请求以及接受响应内容,非常直观的将复杂问题简单化,容易理解。视频内容包括:了解HTTP、请求行与状态行、通用信息头、请求头、响应头、实体头、扩展头。
第一段视频简单介绍了HTTP,讲解了浏览器访问多图网页的过程,比较了HTTP 1.1版本与1.0版本的不同之处,并介绍了请求-响应回路中的消息及消息头。对于HTTP,首先应该理解什么是HTTP:WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。 HTTP协议的版本有HTTP/1.0、HTTP/1.1、HTTP-NG,其中现在用的是1.1版本,1.0是早期版本,而NG版本属于正在开发中的版本。深入理解HTTP协议,对管理和维护复杂的WEB站点、开发具有特殊用途的WEB服务器程序具有直接影响。HTTP1.0的会话过程分四个步骤,一是建立连接,二是客户机发送请求信息,三是服务器会送响应信息,最后关闭连接。浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。因此,当网页中存在很多图片时,在HTTP1.0中,每个图片的下载都要重复上面4个步骤,建立一个新的会话。该版本协议也支持代理服务器,所谓代理服务器,就客户端浏览器请求网页文档时,请求会发送到代理服务器,如果代理服务器缓存有该网页文档,就直接返回响应信息给客户端浏览器,如果没有该文档,就直接发送请求到目标服务器,获取该文档后,在返回给客户端浏览器。所以代理服务器在有缓存文档的情况下充当服务器,在没有缓存相应文档的情况下对于目标服务器来说相当于浏览器。HTTP 1.1与HTTP 1.0的比较:
1.在一个TCP连接上可以传送多个HTTP请求和响应
2.多个请求和响应过程可以重叠进行
3.增加了更多的请求头和响应头
接下来讲解了有关HTTP请求消息和响应消息,请求消息的结构:一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。例如:
GET /books/java.html HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/links.asp
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate
响应消息的结构:一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。例如:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private
<HTML>
<BODY>
……
有关HTTP消息,有以下几点需要注意:
1.响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。
2.一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETE方式的请求消息中才可以包含实体内容。
3.对于HTTP 1.1来说,如果HTTP消息中包括实体内容,且没有采用chunked传输编码方式,那么消息头部分必须包含内容长度的字段,否则,客户和服务程序就无法知道实体内容何时结束。
4.在HTTP协议中,还可以使用简单的请求消息和响应消息,它们都没有消息头部分。简单的请求消息只能用于GET方式,且请求行中不用指定HTTP版本号。对于简单的请求消息,服务器返回简单的响应消息,简单的响应消息中只返回实体内容。
第二段视频主要讲解请求行与状态行。
请求行格式:请求方式 资源路径 HTTP版本号<CRLF>
举例:GET /test.html HTTP/1.1。
状态行格式: HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK
其中<CRLF>表示回车换行。在自己的机器上可以如视频中一样借助telnet程序直观体验请求行和状态行。请求行中的请求方式主要有两种,一是GET,参数会显示在浏览器地址栏URL后面,传送的数据量是有限制的,一般限制在1KB以下。 另外一个是POST,参数不会显示在URL后面而是封装在请求实体中,传送的数据量要比GET方式传送的数据量大得多。接着是关于响应状态码的知识,响应状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码可归为5种类别,使用最高位为1到5来进行分类,如下所示:
(1)100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 。
(2)200~299 表示成功接收请求并已完成整个处理过程 。
(3)300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址。
(4)400~499 客户端的请求有错误。
(5)500~599 服务器端出现错误。
最后两段视频主要讲解了通用信息头、请求头,响应头、实体头和扩展头,学完后以了解到HTTP消息中重要的头字段(Cache-Control、Connection、Referer等等)及其应用。通用信息头字段既能用于请求消息,也能用于响应消息,它包括一些与被传输的实体内容没有关系的常用消息头字段。应该重点掌握的有Cache-Control、Connection、Pragma、Transfer-Encoding。接着是请求头,请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型、压缩方法、语言、以及发出请求的超链接所属网页的URL地址等信息。应该重点掌握的有Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Host。然后是响应头,响应头字段用于服务器在响应消息中向客户端传递附加信息,包括服务程序名,被请求资源需要的认证方式,被请求资源已移动到的新地址等信息。应该重点掌握的有Accept-Range、Location、Server、WWW-Authenticate。最后就是实体头了,实体头用作实体内容的元信息,描述了实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。比较重要的有Content-Encoding、Content-Language、Content-Length、Content-Range、Content-Type、Expires、Last-Modified。在结尾处讲解了一下扩展头。在HTTP消息中,可以使用一些在HTTP 1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或扩展头,它们通常被当作是一种实体头处理。虽然不属于规范中所定义的内容,但是应用很广泛,现在流行的浏览器实际上都支持Cookie、Set-Cookie、Refresh和Content-Disposition等几个常用的扩展头字段。
总的来说,要在短时间内完全掌握HTTP协议,难度很大。虽然原理并不复杂,但是内容比较多。需要多练习,多熟悉。
第一段视频简单介绍了HTTP,讲解了浏览器访问多图网页的过程,比较了HTTP 1.1版本与1.0版本的不同之处,并介绍了请求-响应回路中的消息及消息头。对于HTTP,首先应该理解什么是HTTP:WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。 HTTP协议的版本有HTTP/1.0、HTTP/1.1、HTTP-NG,其中现在用的是1.1版本,1.0是早期版本,而NG版本属于正在开发中的版本。深入理解HTTP协议,对管理和维护复杂的WEB站点、开发具有特殊用途的WEB服务器程序具有直接影响。HTTP1.0的会话过程分四个步骤,一是建立连接,二是客户机发送请求信息,三是服务器会送响应信息,最后关闭连接。浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。因此,当网页中存在很多图片时,在HTTP1.0中,每个图片的下载都要重复上面4个步骤,建立一个新的会话。该版本协议也支持代理服务器,所谓代理服务器,就客户端浏览器请求网页文档时,请求会发送到代理服务器,如果代理服务器缓存有该网页文档,就直接返回响应信息给客户端浏览器,如果没有该文档,就直接发送请求到目标服务器,获取该文档后,在返回给客户端浏览器。所以代理服务器在有缓存文档的情况下充当服务器,在没有缓存相应文档的情况下对于目标服务器来说相当于浏览器。HTTP 1.1与HTTP 1.0的比较:
1.在一个TCP连接上可以传送多个HTTP请求和响应
2.多个请求和响应过程可以重叠进行
3.增加了更多的请求头和响应头
接下来讲解了有关HTTP请求消息和响应消息,请求消息的结构:一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。例如:
GET /books/java.html HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/links.asp
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate
响应消息的结构:一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。例如:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private
<HTML>
<BODY>
……
有关HTTP消息,有以下几点需要注意:
1.响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。
2.一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETE方式的请求消息中才可以包含实体内容。
3.对于HTTP 1.1来说,如果HTTP消息中包括实体内容,且没有采用chunked传输编码方式,那么消息头部分必须包含内容长度的字段,否则,客户和服务程序就无法知道实体内容何时结束。
4.在HTTP协议中,还可以使用简单的请求消息和响应消息,它们都没有消息头部分。简单的请求消息只能用于GET方式,且请求行中不用指定HTTP版本号。对于简单的请求消息,服务器返回简单的响应消息,简单的响应消息中只返回实体内容。
第二段视频主要讲解请求行与状态行。
请求行格式:请求方式 资源路径 HTTP版本号<CRLF>
举例:GET /test.html HTTP/1.1。
状态行格式: HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK
其中<CRLF>表示回车换行。在自己的机器上可以如视频中一样借助telnet程序直观体验请求行和状态行。请求行中的请求方式主要有两种,一是GET,参数会显示在浏览器地址栏URL后面,传送的数据量是有限制的,一般限制在1KB以下。 另外一个是POST,参数不会显示在URL后面而是封装在请求实体中,传送的数据量要比GET方式传送的数据量大得多。接着是关于响应状态码的知识,响应状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码可归为5种类别,使用最高位为1到5来进行分类,如下所示:
(1)100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 。
(2)200~299 表示成功接收请求并已完成整个处理过程 。
(3)300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址。
(4)400~499 客户端的请求有错误。
(5)500~599 服务器端出现错误。
最后两段视频主要讲解了通用信息头、请求头,响应头、实体头和扩展头,学完后以了解到HTTP消息中重要的头字段(Cache-Control、Connection、Referer等等)及其应用。通用信息头字段既能用于请求消息,也能用于响应消息,它包括一些与被传输的实体内容没有关系的常用消息头字段。应该重点掌握的有Cache-Control、Connection、Pragma、Transfer-Encoding。接着是请求头,请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型、压缩方法、语言、以及发出请求的超链接所属网页的URL地址等信息。应该重点掌握的有Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Host。然后是响应头,响应头字段用于服务器在响应消息中向客户端传递附加信息,包括服务程序名,被请求资源需要的认证方式,被请求资源已移动到的新地址等信息。应该重点掌握的有Accept-Range、Location、Server、WWW-Authenticate。最后就是实体头了,实体头用作实体内容的元信息,描述了实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。比较重要的有Content-Encoding、Content-Language、Content-Length、Content-Range、Content-Type、Expires、Last-Modified。在结尾处讲解了一下扩展头。在HTTP消息中,可以使用一些在HTTP 1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或扩展头,它们通常被当作是一种实体头处理。虽然不属于规范中所定义的内容,但是应用很广泛,现在流行的浏览器实际上都支持Cookie、Set-Cookie、Refresh和Content-Disposition等几个常用的扩展头字段。
总的来说,要在短时间内完全掌握HTTP协议,难度很大。虽然原理并不复杂,但是内容比较多。需要多练习,多熟悉。