1.Http协议介绍:
Http(Hypertext Transfer Protocal)超文本传输协议,从1990年开始就在www上广泛应用,是现今在www上应用的最多的协议,目前的
版本为"1.1".
2.Http是应用层协议:
Http1.0特性:
当你上网浏览网页的时候,浏览器和服务器之间就会通过Http在Internet上进行数据的发送和接收.
Http是一个基于请求/响应模式的,无状态的协议(reqeust/response base,stateless protocol).
注意:什么是无状态的协议?
无状态协议就是我们在访问网页的时候,在我们打开第一个网页,然后又接着打开第二个网页,服务器不会记住你打开的第一个网页,以及
第二个网页的状态,也就是说,服务器根本就不知道,你的二个网页,第三个网页......第N个网页是不是同一个人发的,是不是在同一个
机器上发的请求!还有就是你在上论坛的时候,每当你发起一个请求,比如登录之后发贴,服务器不知道你之前是否登录过。
持续连接(Persistent Connections)
在Http1.0中,当连接建立之后,浏览器发送一个请求,服务器回应一个消息,之后连接就被关闭.当浏览器下次请求的时候,需要重新建立连接,很显然
这种需要不断建立连接的通信方式开销是比较大的。早期的HTML只包含一个HTML文本,因此即使建立的连接开销量比较大,但是也没有什么影响!而现在的
HTML包含多种资源,比如说:图片,视频....每获取一种服务资源就建立一次连接,这样就增加了Http服务器的开销,造成了Internet上的信息堵塞!
为了解决上述HTTP1.0所出现的问题,万维网协会推出了HTTP1.1协议。
Http1.1的特性:
1).Http1.1版本的协议中给出了一个持续连接机制,并将其作为Http1.1中建立连接的缺省行为.通过这种连接,浏览器可以在建立一个连接之后,发送请求并得到
回应,而且客户还可发送流水线请求,也就是说客户端可以发送多个请求,而不用等到每一个响应的到来。
2)一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立
一个 TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户,也不记录过去的请求。但是,这也造成了一些性能上的缺陷,例如:一个包含许多
图像的网页文件中,并没有真正包含图像的数据内容,而只是指明了这些图像的URL地址,当WEB浏览器访问这些网页文件时,浏览器首先要发出针对该网页文件的请求,
当浏览器解析WEB服务器返回的该网页文档文件的HTML内容时,发现其中的<img>图像标签后,浏览器将根据<img>标签中的src属性所指定的URL地址再次向服务器发出
下载图像数据的请求。
3)显然,访问一个包含有许多图像的网页文件的整个过程包含多次请求和响应,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,上一次
和下一次请求完全分离。即使图像文件很小但是客户端和服务端每次建立连接和关闭连接却是一个比较费时的过程,并且会严重影响客户机和服务器的性能,当一个网页
文件包含CSS、JavaScript文件等内容时,也会出现上述的类似情况。
HTTP URL
http://host[:port][abs_path]
其中http表示要通过HTTP协议来定位网络资源。
Host表示合法的Internet主机域名和IP地址(以点分,十进制格式表示)
Port用于指定一个端口号,拥有别请求资源的服务器,主机监听该端口的TCP连接。如果Port是空,则使用缺省的端口
abs_path:请求指定的URI(Uniform Resource Identifier,统一资源标识符),如果URL中没有给出abs_path,那么
当他作为请求URI时,必须以"/"的形式给出.通常这个工作浏览器就帮助我们完成了
浏览器访问过程
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响应:
一个状态行、若干响应头(消息头)、以及实体内容 。
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协议版本号