JavaWeb开发一 通信协议

一. HTTP协议

1. HTTP介绍

    HTTP协议是Hyper Text Transfer Protocol (超文本传输协议)  

    作用: 根据这个协议把超文本(除了文字还有图片, 连接, 甚至音乐视频的文本 也就是网页)从万维网服务器传输到本地,

    HTTP是在TCP/IP协议通信协议的基础上来传数据的, 这里的数据指HTMl文件, 图片文件, 查询结果等, 不涉及数据包(packet)传输.

    HTTP协议主要规定了客户端和服务器之间的通信格式, 默认使用80端口

2. HTTP解析

    内容:

JavaWeb开发一 通信协议_第1张图片

①. HTTP特点

    简单快速, 灵活, 无连接, 无状态

  简单快速: 用户要什么资源,就向服务器请求什么资源, 用户只要传请求方法路径就可以了, 因为简单所以快速

  灵活:    HTTP允许传任何类型的数据对象

  无连接: 每次连接只处理一个请求, 处理完客户的请求, 收到客户的应答后, 就断开连接. 这样可以节省传输时间

  无状态:  HTTP协议是无状态的, HTTP协议自身不会保存请求和响应之间的通信状态, 任何两次请求之间都没有依赖关系,每个请求都是独立的.

得益于上面优点, HTTP可以更快地处理大量事务, 而且确保了协议的可伸缩性

②. HTTP报文

    HTTP报文:    请求报文, 响应报文

   请求报文组成部分: 请求行(request line), 请求头(header), 空行, 请求体

   响应报文组成部分: 状态行, 响应头部, 空行, 响应体

 请求报文:

  JavaWeb开发一 通信协议_第2张图片

     请求报文:

           1. 请求行

                  说明请求类型, 要访问的资源以及所使用的HTTP版本     (请求类型+url+HTTP版本)

                  POST  /chapter1/user.html HTTP/1.1

                 以上代码中POST代表请求方法, /chapter1/user.html 表示url   HTTP/1.1 是协议和协议版本

         2. 请求头

                由关键字/值组成, 每行一对, 关键字和值用英文冒号:分隔

                内容: 客户端请求的信息, 包含许多有关客户端环境和请求正文的有用信息

                             Host: 表示主机, 虚拟主机

                             Connection:  HTTP/1.1 增加的, 使用keepalive, 即持久连接, 一个连接可以发多个请求

                             User-Agent:  请求发送者, 兼容性以及定制化需求

       3. 空行

             最后一个请求头之后是一个空行,表示请求头已经结束, 接下来的是请求正文

       4. 请求体

             可以承载多个请求参数的数据

③HTTP请求方式

  1. GET  请求指定的页面信息, 并返回实体主体
  2. HEAD  类似于get请求, 只不过返回的响应中没有具体的内容,用于获取报头
  3. POST  向指定资源提交数据进行处理请求(例如提交表单或者上传文件).数据被包含在请求体中
  4. PUT  从客户端向服务端传送的数据取代指定的文档的内容
  5. DELETE  请求服务器删除指定的页面

  GET与POST的区别

  • GET在浏览器回退时是无害的, 而POST会再次提交请求
  • GET请求会被浏览器主动缓存, 而POST不会, 除非手动设置
  • GET请求参数会被完整保留在浏览器历史记录里, 而POST中的参数不会被保留
  • GET请求在URL中传送的参数是有长度限制的, 而POST没有限制
  • GET参数通过URL传递, POST放在Requestbody中

④HTTP状态码

  状态码由3位数字组成, 第一个数字定义了响应的类别

      1xx:  指示信息--表示请求已接收, 继续处理

      2xx:  成功--表示请求已被成功接收, 理解, 接受

      3xx:  重定向--要完成请求必须进行跟进一步的操作

      4xx:  客户端错误--请求有语法错误或请求无法实现

      5xx:  服务端错误--服务器未能实现合法的请求

⑤持久连接

    HTTP协议的初始版本中, 每进行一次HTTP通信就要断开一次TCP连接.以前都是传输容量很小的文本, 而现在随着HTTP的普及,文档包含了大量图片.如果使用浏览器访问一个包含多张图片的HTML页面时, 在发送请求访问HTML页面资源的同时, 也会请求该HTML页面里包含的其他资源. 每次的请求都会造成无谓的TCP连接建立和断开, 增加通信量的开销.

JavaWeb开发一 通信协议_第3张图片

解决上诉TCP连接问题,的方法便是HTTP/1.1持久连接(HTTP Persistent Connections)

