HTTP协议

HTTP协议

Internate的基本协议是TCP/IP(传输控制协议和网际协议)。而目前使用的FTP,HTTP都是建立在TCP/IP上的应用层协议。不同的协议对应不同的应用。而HTTP协议(Hyper Text Transfer Protocol的缩写,中文译称超文本传输协议)是Web应用所使用的主要协议。

HTTP协议是一个采用的请求/响应模型的协议。

1、请求:建立链接 在HTTP Client(WEB浏览器IE)和HTTP Server(WEB服务器)进行数据传递的之前,需要在两者之间建立一个TCP链接,用于在两者之间传输HTTP报文。首先由客户端向服务器发送一个请求。
http://: 代表超文本传输协议,一般情况下不用输入(默认的)
192.168.1.54: 代表WEB服务器的地址(http://已暗示服务器端端口号为80)
\index.html: 代表根目录下的网页文件 因此这句话的含义就是获取服务器上192.168.1.54:80根目录下的index.html文件。
例如:http://www.myweb.com:8080/index.html
在Java中,这将等同于代码:
Soceet socket=new Socket("www.myweb.com",8080);
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();
一个请求由四个部分组成:请求行、请求头标、空行和请求数据。这里就不详细介绍了,需要的自己去了解。

2、超时:HTTP协议有一种内置机制,在消息的传递时间上有一定的灵活性:超时机制。一个超时就是客户端等待请求消息返回信息的最长时间。

3、响应:Web服务器解析请求,定位指定资源。服务器将资源副本写至套接字,在此处由客户端读取。
一个响应由四个部分组成;状态行、响应头标、空行、响应数据。这里就不详细介绍了,需要的自己去了解。

4、状态:HTTP协议是无状态协议。既每一次请求/响应都不知道与是不是上一次同一个用户的请求。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。两种交互存储状态。
Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。Cookie信息则存放在HTTP请求头(Request Header)了。
Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。
要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。

5、关闭连接:客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话。


a) 工作流程
  一次HTTP操作称为一个事务,其工作过程可分为四步:
  1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
  2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
  3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
  如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

b) 使用Wireshark抓TCP、http包
  打开Wireshark,选择工具栏上的“Capture”->“Options”,界面选择如图1所示:
[img]http://dl.iteye.com/upload/picture/pic/126341/d31142b4-5c47-357f-aa09-316265c422ff.jpg[/img] 图1 设置Capture选项

一般读者只需要选择最上边的下拉框,选择合适的Device,而后点击“Capture Filter”,此处选择的是“HTTP TCP port(80)”,选择后点击上图的“Start”开始抓包。
[img]http://dl.iteye.com/upload/picture/pic/126343/38993af2-c7d1-3ddc-ad4e-dfdb1f72e361.jpg[/img]  图2 选择Capture Filter

例如在浏览器中打开http://image.baidu.com/,抓包如图3所示:
[img]http://dl.iteye.com/upload/picture/pic/126345/7b6caa3a-46a8-308a-984b-409a67659db6.jpg[/img] 图3 抓包

  在上图中,可清晰的看到客户端浏览器(ip为192.168.2.33)与服务器的交互过程:
  1)No1:浏览器(192.168.2.33)向服务器(220.181.50.118)发出连接请求。此为TCP三次握手第一步,此时从图中可以看出,为SYN,seq:X (x=0)
  2)No2:服务器(220.181.50.118)回应了浏览器(192.168.2.33)的请求,并要求确认,此时为:SYN,ACK,此时seq:y(y为0),ACK:x+1(为1)。此为三次握手的第二步;
  3)No3:浏览器(192.168.2.33)回应了服务器(220.181.50.118)的确认,连接成功。为:ACK,此时seq:x+1(为1),ACK:y+1(为1)。此为三次握手的第三步;
  4)No4:浏览器(192.168.2.33)发出一个页面HTTP请求;
  5)No5:服务器(220.181.50.118)确认;
  6)No6:服务器(220.181.50.118)发送数据;
  7)No7:客户端浏览器(192.168.2.33)确认;
  8)No14:客户端(192.168.2.33)发出一个图片HTTP请求;
  9)No15:服务器(220.181.50.118)发送状态响应码200 OK
  ……

一、Web缓存
1WEB缓存(cache)位于Web服务器和客户端之间。
  缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。

2与缓存相关的HTTP扩展消息头
Expires:指示响应内容过期的时间,格林威治时间GMT
Cache-Control:更细致的控制缓存的内容
Last-Modified:响应中资源最后一次修改的时间
ETag:响应中资源的校验值,在服务器上某个时段是唯一标识的。
Date:服务器的时间
If-Modified-Since:客户端存取的该资源最后一次修改的时间,同Last-Modified。
If-None-Match:客户端存取的该资源的检验值,同ETag。

