http协议详解+https

在这里插入图片描述

一 什么是HTTP协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP 是基于 TCP/IP 协议通信协议来传递数据(HTML 文件、图片文件、查询结果等)。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
在这里插入图片描述

二 Http的特点

1、简单快速
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、PUT、DELETE、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活
HTTP允许传输任意类型的数据对象。

3、无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4、无状态
HTTP协议是无状态的,HTTP 协议自身不对请求和响应之间的通信状态进行保存。任何两次请求之间都没有依赖关系。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的。协议本身并不保留之前一切的请求或 响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。

在这里插入图片描述

三 Http报文

Http报文包括请求报文和响应报文两大部分,其中请求报文由请求行(request line)、请求头(header)、空行和请求体四个部分组成。而响应报文由状态行、响应头部、空行和响应体四个部分组成。接下来我们详细介绍下请求报文的各个部分及其作用。

在这里插入图片描述
1、请求行

用来说明请求类型、要访问的资源以及所使用的HTTP版本。

POST  /chapter17/user.html HTTP/1.1

以上代码中 POST 代表请求方法, /chapter17/user.html 表示URI, HTTP/1.1 代表协议和协议的版本。现在比较流行的是Http1.1版本。大家也可以了解下 2.0 。

2、请求头

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

请求头部通知服务器有关于客户端请求的信息。它包含许多有关的客户端环境和请求正文的有用信息。其中比如:

Host:表示主机名,虚拟主机。

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

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

3、空行
最后一个请求头之后是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。

4、请求体
可以承载多个请求参数的数据。

name=kevin&password=1234&realName=lqz

上面代码,承载着name、password、realName三个请求参数。

三、HTTP请求方法

GET:请求指定的页面信息,并返回实体主体。

HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。

PUT:从客户端向服务器传送的数据取代指定的文档的内容。

DELETE:请求服务器删除指定的页面。

四、GET与POST区别

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET请求会被浏览器主动缓存,而POST不会,除非手动设置。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST没有限制。

GET参数通过URL传递,POST放在Request body中。

五、Http状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

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

2xx:成功——表示请求已被成功接收、理解、接受。

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

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

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

比如我们平时常见两种出错的状态码:

403 Forbidden                 //对被请求页面的访问被禁止
404 Not Found                 //请求资源不存在,比如:输入了错误的URL

六、持久连接

1、为什么需要持久连接

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。以当年的通信情况来说,因为都是些容量很小的文本传输,所以即使这样也没有多大问题。可随着 HTTP 的 普及,文档中包含大量图片的情况多了起来。比如,使用浏览器浏览一个包含多张图片的 HTML 页面时,在发送请求访问 HTML 页面资源的同时,也会请 求该 HTML 页面里包含的其他资源。因此,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的 开销。
在这里插入图片描述
2、持久连接的特点

为解决上述 TCP 连接的问题, HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。
在这里插入图片描述
持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外, 减少开销的那部分时间,使 HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了。

在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并未标准化。虽然有一部分服务器通过非 标准的手段实现了持久连接,但服务器端不一定能够支持持久连接。毫无疑问,除了服务器端,客户端也需 要支持持久连接。

七、管线化

持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能 发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。

这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。通俗地讲,请求打包一次传输过去,响应打包一次传递回来。管线化的前提是在持久连接下。
在这里插入图片描述
假如当请求一个包含 10 张图片的 HTML Web 页面,与挨个连接相比,用持久连接可以让请求更快结束。 而管线化技术则比持久连接还要快。请求数越多,时间差就越明显。客户端需要请求这十个资源。以前的做法是,在同一个TCP连接里面,先发送A请求,然后等待服务器做出回应,收到后再发出B请求,以此类推,而管道机制则是允许浏览器同时发出这十个请求,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求。

于是在使用持久连接的情况下,某个连接上消息的传递类似于:

请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3

管线化方式发送变成了类似这样:

请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3

八 请求响应

请求头

