Java教程

java复习网络重点协议 —— 应用层

本文主要是介绍java复习网络重点协议 —— 应用层,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

应用层

在这里插入图片描述
应用层的作用: 为用户的应用进程提供网络通信服务的
应用层的协议: HTTP协议

HTTP协议

http协议是干嘛的?
HTTP: 超文本传输协议,规定了浏览器和万维网服务器之间互相通信的规则。是一种应用层协议,工作在TCP之上。
HTTP就是一个通信规则,通信规则规定了客户端给服务的发送的内容格式,也规定了服务器给客户端的内容格式。
客户端发送给服务端称为请求协议 服务端发送给客户端称为响应协议
它是通过请求和响应交换达成的通信的
无状态是一种不保存状态的协议
无连接 每次连接就只处理一个请求处理完就断开
支持服务器/客户端模式
简单快速

工作流程:

  1. 浏览器分析URL
  2. 浏览器向DNS请求解析IP地址
  3. DNS解析出了IP地址
  4. 浏览器与服务器建立TCP连接
  5. 浏览器发送HTTP请求:GET/chn/index.htm
  6. 服务器通过HTTP相应吧文件相应文件index.htm发送给浏览器
  7. 释放TCP连接
  8. 浏览器解析index.htm文件。并把web页显示给用户

HTTP的请求报文首部

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首行: 方法 URL 版本

HTTP的相应

在这里插入图片描述
在这里插入图片描述

HTTP常用的方法:

在这里插入图片描述
get一般用于获取/查询资源信息,是对应增删查改中的查只是单纯的获取资源
post一般用于更新资源信息,语义上是对应的增需要提交信息到服务器

GET方法和POST方法的区别?

  1. GET方法不携带请求体 POST方法要携带请求体
  2. GET方法对数据的长度有限制 必须在1K之内 POSt对数据的大小没有限制
  3. GET只允许ACSII字符,POST方法对字符要求是无限制的
  4. GET方法的安全性能较差 因为发送的数据是URL的一部分 POST安全性能好,请求数据可以放到请求正文里
  5. GET请求数据会显示在URL中,对所有人都是可见的 ,POST请求数据不会显示在URL中

PUT和POST方法的区别?

  1. PUT请求: 如果两个请求相同,第二个会把第一个请求覆盖掉;(用PUT来改资源)
  2. POST请求:如果两个请求相同,第二个不会吧第一个覆盖掉(用POST来增资源)
  3. PUT和POST方法都有更改指定URL的语义,POST如果多次执行产生的效果是一样的

HTTP常见的状态吗

在这里插入图片描述

HTTP和HTTPS

HTTP协议运行在TCP上的,使用明文传输。客户端和服务端无法验证对方的身份
HTTPS是身批SSL外壳的HTTP,运行在SSL上,SSL运行与TCP上,是添加了加密和认证机制的HTTP
1HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并在正确配置时被认为是安全的。
2,HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
3,HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。

HTTPs访问流程

在这里插入图片描述
(1)客户使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。

从上面可以总结出HTTPS的优点

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

HTTPS的缺点

  1. HTTPS要比HTTP消耗更多的服务器资源
  2. 访问不如HTTP高效
  3. HTTPS并不能防止站点被网络蜘蛛抓取。在某些情形中,被加密资源的URL可仅通过截获请求和响应的大小推得,这就可使攻击者同时知道明文(公开的静态内容)和密文(被加密过的明文),从而使选择密文攻击成为可能。
  4. SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用
  5. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

HTTP和HTTPS的区别

  1. HTTP是以http 开头的Https是以https开头的
  2. http是不安全的是明文传输的 https是安全的具有安全性的SSL加密传输
  3. http标准端口是80 https的标准端口是443
  4. 在OSI模型中 HTTP是工作在应用层 HTTPS工作与传输层
  5. http是不需要加密也不需要证书 https是需要加密也需要证书的

HTTP1.0和HTTP1.1的区别

  1. 长连接 HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
  2. Host头处理在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  3. 错误通知的管理 在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  4. 节约带宽 HTTP1.0中存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能。HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,客户端接收到100才开始把请求body发送到服务器;如果返回401,客户端就可以不用发送请求body了节约了带宽。
  5. 缓存处理 在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

2 HTTP1.1和HTTP2.0的区别

1 多路复用 HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

在这里插入图片描述
2头部数据压缩 在HTTP1.1中,HTTP请求和响应都是由状态行、请求/响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件,但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent、Cookie这类不会频繁变动的内容,完全是一种浪费。
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快
3 服务器推送 服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。
为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
在这里插入图片描述

这篇关于java复习网络重点协议 —— 应用层的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!