3客户端缓存生效的常见流程
服务器收到请求时,会在200OK中回送该资源的Last-Modified和ETag头,客户端将该资源保存在cache中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带If-Modified-Since和If-None-Match两个头。两个头的值分别是响应中Last-Modified和ETag头的值。服务器通过这两个头判断本地资源未发生变化,客户端不需要重新下载,返回304响应。常见流程如下图所示:
[img]http://dl.iteye.com/upload/picture/pic/126347/48406855-65ad-31b8-84eb-1804fccc5eb1.jpg[/img]

4Web缓存机制
  HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。前者减少了网络回路的数量;HTTP利用一个“过期(expiration)”机制来为此目的。后者减少了网络应用的带宽;HTTP用“验证(validation)”机制来为此目的。
  HTTP定义了3种缓存机制:
  1)Freshness:允许一个回应消息可以在源服务器不被重新检查,并且可以由服务器和客户端来控制。例如,Expires回应头给了一个文档不可用的时间。Cache-Control中的max-age标识指明了缓存的最长时间;
  2)Validation:用来检查以一个缓存的回应是否仍然可用。例如,如果一个回应有一个Last-Modified回应头,缓存能够使用If-Modified-Since来判断是否已改变,以便判断根据情况发送请求;
  3)Invalidation: 在另一个请求通过缓存的时候,常常有一个副作用。例如,如果一个URL关联到一个缓存回应,但是其后跟着POST、PUT和DELETE的请求的话,缓存就会过期。


二、断点续传和多线程下载的实现原理
-HTTP协议的GET方法,支持只请求某个资源的某一部分;
-206 Partial Content 部分内容响应;
-Range 请求的资源范围;
-Content-Range 响应的资源范围;
-在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,来实现断点续传。
  分块请求资源实例:
Eg1:Range: bytes=306302-:请求这个资源从306302个字节到末尾的部分;
Eg2:Content-Range: bytes 306302-604047/604048:响应中指示携带的是该资源的第306302-604047的字节,该资源共604048个字节;
  客户端通过并发的请求相同资源的不同片段,来实现对某个资源的并发分块下载。从而达到快速下载的目的。目前流行的FlashGet和迅雷基本都是这个原理。
  多线程下载的原理:
-下载工具开启多个发出HTTP请求的线程;
-每个http请求只请求资源文件的一部分:Content-Range: bytes 20000-40000/47000;
-合并每个线程下载的文件。

三、什么是https

  1)HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。
见下图:
[img]http://dl.iteye.com/upload/picture/pic/126349/6a76fd8e-c22a-3bfe-b684-9d17c12a7e92.jpg[/img]
  https所用的端口号是443。

2)https的实现原理
  有两种基本的加解密算法类型:
  a-对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
  b-非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
下面看一下https的通信过程:
[img]http://dl.iteye.com/upload/picture/pic/126351/b74bbab8-82f1-35dc-989b-ca647af8ebb6.jpg[/img]

  3)https通信的优点:
  a-客户端产生的密钥只有客户端和服务器端能得到;
  b-加密的数据只有客户端和服务器端才能得到明文;
c-客户端到服务端的通信是安全的。


四、http代理
1 http代理服务器
  代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。
  代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。
  而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。
  更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。
2 http代理服务器的主要功能
  主要功能如下:
  1)突破自身IP访问限制,访问国外站点。如:教育网、169网等网络用户可以通过代理访问国外网站;
  2)访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育 网开放的各类FTP下载上传,以及各类资料查询共享等服务;
  3)突破中国电信的IP封锁:中国电信用户有很多网站是被限制访问的,这种限制是人为的,不同Serve对地址的封锁是不同的。所以不能访问时可以换一个国 外的代理服务器试试;
  4)提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度;
  5)隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。
3 http代理图示
  http代理的图示见下图:

请求链 ------------------------------------->
web客服端 ----- 代理服务器 ----- web服务器
< ---------------------------------------响应链

  对于客户端浏览器而言,http代理服务器相当于服务器。
而对于Web服务器而言,http代理服务器又担当了客户端的角色。


五、虚拟主机的实现

1什么是虚拟主机
  虚拟主机:是在网络服务器上划分出一定的磁盘空间供用户放置站点、应用组件等,提供必要的站点功能与数据存放、传输功能。
  所谓虚拟主机,也叫“网站空间”就是把一台运行在互联网上的服务器划分成多个“虚拟”的服务器,每一个虚拟主机都具有独立的域名和完整的Internet服务器(支持WWW、FTP、E-mail等)功能。一台服务器上的不同虚拟主机是各自独立的,并由用户自行管理。但一台服务器主机只能够支持一定数量的虚拟主机,当超过这个数量时,用户将会感到性能急剧下降。
2虚拟主机的实现原理
  虚拟主机是用同一个WEB服务器,为不同域名网站提供服务的技术。Apache、Tomcat等均可通过配置实现这个功能。
相关的HTTP消息头:Host。
例如:Host: www.baidu.com
  客户端发送HTTP请求的时候,会携带Host头,Host头记录的是客户端输入的域名。这样服务器可以根据Host头确认客户要访问的是哪一个域名。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值