协议系列之HTTP协议-阿里云开发者社区

开发者社区> 安全> 正文
登录阅读全文

协议系列之HTTP协议

简介:

什么是HTTP\HTTPS


HTTPHyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议用于从WWWserver传输超文本到本地浏览器的传输协议,它能使浏览器更加高效,使网络传输降低。保证计算机正确高速地传输超文本文档。如今我们普遍使用的版本号是HTTP1.1


HTTP是一个应用层协议,它由请求和响应组成。是一个标准的B/S模型。它也是一个无连接的协议,这里无连接指的是每次连接仅仅处理一个请求,server处理完client请求后便断开连接;同一时候,它也是一个无状态的协议,那么什么是无状态呢?简单地说就是同一个client,这次请求跟上一次请求是没有相应关系的。


HTTPS简单地说就是HTTP的安全版。通常在安全性要求比較高的站点(比如银行站点)会看到HTTPS,它本质事实上也是HTTP协议,仅仅是在HTTP添加了一个TLSSSL协议层。如图2-2-6-1。假设在TCP协议上加一层TLSSSL协议。就是HTTPS协议了。TLS\SSL提供了加密的机制,所以它比HTTP明文传输更安全。图中能够看出,HTTP能够直接进入TCP传输层;也能够在TCP层上加一层TLS\SSL层,这样就先经过TLS\SSL再进入TCP传输层。这两种方式便是HTTPHTTPS

一般HTTP的port为80。而HTTPS的port为443


2-2-6-1 HTTP协议层


 


简单地说。SSL\TLS协议层基本的职责就是借助下层协议的信道安全地协商出一份加密密钥,而且用此密钥来加密HTTP请求响应报文。它攻克了下面三个安全性方面的议题:①提供认证服务,认证本次会话实体身份的合法性。②提供加密服务,强加密机制能保证通信过程中的消息不会被破译。

③提供防篡改服务,利用Hash算法对消息进行签名。通过验证签名保证通信内容不被篡改。


HTTPS运用越来越广泛。并且在安全场景中是一个非常好的解决方式,一般作为解决安全传输的首选解决方式。那么还是有必要略微深入了解一下HTTPS的工作原理及流程。


在理解HTTPS工作原理前,先了解一些加密解密算法与Hash算法:(1)对称加密。

密钥仅仅有一个。加密解密都是这个password,加解密速度快,典型的对称加密算法有DESAESRC4等。(2)非对称加密。密钥成对出现。分别为公钥跟私钥。公钥无法推知私钥。反之私钥也不能推知公钥。

加密解密使用不同密钥,公钥加密须要私钥解密,反之私钥加密须要公钥解密。

