HTTP与HTTPS协议
文件目录
一:基础概念:
(一)超文本文件
WWW上的每个网页都对应一个文件。我们浏览一个页面,要先把页面所对应的文件从提供这个文件的计算机里,通过Internet传送到我们自己的计算机中,再由WWW浏览器翻译成为我们见到的有文字、有图形甚至有声音的页面。这些页面对应的文件不再是普通的“文本文件”,文件中除包含文字信息外,还包括了一些具体的链接。这些包含链接的文件被称为超文本文件
和普通文本相比,超文本文件中多了一些对文件内容的注释,这些注释表明了当前文字显示的位置、颜色等信息,更重要的是,在有些注释中包含了对用户计算机应做出何种反应的说明,这些注释的内容经过浏览器的翻译后就成了不同的操作
为了使各种不同类型的WWW服务器都能正确地认识和执行,超文本文件要遵从一个严格的标准,这个标准就是超文本标识语言(HTML),我们也可以利用这种语言来编写超文本文件,在Internet上制作自己的WWW的主页。
(二)DNS协议
域名系统DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址,即域名到IP的解析,用户使用域名,机器使用IP地址。
查询的过程:当某一个应用需要把主机名解析为IP地址时,该应用进程就调用解析程序,即DNS的一个客户,将待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器,本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回,应用程序获得目的主机的IP地址后即可进行通信。
- DNS解析是一种查询服务,查询要求的是速度,而不是精准度,所以用UDP。
- DNS大多数的名字都在本地进行解析,仅少量解析需要在因特网上通信,因此DNS系统的效率很高。
(三)URL
URL称为统一资源定位符是用来表示从因特网上得到的资源位置和访问这些资源的方法。
URL给资源的位置提供了一种抽象的识别方法并用这种方法给资源定位,只要能够定位,系统就可以对资源进行各种操作,如存取,更新,替换和查找其属性。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置有以及浏览器应该怎么处理它。
1.URL与URI的区别
URI表示 统一资源标识符,标识某一个互联网的资源,URL是URI的子集。
URL是URI的一种具体表现形式
URL就是用定位的方式实现URI,不仅唯一标识资源,而且还提供了定位该资源的信息。
(四)长链接与短链接
-
长连接: 浏览器服务器建立连接后,如果两次以上的请求复用同一个TCP连接,则称为长连接,即连接一次后可以进行多次数据交互。
-
短连接: 如果浏览器发送一次请求报文,服务器回复一次应答就断开连接,下次交互再重新进行三次握手建立连接,那么就称为短连接。
长链接要比短链接好,因为长链接中减少了同步报文,可以是服务器响应速度变快
二:HTTP与HTTPS的区别:
(一)HTTP
用一句话总结,HTTP就是用来规范web服务器与浏览器客户端之间传输超文本文件的一个协议,它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
浏览器与Web服务器在应用层通信使用 HTTP协议。HTTP协议在传输层使用的是TCP协议,所以:
- 浏览器需要和Web服务器三次握手建立连接:连接建立成功后才可以发送HTTP请求报文,服务器收到请求报文后,向浏览器回复HTTP应答报文。
- 浏览器向服务器发送连接前,需要得到服务器的IP及端口:用户在浏览器中通常只输入网址(网站域名),浏览器会通过DNS服务查询获取到的服务器的IP地址,对于端口来讲,使用HTTP协议的程序一般默认使用80端口。
HTTP的通信过程:
过程的文字描述:
- 输入域名,例如百度的网址,客户端先通过本地DNS服务器获取百度服务器的IP地址,端口号默认80.
- 得到IP和端口号,通过connect和服务端进行三次握手建立连接。
- 连接建立成功后,浏览器向服务器发送HTTP请求报文,即想要获取的网页信息如百度首页
- 服务器根据请求返回应答报文和应答数据
- 客户端收到后浏览器通过渲染得到网页画面
1.HTTP的特点
-
无状态
无状态的含义:是每一次HTTP请求是没有联系的,当客户端一次HTTP请求完成过后,再一次请求,HTTP并不知道当前客户端是一个老用户。也就是说一个浏览器的连续两次网页请求之间没有任何关联,它们将被Web服务器独立处理。无状态会带来很多问题,比如你在京东网站第一个页面选择购买商品,跳转到第二个页面进行支付,这个时候服务器无法显示信息,因为它认为这两个页面是独立的,所以需要使用机制,让服务器知道始终是一个客户端在访问。
解决这个问题的办法就是使用Cookie/Session:
(1) Cookie:在客户端内存中开辟一块内存,即给每一个客户端设置一个标识符,第一次进行页面请求时,设置Cookie,下一次访问就不用再次进行页面请求了。Cookie保存在客户端浏览器上,用来确定身份;
(2)Session:当访问服务器某个页面时,在服务器开辟一块内存,这块内存就是Session,记录了当前客户端的信息,同一个session就被认为是一个客户端。
Session 是保存在服务器端上会存在一段时间才会消失,如果 Session 过多会增加服务器的压力。 -
无连接:
HTTP是无连接的,因为在传输层使用了面向连接的TCP协议,保证了数据的可靠传输,所以HTTP不必考虑数据在传输过程中被丢弃后怎样重传。
-
长连接:
浏览器和服务器三次握手建立连接后,可以进行多次数据交互,最后断开连接,而不是发一次数据就断开连接。
2.HTTP请求报文
HTTP请求报文结构:
HTTP请求报文:
- 请求行:请求方法 URL HTTP 的版本 Get /index.html HTTP/1.1
- 头部字段:从第二行开始,用来说明浏览器、服务器或报文主体的一些信息。请求头和请求体之间存在一个空行。
- 可选的消息体:在请求报文中一般不使用这个字段,在响应报文中也可能没有这个字段。如果消息体非空,则 HTTP 请求的头部字段必须包含该消息体长度的字段 Content-Length。
浏览器向服务器HTTP请求报文示例:
HTTP的常见请求方法:
请求方法 | 请求方法的含义 |
---|---|
GET | 申请获取资源,而不对服务器产生任何其他影响 |
HEAD | 和GET方法类似,不过仅要求服务器返回头部信息,而不需要传输任何实际内容 |
POST | 客户端向服务器提交数据的方法,这种方法会影响服务器,服务器可能根据收到的数据动态创建新的资源,也可能更新原有的资源 |
PUT | 上传某个资源 |
DELETE | 删除某个资源 |
3.HTTP响应报文
HTTP响应报文结构:
HTTP响应报文:
- 状态行:HTTP 协议版本、状态码、状态信息 HTTP/1.1 200 OK。
- 头部字段:其表示方法和 HTTP 请求中的头部字段的相同
- 实体主体:一般不使用
服务器对浏览器的响应示例:
HTTP响应状态码:
状态类型 | 状态码 | 状态码含义 |
---|---|---|
1XX | 100 Continue | 服务器端收到了客户端发送的请求行与头部信息,并要求客户端继续发送 |
2XX | 200 OK | 请求成功 |
3XX | 301 | 资源被转移,请求被重定位 |
4XX | 404 NotFound | 请求资源不存在 |
5XX | 500 | 服务器端出错 |
(二)HTTPS
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
HTTPS主要作用是:
- 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
- 对网站服务器进行真实身份认证。
1.对称加密与非对称加密
-
大家可能都听说过 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但其实:HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。
-
HTTPS协议的通信流程图:
-
对称加密与非对称加密的区别
1.对称加密过程和解密过程使用的同一个**,加密过程相当于用原文+**可以传输出密文,同时解密过程用密文-**可以推导出原文。但非对称加密采用了两个**,一般使用公钥进行加密,使用私钥进行解密。
2.加密解密速度不同
对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。
2.HTTPS可能会收到的威胁
-
威胁情况如何产生:
中间人的确无法得到浏览器生成的**B,这个**本身被公钥A加密了,只有服务器才有私钥A’解开拿到它呀!然而中间人却完全不需要拿到**A’就能干坏事了。请看:
1.某网站拥有用于非对称加密的公钥A、私钥A’。
2.浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
3.中间人劫持到公钥A,保存下来,把数据包中的公钥A替换成自己伪造的公钥B(它当然也拥有公钥B对应的私钥B’)。
4.浏览器随机生成一个用于对称加密的**X,用公钥B(浏览器不知道公钥被替换了)加密后传给服务器。
5.中间人劫持后用私钥B’解密得到**X,再用公钥A加密后传给服务器。
6.服务器拿到后用私钥A’解密得到**X。
这样在双方都不会发现异常的情况下,中间人得到了**B。根本原因是浏览器无法确认自己收到的公钥是不是网站自己的。那么下一步就是解决下面这个问题: -
如何解决这种不安全情况:
怎么解决https不安全情况即如何证明浏览器收到的公钥一定是该网站的公钥?
数字签名的制作过程:
1.CA拥有非对称加密的私钥和公钥。
2.CA对证书明文信息进行hash。
3.对hash后的值用私钥加密,得到数字签名。
明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了。
那浏览器拿到服务器传来的数字证书后,如何验证它是不是真的?(有没有被篡改、掉包) -
浏览器验证的过程:
1.拿到证书,得到明文T,数字签名S。
2.用CA机构的公钥对S解密(由于是浏览器信任的机构,所以浏览器保有它的公钥。详情见下文),得到S’。
3.用证书里说明的hash算法对明文T进行hash得到T’。
4.比较S’是否等于T’,等于则表明证书可信。
为什么这样可以证明证书可信呢?我们来仔细想一下。
中间人有可能篡改证书吗?假设中间人篡改了证书的原文,由于他没有CA机构的私钥,所以无法得到此时加密后签名,无法相应地篡改签名。浏览器收到该证书后会发现原文和签名解密后的值不一致,则说明证书已被篡改
中间人有可能把证书掉包吗?
假设有另一个网站B也拿到了CA机构认证的证书,它想搞垮网站A,想劫持网站A的信息。于是它成为中间人拦截到了A传给浏览器的证书,然后替换成自己的证书,传给浏览器,之后浏览器就会错误地拿到B的证书里的公钥了,会导致上文提到的漏洞。
其实这并不会发生,因为证书里包含了网站A的信息,包括域名,浏览器把证书里的域名与自己请求的域名比对一下就知道有没有被掉包了。
三:HTTP与HTTPS的区别:
-
HTTP是互联网上应用最为广泛的一种网络协议,用于www服务器传输超文本到本地浏览器的传输协议,他可以使浏览器更加高效时网络传输减少。
-
HTTPS简单来说就是HTTP的安全版。即在HTTP下加入SSL层,HTTPS的安全基础就是SSL。其主要作用包括建立一个信息安全通道来保证数据传输的安全另一个是确认网站的真实性。
-
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加***等。
,不提供任何方式的数据加密。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。由此设计出的HTTPS协议:由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。 -
HTTP与HTTPS的主要区别:
1.https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,需要一定费用。
2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四:GET与POST的区别:
-
本质: GET是从服务器获取数据,不会对服务器进行影响,POST不仅可以获取数据还可以向服务器传送数据即影响服务器
-
URL可见性:GET传参的方式是通过地址栏URL传递,可以直接看到GET传递的参数;POST通过请求传递参数,将请求信息放置在报文体中,要获取信息必须解析报文。
-
安全性:POST的安全性比GET安全性高,GET提交数据,是通过URL传递数据,所以会将信息明文出现在URL上,POST是通过body体传输。
-
缓存:GET请求能够被缓存,GET请求会保存在浏览器的浏览记录中,能够保存为浏览器书签;POST不能被缓存,因为post可以修改数据,是有副作用的。
-
传输数据的大小:GET传递数据通过URL进行传递,受到不同浏览器的URL大小的限制,最长2048字符;POST没有长度限制。
-
后退方式:GET后退没有影响;POST会重新提交请求,因为后退相当于将修改的数据变成修改前。
-
编码方式:GET只支持URL编码方式,POST支持多种编码方式。
-
效率:GET效率比POST高,因为POST需要进行两次TCP数据报传送,第一次发送头部进行确认,第二次发数据(但有的浏览器一次,如火狐);GET一次。GET比POST总体效率高
-
对参数的数据类型,GET只接受ASCII字符,而POST没有限制 。
优缺点:
- 做数据查询的时候建议用GET
- 查询包含机密信息的话,建议用Post数据方式;在做数据添加、修改或删除时,也建议用Post方式。
五:HTTP1.0与HTTP1.1的区别:
- HTTP 1.0 规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器处理完成后立即断开 TCP 连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。
- HTTP 1.1 增加了一个 Connection 字段,通过设置 Keep-Alive 可以保持 HTTP 连接不断开,避免了每次客户端与服务器请求都要重复建立释放建立 TCP 连接,提高了网络的利用率。如果客户端想关闭 HTTP 连接,可以在请求头中携带 Connection: false 来告知服务器关闭请求。