深入体验Java Web开发内幕-- HTTP协议
浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
支持代理:
HTTP 1.1与HTTP 1.0的比较
HTTP 1.1的特点
在一个TCP连接上可以传送多个HTTP请求和响应
多个请求和响应过程可以重叠进行
增加了更多的请求头和响应头
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。
HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
使用telnet举例说明。
安装IE浏览器插件HttpWatch,查看IE浏览器通过HTTP协议获取某个页面。
HTTP 协议
HttpWatch工具的使用
? 功能:监听和截获本地机器每次向服务器发送的http请求数据和服务器向本地机器返回的http响应数据。
? 下载:http://www.httpwatch.com/
? 下载后,直接双击下载文件安装即可。之后打开IE浏览器,选择“工具”→“浏览器栏”→“HttpWatchProfessional”。
? 这样操作之后,就可以打开HttpWatch工具了。
浏览器访问多图网页的过程
一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求
HTTP请求消息
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:
一个请求行、若干消息头、以及实体内容,如下所示:
响应状态码à典型情况
200(正常)
表示一切正常,返回的是正常请求结果。
302/307(临时重定向)
指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。
304(未修改)
表示客户机缓存的版本是最新的,客户机应该继续使用它。
403(禁止)
服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致。
404(找不到)
服务器上不存在客户机所请求的资源。
500(内部服务器错误)
服务器端的CGI、ASP、JSP等程序发生错误。
HTTP响应细节——常用响应头
HTTP请求中的常用响应头
? Location: http://www.it315.org/index.jsp
? Server:apachetomcat
? Content-Encoding:gzip
? Content-Length:80
? Content-Language:zh-cn
? Content-Type:text/html; charset=GB2312
? Last-Modified:Tue, 11 Jul 2000 18:23:51 GMT
? Refresh: 1;url=http://www.it315.org
? Content-Disposition:attachment; filename=aaa.zip
? Transfer-Encoding:chunked
? Set-Cookie:SS=Q0=5Lb_nQ; path=/search
? ETag:W/"7777-1242234904000"
? Expires:-1
? Cache-Control: no-cache
? Pragma:no-cache
? Connection:close/Keep-Alive
? Date:Tue, 11 Jul 2000 18:23:51 GMT
对应的解释:
响应头
Location:服务器通过这个头告诉浏览器去访问哪个页面,这个头通常配合302状态码使用
Content-Encoding:服务器通过这个头告诉浏览器,回送的数据采用的压缩格式
Content-Length: 服务器通过这个头告诉浏览器,回送的数据的大小
Content-Type:服务器通过这个头告诉浏览器,回送数据的类型
Last-Modified:服务器通过这个头告诉浏览器,资源的最后修改时间
Refresh:服务器通过这个头告诉浏览器,定时刷新网页
Content-Disposition:attachment; filename=aaa.zip:服务器通过这个头告诉浏览器,以下载方式打开数据
ETag:W/"7777-1242234904000":缓存相关的头,为每一个资源配一个唯一的编号
Expires:0
Cache-Control:no-cache
Pragma:no-cache 这三个头组合使用,让浏览器不要缓存数据
扩展头
在HTTP消息中,也可以使用一些在HTTP 1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或扩展头,它们通常被当作是一种实体头处理。
现在流行的浏览器实际上都支持Cookie、Set-Cookie、Refresh和Content-Disposition等几个常用的扩展头字段。
Refresh头字段
Refresh:1
Refresh:1;url=http://www.it315.org
Content-Disposition头字段
Content-Type:application/octet-stream
Content-Disposition: attachment;filename=aaa.zip