Java网络编程(四):Http与Https相关总结(雷惊风)

一.概念

      1. Http:Http英文全称为Hypertext Transfer Protocol,及超文本传输协议,它是当今互联网应用最为广泛的一种网络协议。所有的以WWW开头访问的网站都必须遵循这个标准。设计最初目的是为了实现一种发布和接收HTML页面的方法。美国人Ted Nelson于1960年构思了通过计算机处理文本信息的方法,并称为超文本,成为HTTP传输协议发展的基础。Ted Nelson组织万维网协会(WWWC)和互联网工程工作小组(IETF)共同研究,最终发布一系列RFC,目前最著名的就是RFC2616定义的HTTP1.1。它会使浏览器更加高效,使网络传输减少,可以保证计算机正确快速的传输超文本文档。

     2. Https:Https的英文全称为Secure Hypertext Transfer Protocol,及安全超文本传输协议,它是基于HTTP开发的,它会建立一个安全的信息传输通道,用于客户端与服务端进行数据传输。它使用安全套接字层(SSL)作为Http 应用层子层。SSL使用40位关键字作为RC4流加密算法。它更适用于商业信息的加密。HTTPS的SSL支持使用X.509数字认证,并且用户可以知道发送者信息。

二.区别

     1. Http是不安全的,无状态的连接,在1.0版本中每次访问网络获取数据都需要重新建立连接。Https在Http基础上加入了SSL加密,使得Http协议可以建立安全通信通道,对传输的数据进行加密,同时可以验证自己当前访问的网络是否是真正的目的网络服务器。所以Https比Http更为安全。

     2. 由于Https需要用到CA证书来验证身份信息,而获取CA证书需要到专门颁发CA证书的机构进行申请,所以,Https会产生一部分CA证书获取费用成本。

     3. Http默认使用80端口,而Https则默认使用443端口。

三.实现原理

Http:

当我们访问一个网址的时候,如http://ocalhost:8097/lyl/index.html

      1. 系统会将URL进行分解,分解为协议、主机名、端口、路径等。例如上边的地址:

         协议部分:http

         主机名:localhost

         端口:8097。

         路径:/lyl/index.html

#这里如果主机名部分是非IP地址的话,需要DNS域名解析系统将主机名解析成对应的IP地址。

      2. 封装Http 数据包,一个请求有四部分组成:请求行、请求头、空行、请求数据。请求行有三个部分(请求方法,请求URI与当前Http版本,用空格分割,如: GET /lyl/index.html HTTP/1.1),请求头是由多组Key/Value键值对组成,每行一组,这些键值对用来告诉服务器关于客户端的一些功能与标示,请求头Key有很多例如:

      User-Agent客户端厂家和版本;

      Accept:客户端可识别的内容类型列表;

      Content-Length:附加到请求的数据字节数。

      ......

空行:通知服务器下边部分不再是请求头内容。请求数据:只有  当请求方式为post时才有值(请求参数),如果请求方式为get,请求参数会添加到请求资源路径的后面。

     3. 建立TCP连接,在Http开始传递数据之前,必须先于服务端建立连接,而建立连接需要客户端与服务端进行3次TCP握手:

         ①客户端向服务器发送建立连接请求,其中报文中SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x;

         ②服务器收到请求后,会回发连接确认数据包。其中SYN=1,ACK=1,表示这是一个TCP连接相应数据报文。并含有服务端的初始序列号seq=y,以及服务端对刻画端A初始序列号的确认号ack=x+1.

         ③客户端收到服务端的确认连接报文后,再次作出确认,发送一个序列号seq=x+1,确认号ack=y+1的报文。

     4. 客户端发送请求命令。客户端与服务端建立连接后,客户端会发送一个请求给服务端,请求方式的格式为:统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和内容。

     5. 服务端接收到请求后,回复相应的响应。格式为一个状态行,包含协议版本号、一个成功或错误编码,状态行后边是MIME信息包括服务器信息、实体信息和内容。实体信息就是服务端向客户端发送头信息后会发送一个空白行来表示头信息的发送到此结束。然后以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

     6. 服务端关闭TCP连接。如果客户端或者服务端没有添加Conention:keep-alive,那么服务端向客户端发送了数据,服务端会马上关闭TCP连接,反之,TCP连接在发送信息后仍然保持打开状态,以便客户端与服务端能够通过相同的连接发送请求。这样节省了为每次请求建立连接的时间,同时节约了带宽。

Https:

     ① SSL客户端通过TCP和服务器建立连接之后(443端口),并且在一般的tcp连接协商(握手)过程中请求证书。

即客户端发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应一个数据包,这里面确定了这次通信所需要的算法,然后服务器向客户端返回证书。(证书里面包含了服务器信息:域名。申请证书的公司,公共秘钥)。                 
    ② Client在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使用这个机构的公共秘钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名。

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

四.Https对比Http优缺点

优点:

     1. Https 可以对客户端与服务器进行认证,确保数据发送到的是正确的目的地址。

     2. 因为Https在传输数据是建立了一个安全的数据传输通道,所以可以提高数据的安全(只是提高,并非绝对安全),有效的防止了除客户端服务端以外的其他单位、个人等等监听、窃取、修改数据。

     3. Https是目前最为安全的网络访问传输协议,但非绝对安全,但是提高了破解成本。

     4. 2014年8月份谷歌调整了其相关引擎算法,采用Https的网站在搜索结果中会比Http的搜索排名更靠前。

缺点:

    1. 由于Https是需要CA证书认证的,还有加密解密,所以对比Http来说,它是既费时又费电的,大概增加50%耗时,10%~20%耗电。

    2. Https连接缓存不如Http高效,会增加数据开销与功耗,很可能影响已有的安全措施。

    3. 由于Https需要CA证书认证,而获取CA需要到专门机构,所以会需要一些费用。有些人认为SSL证书很贵,其实我们在网上搜一下,也会搜到很多便宜的SSL证书,大概10美元一年,还有一些免费的证书,当然,免费的会比收费的差一点。但是几乎所有的主流浏览器都接收这些证书。

    4. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

    5. HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

猜你喜欢

转载自blog.csdn.net/liuyonglei1314/article/details/80702105