非对称加密速度较慢,典型的非对称加密算法有RSADSADSS等。(3Hash算法,这是一种不可逆的算法,我们经常使用于验证数据的完整性。


2-2-6-2具体描写叙述了HTTPS完毕一次通信要做哪些事情。

首先。因为HTTPS是基于TCP/IP通信的,属于可靠传输,那么必需要先进行3次握手,完毕连接建立。接下去的是SSL的握手协议。此协议很有效的让客户和server之间完毕相互之间的身份认证。第一步,client浏览器向server发送SSL\TLS协议的版本、加密算法的种类、产生的随机数、以及其他需要的各种信息。第二步。server从client支持的加密算法中选择一组加密算法与Hash算法,而且把自己的证书(包括站点地址、加密公钥、证书颁发机构等)也发送给client。

第三步。浏览器获取server证书后对其合法性进行验证,颁发机构是否合法。证书中的网址是否与正在訪问的地址一致,通过验证的浏览器会显示一个小锁头,否则提示证书不受信。

第四步,client浏览器生成一串随机数并用server传来的公钥加密,再使用约定好的Hash算法计算握手消息,发送到server端。

第五步,server接到握手消息后用自己的私钥解密,并用Hash算法验证,这样两方都有了此次通信的密钥。第六步,server再使用密钥加密一段握手消息,返回给client浏览器。

第七步,浏览器用密钥解密。并用hash算法验证。确定算法跟密钥。完毕以上七步后两方就能够利用此次协商好的密钥进行通信。


2-2-6-2 HTTPS的工作原理及流程


 


HTTP请求响应模型


从某种意义上来说,HTTP协议永远都是由client发起请求。server进行响应。并发送回响应报文。假设没有client进行请求或以前请求,那么server端是无法将消息推送到client的。http协议採用了请求/响应模型。一个http请求跟响应一般如2-2-6-3所看到的,client向server发送一个请求,请求头包括请求方法、URI、协议版本号、请求修饰符、客户信息、类似于MIME结构的消息内容。server以一个状态行作为响应。内容包括消息协议版本号、成功或失败编码、server信息、实体元信息及一些实体内容。这样就完毕了一个请求响应过程。


2-2-6-3 HTTP请求响应模型


 


通常。把一次http操作称为一个事务。而它的工作流程大概能够用下面四点来概括:


  1. 開始工作。client浏览器先要与server建立连接,即是通过三次握手建立连接。在浏览器上最简单的就是点击一个超级链接,就触发了连接建立。

  2. 连接建立后,client浏览器发送一个请求到server,这个过程事实上是组装请求报文的过程,具体的报文格式与解析会在下节展开。

  3. server端接收到请求报文后,对报文进行解析,组装成一定格式的响应报文,返回给client。

  4. client浏览器接收到响应报文后。对其进行解析,并通过浏览器内核。依照一定的外观进行显示,然后与server断开连接。


解析HTTP报文


上节我们了解了http请求响应模型,那么具体请求与响应报文格式是如何的。报文又是如何被解析的?这节将具体展开讲述。想要深入理解webserver就必须对http报文熟悉,正所谓练拳先练功。要研究tomcatserver就要先对http报文有一定的了解。http报文是面向文本的,报文中每一个字段都是一些ascii码串。它包含请求报文和响应报文。


首先看看http请求报文,一个http请求由三部分组成:请求行、请求头部、请求体。图2-2-6-4具体展示了一个http请求报文的结构与具体的字段意义。

请求行,由请求方法字段、URL字段和http协议版本号字段组成,他们用空格分隔。请求头部。包括若干个属性与属性值,他们通过冒号分隔,格式为“属性名:属性值”,server据此获取client的信息;请求体。一般在POST方法里使用。而不在GET方法中使用。

它将表单中得组件格式化成param1=value1&param2=value2键值对组,即用来存放请求參数数据。但有时也用来存放请求URL


请求方法中GETPOST是最常见的,除此之外还包含DELETEHEADOPTIONSPUTTRACE。当我们点击网页链接或在浏览器输入网址訪问时,就是用了GET方法,请求參数和值附加在URL后面。用问号隔开,如,/index.jsp?

id=10000,用GET方法传递的參数都能在地址栏上看到,大多浏览器对地址的字符长度做了限制。一般最多是1024个字符。所以,要传送大量数据的话,要选择用POST方法。POST方法同意client提交很多其他信息给server。它把请求參数封装到请求体中,能够传输大量数据,不会对数据大小进行限制。同一时候也不在地址栏显示參数。

其他方法比較少用。不再展开,可查找相关资料。


请求头部经常使用的典型属性有下面几种:


  1. User-Agent:client请求的浏览器类型,更确切地说是client应用程序的名称,不同版本号、不同厂商的值都可能不同样。

  2. Accept:告诉serverclient可识别的媒体类型列表。这个属性的值能够是一个或多个MIME类型的值。server能够依据这个推断发不发送这个媒体类型。

  3. Host:为server提供client想要訪问的那台机器的因特网主机名和port号。

  4. Cookie:用于传输client的cookie到server,server维护的session就是通过cookie附带的jsessionid值来区分的哪个client关联哪个session的。

    当然,我们还能够通过重写URL的方式将jsessionid附带在URL后面。

  5. Referer:表示这个请求是从哪个URL过来的,能够让server知道client从哪里获得其请求的RUL。假设在A主页点击一个连接进入主页B,浏览器就会在请求中插入一个带有AReferer头部。

  6. Cache-Control:通过这个属性能够对缓存进行控制。它是一个缓存指令,指定了对某个对象的可缓存性有关的缓存特有指令。


 


2-2-6-4 HTTP请求报文


 


接着看HTTP响应报文,跟请求报文一样由三部分组成:响应行、响应头、响应体。如图2-2-6-5,响应行包括协议及版本号、状态码及其描写叙述。

响应头包括了若干个属性与属性值,他们通过冒号分隔。格式为“属性名:属性值”,client能够通过这个获取相关信息。响应体一般存放我们真正须要的文本。


响应状态码由三位数字组成,经常使用的状态码例如以下:


  1. 200 OK:client请求成功。

  2. 400Bad Request:client请求由语法错误。server无法识别。

  3. 401 Unauthorized:请求未经授权。

  4. 403Forbidden:server收到请求,但拒绝提供服务。

  5. 404Not Found:请求资源不存在。

  6. 500Internal Server Error:server发生不可预期的错误。

  7. 503Server Unavailable:server当前不能处理client的请求,一段时间后可能恢复正常。


经常使用的的响应报文头属性:


  1. Cache-Control:server通过该报文头属性告诉client怎样对响应的内容进行缓存,比如值为max-age=600。则表示client对响应内容缓存600秒,在此期间假设client再次訪问该资源,直接从client缓存中获取内容,不再向server获取。

  2. Location:这个属性用于网页重定向,比如server把重定向的地址加入到响应包头的这个属性。这样client浏览器解析报文后就直接又一次跳转到这个地址。

  3. Set-Cookie:利用这个属性server端可对client的cookie进行设置。


2-2-6-5 HTTP响应报文


 


 


HTTP的版本号


HTTP协议最初设计就是为了通过网络来支持client与server之间的事务处理。

HTTP1990年開始使用,最原始的版本号是HTTP0.9。这是一个面向消息的简单协议,简单描写叙述了client与server之间请求与响应的过程,client向server端请求连接,通过握手建立连接后向server发送GET方法訪问,server端将响应结果返回给client。然后断开连接。

HTTP1.1HTTP1.0向下兼容HTTP0.9。是如今使用的HTTP协议的子集。


经过三年的发展,HTTP1.0被提出。它对HTTP0.9进行了非常多改进:添加了请求类型,如HEADPOST等。加入了HTTP版本号号;加入了响应码表示处理的状态;使用MIME的消息标题和消息体格式来描写叙述訪问对象的数据类型和附加在后面的元信息。比如Content-typetext/html表明响应的消息实体是HTML文件,引入MIME后有利于扩大HTTP协议处理数据类型。添加了对代理的支持,HTTP0.9版本号仅仅支持直接连接交互,而HTTP1.0能够通过代理实现间接连接交互。


又经过四年的发展,产生了HTTP1.1

它是在HTTP1.0基础上实现的一次飞跃,主要在性能、安全、数据类型处理等方面进行了改进。提出server端缓冲对象的概念,在降低网络同样类型内容的重复传送、提高訪问速度等方面有非常大的提高。

HTTP1.1採用了永久连接。这样非常好地提高了性能,之前的版本号都是默认响应完就直接关闭连接,下次又要又一次建立连接。

同一时候,它还同意client与server端对内容进行协商。突破HTTP1.0中server和IP一一相应的限制,能够通过主机名来决定由哪个server提供服务。


最后。为了适应WWW的发展须要,HTTP在功能和性能上进行了大量的改进。HTTPPng将是下一代的HTTP协议。在效率跟性能上都将有进一步的提高。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5282095.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: