欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP、HTTPS、HTTP1.0、HTTP1.1傻傻搞不清

程序员文章站 2022-05-31 23:27:04
...
       HTTP:Hyper Text Transfer Protocol,超文本传输协议
       HTTPS:Hyper Text Transfer over Secure Socket Layer Protocol,给予安全套接字层的超文本传输协议
       HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
       综上,可以简单的理解为HTTPS = HTTP+加密+认证+完整性保护(完整性保护不知道从哪里看出来的,有待进一步理解)


       对于HTTP是无状态的,短连接、持久连接也蒙的,查资料得到下面的解释:
       1、HTTP是一种无状态(stateless)协议
       是说HTTP协议自身不对请求和响应之间的通讯状态进行保存,不保存之前一切请求和响应的报文信息,是为了更快的处理大量事务。
       但是随着web发展,很多情况都需要保存用户的状态。比如用户登录到一家购物网站,即使他跳转到该网站的其他页面后,也需要能继续保持登录状态。因此http1.1协议引入了Cookie技术,http1.1虽然仍是无状态的,但是通过Cookie实现了保持状态的功能。
       Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去,服务器端发现客户端发送过来的Cookie后,会去检查究竟是哪个客户端发送来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
       2、HTTP非持久连接、持久连接
       HTTP协议的初始版本中,每进行一次HTTP通讯就要断开一次TCP连接,下次通讯重新建立连接(非持久连接)。随着网络发展,同一个页面存在多个对象,在非持久连接下申请一个页面就需要大量的TCP连接和断开,增加网络传输负担,可能页面加载很慢。
       为了解决上述问题,HTTP1.1想出了持久连接(keep-alive或HTTP Persistent Connections)的方法,所谓持久连接,就是服务器在发送响应后并不关闭TCP连接,在一段时间内扔保持这个连接,这样在一次连接中就可以有多次数据请求和响应。


       由上面描述基本清楚了HTTP1.0和HTTP1.1的区别与联系:
       他们是HTTP协议的不同版本;
       HTTP1.0使用非持久连接,HTTP1.1实现持久连接;
       HTTP1.1还允许客户端不用等待上一次请求结果返回就可以发出下一次请求,服务器端必须按照接收到的客户端请求的先后顺序依次返回响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。
       HTTP1.0认为每台服务器都绑定一个唯一的IP地址,请求消息中的URL并没有传递主机名。随着虚拟主机技术的发展,一台物理服务器可以存在多个虚拟主机,他们共享一个IP地址HTTP1.1中增加了host请求头字段,实现了在一台web服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP1.1的请求消息中如果没有Host头域会报400错误。
       HTTP1.1还提供了身份认证、状态管理和Cache缓存等机制


       下面是HTTP协议版本:
版本 产生时间 内容 发展现状
HTTP/0.9 1991年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 没有作为正式的标准
HTTP/1.0 1996年 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 正式作为标准
HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛
HTTP/2.0 2015年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场




       HTTP请求报文格式:分为请求行、请求头、请求包体
       请求行:请求方法(空格)URL(空格)协议版本
       请求头:头字段名称:值
                      头字段名称:值
                      ......
       请求包体:

       HTTP响应报文格式:由状态行、响应头部、响应包体组成
       状态行:协议版本(空格)状态码(空格)状态码描述
       响应头部:头字段名称:值
                         头字段名称:值
                         .......
       响应包体:

       状态码由三位数字组成,第一位表示响应的类型,常用状态码有如下五大类:
       1xx:表示服务器已经接收了客户端请求,客户端可以继续发送请求;
       2xx:表示服务器已经成功接收到请求并进行处理;
       3xx:表示服务器要求客户端重定向;
       4xx:表示客户端的请求有非法内容;
       5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
       常用状态码描述:
       200:请求成功
       301:
       302:能自动的向新的 URI 发送重复请求,必须跟用户确认是否该重发
       303:
       400:客户端请求有语法错误,服务器无法处理
       401:表示请求未经授权,该状态码必须与WWW-Anthenticate报头域一起使用
       403:服务器收到请求,但拒绝提供服务,通常会在响应正文给出不提供服务的原因,例如无权访问请求的文件
       404:请求资源不存在
       500:服务器发生不可预知的错误,无法完成客户端请求
       501:服务器不支持请求的方法
       503:服务器当前不可用,过段时间可能会回复正常
       505:服务器不支持HTTP的版本     



       TCP和UDP的区别:
       TCP是传输控制协议,提供的是面向连接的,可靠地字节流服务。实际数据传输之前服务器和客户端要进行三次握手,会话结束后结束连接。
       UDP是用户数据报协议,是无连接的。因为无连接,而且没有超时重发机制,所以UDP传输速度很快。主要用于视频传输(但其实现在各大视频商都是用HTTP协议,而HTTP是基于TCP),实时视频。
      TCP保证数据按序到达,提供流量控制和拥塞控制,在网络拥堵的时候会减慢发送字节数,是可靠的,而UDP不管网络是否拥堵,不可靠。
      TCP是连接的,所以服务是一对一服务,而UDP可以1对1,也可以1对多(多播),也可以多对多。
相关标签: 网络协议