Header解释示例
Accept指定客户端能够接收的内容类型Accept: text/plain, text/html
Accept-Charset浏览器可以接受的字符编码集。Accept-Charset: iso-8859-5
Accept-Encoding指定浏览器可以支持的web服务器返回内容压缩编码类型。Accept-Encoding: compress, gzip
Accept-Language浏览器可接受的语言Accept-Language: en,zh
Accept-Ranges可以请求网页实体的一个或者多个子范围字段Accept-Ranges: bytes
AuthorizationHTTP授权的授权证书Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control指定请求和响应遵循的缓存机制Cache-Control: no-cache
Connection表示是否需要持久连接。(HTTP 1.1默认进行持久连接)Connection: close
CookieHTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。Cookie: $Version=1; Skin=new;
Content-Length请求的内容长度Content-Length: 348
Content-Type请求的与实体对应的MIME信息Content-Type: application/x-www-form-urlencoded
Date请求发送的日期和时间Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect请求的特定的服务器行为Expect: 100-continue
From发出请求的用户的EmailFrom: user@email.com
Host指定请求的服务器的域名和端口号Host: www.zcmhi.com
If-Match只有请求内容与实体相匹配才有效If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为EtagIf-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since只在实体在指定时间之后未被修改才请求成功If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards限制信息通过代理和网关传送的时间Max-Forwards: 10
Pragma用来包含实现特定的指令Pragma: no-cache
Proxy-Authorization连接到代理的授权证书Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range只请求实体的一部分,指定范围Range: bytes=500-999
Referer先前网页的地址,当前请求网页紧随其后,即来路Referer: http://www.zcmhi.com/archives/71.html
TE客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息TE: trailers,deflate;q=0.5
Upgrade向服务器指定某种传输协议以便服务器进行转换(如果支持)Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-AgentUser-Agent的内容包含发出请求的用户信息User-Agent: Mozilla/5.0 (Linux; X11)
Via通知中间网关或代理服务器地址,通信协议Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning关于消息实体的警告信息Warn: 199 Miscellaneous warning

响应头

Header解释示例
Accept-Ranges表明服务器是否支持指定范围请求及哪种类型的分段请求Accept-Ranges: bytes
Age从原始服务器到代理缓存形成的估算时间(以秒计,非负)Age: 12
Allow对某网络资源的有效的请求行为,不允许则返回405Allow: GET, HEAD
Cache-Control告诉所有的缓存机制是否可以缓存及哪种类型Cache-Control: no-cache
Content-Encodingweb服务器支持的返回内容压缩编码类型。Content-Encoding: gzip
Content-Language响应体的语言Content-Language: en,zh
Content-Length响应体的长度Content-Length: 348
Content-Location请求资源可替代的备用的另一地址Content-Location: /index.htm
Content-MD5返回资源的MD5校验值Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range在整个返回体中本部分的字节位置Content-Range: bytes 21010-47021/47022
Content-Type返回内容的MIME类型Content-Type: text/html; charset=utf-8
Date原始服务器消息发出的时间Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag请求变量的实体标签的当前值ETag: “737060cd8c284d8af7ad3082f209582d”
Expires响应过期的日期和时间Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified请求资源的最后修改时间Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location用来重定向接收方到非请求URL的位置来完成请求或标识新的资源Location: http://www.zcmhi.com/archives/94.html
Pragma包括实现特定的指令,它可应用到响应链上的任何接收方Pragma: no-cache
Proxy-Authenticate它指出认证方案和可应用到代理的该URL上的参数Proxy-Authenticate: Basic
refresh应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)
 

 

Refresh: 5; url=
http://www.zcmhi.com/archives/94.html
Retry-After如果实体暂时不可取,通知客户端在指定时间之后再次尝试Retry-After: 120
Serverweb服务器软件名称Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie设置Http CookieSet-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Trailer指出头域在分块传输编码的尾部存在Trailer: Max-Forwards
Transfer-Encoding文件传输编码Transfer-Encoding:chunked
Vary告诉下游代理是使用缓存响应还是从原始服务器请求Vary: *
Via告知代理客户端响应是通过哪里发送的Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning警告实体可能存在的问题Warning: 199 Miscellaneous warning
WWW-Authenticate表明客户端请求实体应该使用的授权方案WWW-Authenticate: Basic
Content-Disposition通过浏览器以下载方式解析正文,取值:attachment;filename=xx.zipContent-Disposition:attachment;filename=xx.zip

Content-Type

文件扩展名Content-Type(Mime-Type)描述
.application/x- 
.*application/octet-stream二进制流,不知道下载文件类型
.pdfapplication/pdfPDF(Portable Document Format的简称,意为“便携式文件格式”)
.aiapplication/postscriptPostScript(PS)是主要用于电子产业和桌面出版领域的一种页面描述语言和编程语言。
.xmlapplication/atom+xmlAtom feeds
.jsapplication/ecmascript相当于application/javascript但是严格的处理规则
.ediapplication/EDI-X12EDI ANSI ASC X12数据
.ediapplication/EDIFACTEDI EDIFACT数据
.jsonapplication/jsonJSON(JavaScript Object Notation)
.jsapplication/javascriptECMAScript/JavaScript(相当于application/ecmascript但是宽松的处理规则)
.oggapplication/oggOgg, 视频文件格式
.rdfapplication/rdf+xml资源描述框架(Resource Description Framework,缩写 RDF),是万维网联盟(W3C)提出的一组标记语言的技术标准,以便更为丰富地描述和表达网络资源的内容与结构。
.xmlapplication/rss+xmlRSS(Really Simple Syndication,简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章、新闻、音频或视频的网摘
.xmlapplication/soap+xml简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。
.woffapplication/font-woffWeb开放字体格式(Web Open Font Format,简称WOFF)是一种网页所采用的字体格式标准。(推荐使用;使用application/x-font-woff直到它变为官方标准)
.xhtmlapplication/xhtml+xml可扩展超文本标记语言(eXtensible HyperText Markup Language,XHTML),是一种标记语言,表现方式与超文本标记语言(HTML)类似,不过语法上更加严格。
.xmlapplication/xml可扩展标记语言(英语:eXtensible Markup Language,简称: XML),是一种标记语言。
.dtdapplication/xml-dtdXML文件的文件型别定义(Document Type Definition)可以看成一个或者多个XML文件的模板,在这里可以定义XML文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。
.xmlapplication/xop+xml二进制优化封装协议(Xmlbinary Optimized Packaging)
.zipapplication/zipZIP压缩文件
.gzipapplication/gzipGzip是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。
.xlsapplication/x-xlsXLS 就是 Microsoft Excel 工作表,是一种非常常用的电子表格格式。
.001application/x-001 
.301application/x-301 
.906application/x-906 
.a11application/x-a11 
.awfapplication/vnd.adobe.workflow 
.bmpapplication/x-bmp 
.c4tapplication/x-c4t 
.calapplication/x-cals 
.cdfapplication/x-netcdf 
.celapplication/x-cel 
.cg4application/x-g4 
.citapplication/x-cit 
.botapplication/x-bot 
.c90application/x-c90 
.catapplication/vnd.ms-pki.seccat 
.cdrapplication/x-cdr 
.cerapplication/x-x509-ca-cert 
.cgmapplication/x-cgm 
.cmxapplication/x-cmx 
.crlapplication/pkix-crl 
.csiapplication/x-csi 
.cutapplication/x-cut 
.dbmapplication/x-dbm 
.cmpapplication/x-cmp 
.cotapplication/x-cot 
.crtapplication/x-x509-ca-cert 
.dbfapplication/x-dbf 
.dbxapplication/x-dbx 
.dcxapplication/x-dcx 
.dgnapplication/x-dgn 
.dllapplication/x-msdownload 
.dotapplication/msword 
.derapplication/x-x509-ca-cert 
.dibapplication/x-dib 
.docapplication/msword 
.drwapplication/x-drw 
.dwfapplication/x-dwf 
.dxbapplication/x-dxb 
.ednapplication/vnd.adobe.edn 
.dwgapplication/x-dwg 
.dxfapplication/x-dxf 
.emfapplication/x-emf 
.epiapplication/x-epi 
.epsapplication/postscript 
.exeapplication/x-msdownload 
.fdfapplication/vnd.fdf 
.epsapplication/x-ps 
.etdapplication/x-ebx 
.fifapplication/fractals 
.frmapplication/x-frm 
.gbrapplication/x-gbr 
.g4application/x-g4 
.gl2application/x-gl2 
.hglapplication/x-hgl 
.hpgapplication/x-hpgl 
.hqxapplication/mac-binhex40 
.htaapplication/hta 
.gp4application/x-gp4 
.hmrapplication/x-hmr 
.hplapplication/x-hpl 
.hrfapplication/x-hrf 
.icbapplication/x-icb 
.icoapplication/x-ico 
.ig4application/x-g4 
.iiiapplication/x-iphone 
.insapplication/x-internet-signup 
.iffapplication/x-iff 
.igsapplication/x-igs 
.imgapplication/x-img 
.ispapplication/x-internet-signup 
.jpeapplication/x-jpe 
.jsapplication/x-javascript 
.jpgapplication/x-jpg 
.larapplication/x-laplayer-reg 
.latexapplication/x-latex 
.lbmapplication/x-lbm 
.lsapplication/x-javascript 
.ltrapplication/x-ltr 
.manapplication/x-troff-man 
.mdbapplication/msaccess 
.macapplication/x-mac 
.mdbapplication/x-mdb 
.mfpapplication/x-shockwave-flash 
.miapplication/x-mi 
.milapplication/x-mil 
.mochaapplication/x-javascript 
.mpdapplication/vnd.ms-project 
.mppapplication/vnd.ms-project 
.mptapplication/vnd.ms-project 
.mpwapplication/vnd.ms-project 
.mpxapplication/vnd.ms-project 
.mxpapplication/x-mmxp 
.nrfapplication/x-nrf 
.outapplication/x-out 
.p12application/x-pkcs12 
.p7capplication/pkcs7-mime 
.p7rapplication/x-pkcs7-certreqresp 
.pc5application/x-pc5 
.pclapplication/x-pcl 
.pdxapplication/vnd.adobe.pdx 
.pglapplication/x-pgl 
.pkoapplication/vnd.ms-pki.pko 
.p10application/pkcs10 
.p7bapplication/x-pkcs7-certificates 
.p7mapplication/pkcs7-mime 
.p7sapplication/pkcs7-signature 
.pciapplication/x-pci 
.pcxapplication/x-pcx 
.pdfapplication/pdf 
.pfxapplication/x-pkcs12 
.picapplication/x-pic 
.plapplication/x-perl 
.pltapplication/x-plt 
.pngapplication/x-png 
.ppaapplication/vnd.ms-powerpoint 
.ppsapplication/vnd.ms-powerpoint 
.pptapplication/x-ppt 
.prfapplication/pics-rules 
.prtapplication/x-prt 
.psapplication/postscript 
.pwzapplication/vnd.ms-powerpoint 
.raaudio/vnd.rn-realaudioRealAudio是一种由RealNetworks发展的RealMedia多媒体音频文件格式,仅指RealPlayer中能够识别的音频文件,也可以理解为real格式的音频文件。
.rasapplication/x-ras 
.potapplication/vnd.ms-powerpoint 
.ppmapplication/x-ppm 
.pptapplication/vnd.ms-powerpoint 
.prapplication/x-pr 
.prnapplication/x-prn 
.psapplication/x-ps 
.ptnapplication/x-ptn 
.redapplication/x-red 
.rjsapplication/vnd.rn-realsystem-rjs 
.rlcapplication/x-rlc 
.rmapplication/vnd.rn-realmedia 
.ratapplication/rat-file 
.recapplication/vnd.rn-recording 
.rgbapplication/x-rgb 
.rjtapplication/vnd.rn-realsystem-rjt 
.rleapplication/x-rle 
.rmfapplication/vnd.adobe.rmf 
.rmjapplication/vnd.rn-realsystem-rmj 
.rmpapplication/vnd.rn-rn_music_package 
.rmvbapplication/vnd.rn-realmedia-vbr 
.rnxapplication/vnd.rn-realplayer 
.rpmaudio/x-pn-realaudio-plugin 
.rmsapplication/vnd.rn-realmedia-secure 
.rmxapplication/vnd.rn-realsystem-rmx 
.rsmlapplication/vnd.rn-rsml 
.rtfapplication/msword 
.rvvideo/vnd.rn-realvideo 
.satapplication/x-sat 
.sdwapplication/x-sdw 
.slbapplication/x-slb 
.rtfapplication/x-rtf 
.samapplication/x-sam 
.sdpapplication/sdp 
.sitapplication/x-stuffit 
.sldapplication/x-sld 
.smiapplication/smil 
.smkapplication/x-smk 
.smilapplication/smil 
.spcapplication/x-pkcs7-certificates 
.splapplication/futuresplash 
.ssmapplication/streamingmedia 
.stlapplication/vnd.ms-pki.stl 
.sstapplication/vnd.ms-pki.certstore 
.tdfapplication/x-tdf 
.tgaapplication/x-tga 
.styapplication/x-sty 
.swfapplication/x-shockwave-flash 
.tg4application/x-tg4 
.tifapplication/x-tif 
.vdxapplication/vnd.visio 
.vpgapplication/x-vpeg005 
.vsdapplication/x-vsd 
.vstapplication/vnd.visio 
.vswapplication/vnd.visio 
.vtxapplication/vnd.visio 
.torrentapplication/x-bittorrent 
.vdaapplication/x-vda 
.vsdapplication/vnd.visio 
.vssapplication/vnd.visio 
.vstapplication/x-vst 
.vsxapplication/vnd.visio 
.wb1application/x-wb1 
.wb3application/x-wb3 
.wizapplication/msword 
.wk4application/x-wk4 
.wksapplication/x-wks 
.wb2application/x-wb2 
.wk3application/x-wk3 
.wkqapplication/x-wkq 
.wmfapplication/x-wmf 
.wmdapplication/x-ms-wmd 
.wp6application/x-wp6 
.wpgapplication/x-wpg 
.wq1application/x-wq1 
.wriapplication/x-wri 
.wsapplication/x-ws 
.wmzapplication/x-ms-wmz 
.wpdapplication/x-wpd 
.wplapplication/vnd.ms-wpl 
.wr1application/x-wr1 
.wrkapplication/x-wrk 
.ws2application/x-ws 
.xdpapplication/vnd.adobe.xdp 
.xfdapplication/vnd.adobe.xfd 
.xfdfapplication/vnd.adobe.xfdf 
.xlsapplication/vnd.ms-excel 
.xwdapplication/x-xwd 
.sisapplication/vnd.symbian.install 
.x_tapplication/x-x_t 
.apkapplication/vnd.android.package-archive 
.x_bapplication/x-x_b 
.sisxapplication/vnd.symbian.install 
.ipaapplication/vnd.iphone 
.xapapplication/x-silverlight-app 
.xlwapplication/x-xlw 
.xplaudio/scpls 
.anvapplication/x-anv 
.uinapplication/x-icq 

九 https

https是基于http和SSL/TLS实现的一个协议,他可以保证在网络上传输的数据都是加密的,从而保证数据安全。

接下来我们从http协议开始,提出想法并逐步进行分析,最终实现Https。

1. http协议是不安全的。

在https诞生之前,所有网站都使用http协议,而http协议在数据传输的过程中都是明文,所以可能存在数据泄露和篡改。

2. 使用对称秘钥进行数据加密

为了防止数据泄露和篡改,我们对数据进行加密,如:生成一个对称密码【DKUFHNAF897123F】,将对称秘钥分别交给浏览器和服务器端,他们之间传输的数据都使用对称秘钥进行加密和解密。

请求和响应流程如下:

  1. 客户端使用对称秘钥对请求进行加密,并发送给服务端。
  2. 服务端接收到密文之后,使用对称秘钥对密文进行解密,然后处理请求。 最后再使用对称秘钥把要返回的内容再次加密,返回给客户端。
  3. 客户端接收到密文之后,使用对称秘钥进行解密,并获取最终的响应内容。

如此一来,数据传输都是密文,解决了明文传输数据的问题。但是,这么干有bug。

  • 浏览器如何获取对称秘钥?
  • 每个客户端的对称秘钥相同,浏览器能拿到对称秘钥,那么黑客也可以拿到,所以,数据加密也就没有意义了。  
3. 动态对称秘钥和非对称秘钥

为了解决对称秘钥动态性以及让客户端和服务端安全的获取对称秘钥,可以引入非对称秘钥机制。

如此一来,解决了 动态对称秘钥 和 数据加密的问题,因为每个用户的对称秘钥都是随机生成且传输的过程中都使用公钥加密(公钥加密的数据只有私钥能解密),所有黑客无法截获对称秘钥。而数据传输是通过对称秘钥加密过的,所以黑客即使能获取数据也无法去解密看到真实的内容。  看似无懈可击,但是,这么干还是又bug。

如果黑客在上图 【步骤2】劫持,黑客把自己的公钥返回给客客户端,那么客户端会使用黑客的公钥来加密对称秘钥,黑客在【步骤6】截获请求,使用自己的私钥获取对称秘钥,后面过程全都会完蛋...

4. CA证书的应用

使用 ca 证书可以解决黑客劫持的问题。

如此一来,就解决了黑客劫持的问题,因为即使黑客劫持后的给浏览器即使返回了证书也无法通过校验,同时浏览器也会提示错误信息。

注意:https是基于http和SSL/TLS实现的一个协议,其中前9个步骤称为是SSL/TLS过程,之后的传输数据利用的就是http协议(收发数据)。

5. 总结

以上就是Https的实现原理,https可以保证数据安全,但由过程需要反复加密解密所有访问速度会有所下降(鱼和熊掌不能兼得)。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Generalzy

文章对您有帮助,倍感荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值