链接https和http使用的区别(一文帮你掌握HTTP1.0)
链接https和http使用的区别(一文帮你掌握HTTP1.0)第二步获取到了ip,此时直接通过ip寻址找到ip对应的服务器,然后通过arp协议找到服务器的mac地址。三. 通过ip寻址和arp,找到目标(服务器)地址。当我们在浏览器中输入一个地址,按下回车后,浏览器获取到的是一个字符串。浏览器此时要对这个地址进行解析,获取协议,主机,端口,路径等信息。二. 将解析出的域名进行dns解析。第一步地址解析中我们已经获取到服务器的域名。此时就需要将域名换成对应的ip地址,这就是dns解析。dns解析分为以下几个步骤:
一. 什么是HTTP协议超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快
2.1 简单来说
- 浏览器(客户端)进行地址解析。
- 将解析出的域名进行dns解析。
- 通过ip寻址和arp,找到目标(服务器)地址。
- 进行tcp三次握手,建立tcp连接。
- 浏览器发送数据,等待服务器响应。
- 服务器处理请求,并对请求做出响应。
- 浏览器收到服务器响应,得到html代码。
- 渲染页面。
通过以上这些步骤,就完成了一次完整的http请求
2.2. 深入来说
一. 浏览器(客户端)进行了地址解析
当我们在浏览器中输入一个地址,按下回车后,浏览器获取到的是一个字符串。浏览器此时要对这个地址进行解析,获取协议,主机,端口,路径等信息。
二. 将解析出的域名进行dns解析。
第一步地址解析中我们已经获取到服务器的域名。此时就需要将域名换成对应的ip地址,这就是dns解析。dns解析分为以下几个步骤:
- 先查看浏览器dns缓存中是否有域名对应的ip。
- 如果没有,则产看操作系统dns缓存中是否有对应的ip(例如windows的hosts文件)。
- 依旧没有就对本地区的dns服务器发起请求,
- 如果还是没有,就直接到Root Server域名服务器请求解析。
三. 通过ip寻址和arp,找到目标(服务器)地址。
第二步获取到了ip,此时直接通过ip寻址找到ip对应的服务器,然后通过arp协议找到服务器的mac地址。
四. 进行tcp三次握手,建立tcp连接。
进行三次握手:
1. 客户端向服务端发送连接请求,
2. 服务端回应客户端:ok,已经确认,
3,客户端回应服务端,收到你的确认信息。浏览器对于服务器的请求,浏览器会将我们对于服务器的请求封装成请求头和请求体。
五. 浏览器发送数据,等待服务器响应。
第四步已经建立了连接,此时就要发送数据了。浏览器会对请求进行包装,包装成请求报文。请求报文的格式如下:
起始行:如 GET / HTTP/1.0 (请求的方法 请求的URL 请求所使用的协议)
头部信息:User-Agent Host等成对出现的值
主体
请求头部和主体之间有一个回车换行。如果是get请求,则没有主体部分,post请求有主体部分。当然里面还有些请求头部比较重要
六. 服务器处理请求,并对请求做出响应。
浏览器请求报文到达服务器之后,服务器接口会对请求报文进行处理,执行接口对应的代码,处理完成后响应客户端。由于http是无状态的,正常情况下,客户端收到响应后就会直接断开连接,然后一次http请求就完成了。但是http1.0有一个keep-alive的请求字段,可以在一定时间内不断开连接(有时时间甚至很长)。http1.1直接就默认开启了keep-alive选项。这导致了一个后果是服务器已经处理完了请求,但是客户端不会主动断开连接,这就导致服务器资源一直被占用。这时服务器就不得不自己主动断开连接,而主动断开连接的一方会出现TIME_WAIT,占用连接池,这就是产生SYN Flood攻击的原因。
此时有三种处理方式,第一是客户端主动断开连接,第二是服务器主动断开连接,第三是对tcp连接进行设置。第一种情况,如果服务器返回的数据都有确定的content-length属性,或者客户端知道服务器返回的内容终止,则客户端主动断开连接。第二种情况,服务器可以通过设置一个最大超时时间,可以主动断开tcp连接。第三种情况,调整t三个tcp参数,第一个是:tcp_synack_retries 可以用他来减少重试次数;第二个是:tcp_max_syn_backlog,可以增大syn连接数;第三个是:tcp_abort_on_overflow 处理不过来干脆就直接拒绝连接了。
四次挥手:
1.客户端发送关闭连接请求,
2.服务端回复:收到请求,准备关闭,
3.服务端发送关闭申请:我要断开了,
4.客户端:收到,确认!
七. 浏览器收到服务器响应,得到html代码。
浏览器发出请求时,请求报文如下:
你需要关注一个报文头--accept。accept代表发送端(客户端)希望接受的数据类型,这是浏览器自动封装的请求头。如果服务器返回的content-type是accept中的任何一个,浏览器都能解析,并直接展示在网页上。如果服务器返回的content-type是其他类型,此时浏览器有三种处理状态:
- 正常显示。例如返回类型为text/javascript,浏览器能直接处理并展示。
- 下载。例如返回类型为application/octet-stream(二进制流,不知道下载文件类型),这种浏览器不能直接处理的,会被下载。
- 报错。当我们返回一个字符串hello world,却使用text/xml,格式时,浏览器不能正确解析,就会报错,并把报错信息呈现在网页中。
八. 渲染页面。
获取到服务器相应之后,浏览器会根据相应的content-type字段对相应字符串进行解析。能够解析并成功解析就显示,能够解析但解析错误就报错,不能解析就下载。由于浏览器采用至上而下的方式解析,所以会先解析html,直到遇到外部样式和外部脚本。这时会阻塞浏览器的解析,外部样式和外部脚本(在没有async、defer属性下)会并行加载,但是外部样式会阻塞外部脚本的执行,dom加载完毕,js脚本执行成功后dom树构建完成(DOMContentLoaded),之后就加载dom中引用的图片等静态资源。
在外部样式执行完毕后,css附着于DOM,创建了一个渲染树(渲染树是一些被渲染对象的集)。每个渲染对象都包含了与之对应的计算过样式的DOM对象,对于每个渲染元素来说,位置都经过计算,所以这里被叫做“布局”。然后将“布局”显示在浏览器窗口,称之为“绘制”。
最后页面加载完成,页面load。
三. HTTP请求和响应详解客户端请求消息
客户端请求消息客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
下图给出了请求报文的一般格式
- 请求行:请求报文的第一行,用来说明以什么方式请求、请求的地址和HTTP版本
- 头部字段:每个头部字段都包含一个名字和值,二者之间采用“:”连接,如:Connection:Keep-Alive
- 请求数据:请求的主体根据不同的请求方式请求主体不同
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文
- 状态行:由HTTP版本、响应状态码、响应状态描述;如:HTTP/1.1 200 OK
- 响应报文头部:使用关键字和值表示,二者使用“:”隔开;如:Content-Type:text/html
- 响应内容:请求空行之后就是请求内容
- HTTP/0.9:1991年发布,极其简单,只有一个get命令
- HTTP/1.0:1996年5月发布,增加了大量内容
- HTTP/1.1:1997年1月发布,进一步完善HTTP协议,是目前最流行的版本
- SPDY :2009年谷歌发布SPDY协议,主要解决HTTP/1.1效率不高的问题
- HTTP/2 :2015年借鉴SPDY的HTTP/2发布
- 缓存处理:HTTP/1.0 使用 Pragma:no-cache Last-Modified/If-Modified-Since来作为缓存判断的标准;HTTP/1.1 引入了更多的缓存控制策略:Cache-Control、Etag/If-None-Match等
- 错误状态管理:HTTP/1.1新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 范围请求:HTTP/1.1在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接,支持断点续传
- Host头:HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。有了Host字段,就可以将请求发往同一台服务器上的不同网站,为虚拟主机的兴起打下了基础
- 持久连接:HTTP/1.1 最大的变化就是引入了持久连接(persistent connection),在HTTP/1.1中默认开启 Connection: keep-alive,即TCP连接默认不关闭,可以被多个请求复用
客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接
- 管道机制:HTTP/1.1中引入了管道机制(pipelining) 即在同一个TCP连接中,客户端可以同时发送多个请求
HTTP/1.1 的持久连接和管道机制允许复用TCP连接,在一个TCP连接中,也可以同时发送多个请求,但是所有的数据通信都是按次序完成的,服务器只有处理完一个回应,才会处理下一个回应。比如客户端需要A、B两个资源,管道机制允许浏览器同时发出A请求和B请求,但服务器还是按照顺序,先回应A请求,完成后再回应B请求,这样如果前面的回应特别慢,后面就会有很多请求排队等着,这称为"队头阻塞(Head-of-line blocking)"
七. HTTP/2HTTP/2以Google发布的SPDY协议为基础,于2015年发布。它不叫HTTP/2.0,因为标准委员会不打算再发布子版本了,下一个新版本将是HTTP/3。HTTP/2协议只在HTTPS环境下才有效,升级到HTTP/2,必须先启用HTTPS。HTTP/2解决了HTTP/1.1的性能问题,主要特点如下:
- 二进制分帧:HTTP/1.1的头信息是文本(ASCII编码),数据体可以是文本,也可以是二进制;HTTP/2 头信息和数据体都是二进制,统称为“帧”:头信息帧和数据帧;
- 多路复用(双工通信):通过单一的 HTTP/2 连接发起多重的请求-相应消息,即在一个连接里,客户端和浏览器都可以同时发送多个请求和响应,而不用按照顺序一一对应,这样避免了“队头堵塞”。HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。并行地在同一个 TCP 连接上双向交换消息。
- 数据流:因为 HTTP/2 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM帧),取消这个数据流。HTTP/1.1取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其它请求使用。客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。
- 首部压缩:HTTP 协议不带有状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息压缩后再发送(SPDY 使用的是通用的DEFLATE 算法,而 HTTP/2 则使用了专门为手部压缩而设计的 HPACK 算法)。;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
- 服务端推送:HTTP/2 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送(server push)。常见场景是客户端请求一个网页,这个网页里面包含很多静态资源。正常情况下,客户端必须收到网页后,解析HTML源码,发现有静态资源,再发出静态资源请求。其实,服务器可以预期到客户端请求网页后,很可能会再请求静态资源,所以就主动把这些静态资源随着网页一起发给客户端了。
HTTPS可以说是安全版的HTTP,HTTPS基于安全SSL/TLS(安全套接层Secure Sockets Layer/安全传输层Transport Layer Security)层,即在传统的HTTP和TCP之间加了一层用于加密解密的SSL/TLS层。HTTP默认使用80端口,HTTPS默认使用443端口。
不使用SSL/TLS的HTTP通信,所有信息明文传播,会带来三大风险:
窃听风险:第三方可以获取通信内容;
篡改风险:第三方可以修改通信内容;
冒充风险:第三方可以冒充它人进行通信。
SSL/TLS协议是为了解决这三大风险而设计的,以期达到:
信息加密传输:第三方无法窃听;
校验机制:一旦被篡改,通信双方会立刻发现;
身份证书:防止身份被冒充。
SSL/TLS发展
SSL/1.0:1994年NetScape公司设计,未发布;SSL/2.0:1995年NetScape公司发布,但存在严重漏洞;SSL/3.0:1996年NetScape公司发布,得到大规模应用;TLS/1.0:1999年互联网标准化组织(ISOC)接替NetScape公司,发布SSL的升级版TLS/1.0;TLS/1.1:2006年发布;TLS/1.2:2008年发布;TLS/1.2修订版:2011年发布。目前,应用最广泛的是 TLS/1.0 和 SSL/3.0,且主流浏览器已实现 TLS/1.2的支持。
SSL/TLS运行机制
SSL/TLS的基本思路是公钥加密法:客户端先向服务器索要并验证公钥,然后用公钥加密传输来协商生成“对话秘钥”(非对称加密),双方采用“对话秘钥”进行加密通信(对称加密)。
通信过程如下:
- 客户端发出请求:给出支持的协议版本、支持的加密方法(如RSA公钥加密)以及一个客户端生成的随机数(Client random);
- 服务端回应:确认双方通信的协议版本、加密方法,并给出服务器证书以及一个服务器生成的随机数(Server random);
- 客户端回应:客户端确认证书有效,取出证书中的公钥,然后生成一个新的随机数(Premaster secret),使用公钥加密这个随机数,发送给服务端;
- 服务端回应:服务端使用自己的私钥解密客户端发来的随机数(Premaster secret),客户端和服务端根据约定的加密方法,使用三个随机数,生成“对话秘钥”;
- 会话通信:客户端和服务端使用“对话秘钥”加密通信,这个过程完全使用普通的HTTP协议,只不过用“会话秘钥”加密内容。
前四步称为握手阶段,用于客户端和服务端建立连接和交换参数。整个通信过程可用下图所示:
HTTPS特点
缓存:只要在HTTP头中使用特定命令,就可以缓存HTTPS;
延迟:HTTP耗时 = TCP握手;HTTPS耗时 = TCP握手 SSL握手。
SSL握手耗时大概是TCP握手耗时的三倍左右。
HTTPS和HTTP的区别
1、HTTPS是加密传输协议,HTTP是名文传输协议;
2、HTTPS需要用到SSL证书,而HTTP不用;
3、HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO
4、 HTTPS标准端口443,HTTP标准端口80;
5、 HTTPS基于传输层,HTTP基于应用层;
HTTPS和HTTP的工作过程区别
- HTTP 包含动作:浏览器打开一个 TCP 连接浏览器发送 HTTP 请求到服务器端服务器发送 HTTP 回应信息到浏览器TCP 连接关闭
- SSL 包含动作:验证服务器端客户端和服务器端选择加密算法和密码,确保双方都支持验证客户端(可选)使用公钥加密技术来生成共享加密数据创建一个加密的 SSL 连接基于该 SSL 连接传递 HTTP 请求
HTTPS加密方式
- 对称加密:加密和解密都是使用的同一个密钥;
- 非对称加密:加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥;公钥和算法都是公开的,私钥是保密的。非对称加密过程:服务端生成配对的公钥和私钥私钥保存在服务端,公钥发送给客户端客户端使用公钥加密明文传输给服务端服务端使用私钥解密密文得到明文
- 数字签名:签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。
以上就是关于HTTP1.0、HTTP1.1和HTTP2.0的区别总结,希望大家多多关注和转发。