持久连接的特点是: 只要任意一端没有明确提出断开连接, 则保持TCP连接状态

JavaWeb开发一 通信协议_第4张图片

持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销, 减轻了服务器的负载. 另外, 减少开销的那部分时间,使HTTP请求和响应能更早结束. 这样Web页面显示速度也就相应的提高了.

在HTTP/1.1中所有连接都是默认持久连接

⑥管线化

  持久连接使得多数请求以管线化方式发送成为可能. 以前发送请求后需等待并受到响应, 才能发送下一个请求. 管线化技术出现后, 不用等待也可以发送下一个请求.

  这样就能够做到同时并行发送多个请求, 而不需要一个接一个等待响应了. 通俗地讲, 请求打包一次传输过去, 响应打包一次传递回来. 管线化的前提是持久连接.

JavaWeb开发一 通信协议_第5张图片

比较:

  未使用持久连接:   

        建立TCP连接->HTTP请求1->HTTP响应1->断开TCP连接->建立TCP连接->HTTP请求2->HTTP响应2->断开TCP连接

  使用持久连接未使用管线化:

        建立TCP连接->HTTP请求1-HTTP响应1->HTTP请求2->HTTP响应2->断开TCP连接

  使用持久连接和管线化:

       建立TCP连接->HTTP请求1->HTTP请求2->HTTP响应1->HTTP响应2->断开TCP连接

二. HTTPS协议

1. HTTP的不足

  • 通信使用明文(不加密), 可能会被窃听
  • 不验证通信方的身份, 因此有可能遭遇伪装
  • 无法证明报文的完整性, 所以报文有可能会遭到篡改

2. 什么是HTTPS协议

  添加了加密和认证机制的HTTP就是HTTPS.使用HTTPS通信的网站在浏览器上网址左边有一个锁?符号.

3. HTTPS和HTTP的比较

JavaWeb开发一 通信协议_第6张图片

可见, HTTPS并非是应用层的一种新协议. 只是HTTP通信接口部分使用了SSL(Secure Socket Layer, 安全套接层) 或TLS(Transport Layer Security)协议替代而已.

采用SSL后, HTTP就拥有了HTTPS的加密, 证书和完整性保护这些功能. 需要注意的是: SSL是独立于HTTP协议的.

4. HTTPS通信过程中的加密技术

  加密技术是HTTPS组成的重要技术. 常见加密技术有: 共享密钥加密和公开密钥加密

①共享密钥加密(对称密钥加密)

  共享密钥加密又叫对称密钥加密, 加密和解密使用同一个密钥.加密算法是公开的, 密钥保密, 加密和解密都要用到密钥.

JavaWeb开发一 通信协议_第7张图片

5个常用对称加密算法: DES, DESede, AES, IDEA, PBE

②公开密钥加密(非对称密钥加密)

  公开密钥加密使用一对非对称密钥: 私有密钥(private key) 和 公有密钥(public key).

  私有密钥在自己手里, 共有密钥可以随意发布.

 例: A有公钥密钥    B有公钥密钥

 B要发信息给A, A把A公钥给B, B用A公钥加密, 密文需要A密钥解密, A收到后用A密钥解密

HTTPS采用混合加密机制

   混合加密机制能够将两种加密方式各自的优势结合起来,即保证了通信过程中的安全性,又保证了通信过程的效率。通常,在交换密钥环节使用非对称密钥加密方式,之后的建立通信交换报文阶段则使用对称密钥加密方式。

   但是这样仍然有个问题就是:这个public key是否就是真正的public key,有不有可能在传输过程中被攻击者替换了.于是为了解决这个问题,出现了第三方机构--数字证书认证机构(CA, Certificate Authority).它站在客户端与服务器都可信赖的立场上,为服务器端颁发证明“这个公开密钥确实时那个服务器的”公开密钥证书,同时对该公开密钥进行数字签名。客户端在在收到服务器公钥时会对公钥上的数字签名进行验证,如果验证通过,客户端便可明确两件事:一,认证服务器的公开密钥的是真实有效的数字证书认证机构。二,服务器的公开密钥是值得信赖的。

JavaWeb开发一 通信协议_第8张图片
5. 客户端证书

HTTPS 中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用跟服务器证书如出一辙。
在PC端首次登陆支付宝、网上银行等网页时,其是不是让你安装一些东西?没错,这些“东西”就是支付宝、银联等提供的客户端证书。通过客户端证书,服务器就能知道它正在响应的“确实是那个客户端”,这样就保证了双方通信的安全性。

 

 

 

你可能感兴趣的:(JavaWeb)