zoukankan      html  css  js  c++  java
  • HTTP协议

    首先,了解一下协议。

      协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从web服务器传送到客户端的浏览器。

      

      HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW=world wide web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

        HTTP原理:HTTP是一个无状态的协议。无状态是指客户机(web浏览器)和服务器之间不需要建立持久连接,这意味着当一个客户端向服务器发出请求,然后服务器返回响应(response),连接就被关闭了。HTTP遵循请求(request)/应答(response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。

        传输流程:

          地址解析:如果客户端浏览器请求这个页面:http://loaclhost:8080/index.html  从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:协议名:http 主机名:  localhost.com  端口:8080  对象路径:/index.html  在这一步,需要域名系统DNS解析域名localhost.com,得到主机的IP地址。

          封装HTTP请求数据包:把以上部分结合主机信息,封装成一个HTTP请求数据包。

          封装成TCP包并建立连接:封装成TCP包,建立TCP连接(TCP的三次握手)

          客户机发送请求命令:请求格式:统一资源标识符(URL),协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

          服务器响应:服务器接收到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

          服务器关闭TCP连接:一般情况下,一旦web服务器向浏览器发送了请求数据,她就要关闭TCP连接,然后如果浏览器或服务器在其头信息加入了Connection:keep-alive这行代码,TCP连接在发送后将仍然保持打开状态,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立连接所需的时间,还节约了网络带宽。

      接下来看一下HTTP的各种状态:

      

      

     

      HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP,简单说就是HTTP的安全版。

        因为HTTP协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,为了安全传输敏感数据,即HTTP下加入了SSL层(网络安全层),对所有数据都加密后再进行传输,客户端和服务器端收到加密数据后按照之前约定好的密钥解密。其所用的端口号为443。因此加密的详细内容请看SSL。

        SSL(Secure Socket Layer)安全套接层,及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS和SSL在传输层对网络连接进行加密。

      在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这时就成了我们常说的HTTPS。

      

      OSI参考模型与TCP/IP的对应关系

      

      HTTP默认的端口号为80,HTTPS的端口号为443。

      浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能用。比如我们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他协议)。

      HTTPS通信流程:

        建立连接获取证书:SSL客户端通过TCP和服务去建立连接之后(443端口),并且在一般的TCP连接协商(握手)过程中请求证书。即客户端发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应一个数据包,这里面确定了这次通信所需要的算法,然后服务器向客户端返回证书。(证书里面包含了服务器信息:域名、申请证书的公司、公共密钥)。

        证书验证:客户端在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使用这个机构的公共密钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名。

        数据加密和传输:如果确认证书有效,那么生成对称密钥并使用服务器的公共密钥进行加密。然后发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信。

      HTTPS通信的优点:

        客户端产生的密钥只有客户端和服务端能得到;加密的数据只有客户端和服务端才能得到明文;客户端到服务端的通信是安全的。

      

      

    接下类说一下加密和解密

      加密方式分为对称加密和非对成加密

        对称加密,就是加密和解密都使用同一个密钥,这种方式优点就是速度快,缺点就是在管理和分配密钥时不安全。典型的对称加密算法有DES、AES等。

        

        非对称加密:非对成加密有一个密钥对,叫做公钥和私钥。私钥自己持有,公钥可以公开的发送给使用人。使用公钥进行加密的信息,只有和其配对的私钥可以解开。目前常见的非对成加密算法是RSA,非对成加密的优点是安全,因为它不需要把私钥暴露出去。

        

      那在真正使用的时候,要怎样进行数据的传输?

        在正式的使用场景中一般都是对称加密和非对成加密结合使用,使用非对成加密完成密钥的传递,然后使用对称加密进行数据加密和解密,HTTP传输在建立连接时使用的是非对成加密,一旦连接建立完成,有后续的通讯则使用了对称加密,这样做的好处是有利于数据传输效率。

    HTTP与HTTPS的区别:

      1)HTTP连接简单无状态;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证、报文的完整性的网络协议,比HTTP协议安全。采用混合加密的算法。

      2)HTTPS协议需要申请证书,一般免费证书较少,需要一定费用。

      3)HTTP超文本传输是明文传输,HTTPS是具有SSL加密传输协议的。

      4)HTTP使用80端口,HTTPS使用443端口。

      5)HTTP是客户端浏览器或其他程序与web服务器之间的应用层通信协议。在Internet上的web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。

         HTTPS,是以安全为目标的HTTP通信,简单说就是HTTP的安全版。HTTPS=HTTP+SSL

    HTTP的缺点:

      通信内容为明文,即未加密,内容可能会被窃听。

      通信双方的身份没有进行验证,可能出现伪装身份的情况。

      接受的报文完整性无法确定,可能中途被改动。

    HTTPS在HTTP的基础上增加了:通信加密、证书认证、完整性保护。

  • 相关阅读:
    opengles 2.0 渲染Yuv视频
    wzplayer for android 版本面世
    wzplayer for android V1.0快出炉了
    wzplayer for android V1.0快出炉了
    wzplayer for android V1.0
    opengles 2.0 渲染Yuv视频
    新浪微博发布案例
    前端开发单位em
    vue 做一个简单的TodoList
    jquery对类的操作,添加,删除,点击添加,再点击删除
  • 原文地址:https://www.cnblogs.com/HuiH/p/11753493.html
Copyright © 2011-2022 走看看