http协议详解+https
目录
- 一 什么是HTTP协议
- 二 Http的特点
- 三 Http报文
- 三、HTTP请求方法
- 四、GET与POST区别
- 五、Http状态码
- 六、持久连接
- 七、管线化
- 八 请求响应[头](http://tools.jb51.net/table/http_header)
- 请求头
- 响应头
- Content-Type
- 九 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 |
Authorization | HTTP授权的授权证书 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | 指定请求和响应遵循的缓存机制 | Cache-Control: no-cache |
Connection | 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) | Connection: close |
Cookie | HTTP请求发送时,会把保存在该请求域名下的所有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 | 发出请求的用户的Email | From: 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 | 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag | If-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-Agent | User-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 | 对某网络资源的有效的请求行为,不允许则返回405 | Allow: GET, HEAD |
Cache-Control | 告诉所有的缓存机制是否可以缓存及哪种类型 | Cache-Control: no-cache |
Content-Encoding | web服务器支持的返回内容压缩编码类型。 | 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 |
Server | web服务器软件名称 | Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
Set-Cookie | 设置Http Cookie | Set-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.zip | Content-Disposition:attachment;filename=xx.zip |
Content-Type
文件扩展名 | Content-Type(Mime-Type) | 描述 |
---|---|---|
. | application/x- | |
.* | application/octet-stream | 二进制流,不知道下载文件类型 |
application/pdf | PDF(Portable Document Format的简称,意为“便携式文件格式”) | |
.ai | application/postscript | PostScript(PS)是主要用于电子产业和桌面出版领域的一种页面描述语言和编程语言。 |
.xml | application/atom+xml | Atom feeds |
.js | application/ecmascript | 相当于application/javascript但是严格的处理规则 |
.edi | application/EDI-X12 | EDI ANSI ASC X12数据 |
.edi | application/EDIFACT | EDI EDIFACT数据 |
.json | application/json | JSON(JavaScript Object Notation) |
.js | application/javascript | ECMAScript/JavaScript(相当于application/ecmascript但是宽松的处理规则) |
.ogg | application/ogg | Ogg, 视频文件格式 |
.rdf | application/rdf+xml | 资源描述框架(Resource Description Framework,缩写 RDF),是万维网联盟(W3C)提出的一组标记语言的技术标准,以便更为丰富地描述和表达网络资源的内容与结构。 |
.xml | application/rss+xml | RSS(Really Simple Syndication,简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章、新闻、音频或视频的网摘 |
.xml | application/soap+xml | 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。 |
.woff | application/font-woff | Web开放字体格式(Web Open Font Format,简称WOFF)是一种网页所采用的字体格式标准。(推荐使用;使用application/x-font-woff直到它变为官方标准) |
.xhtml | application/xhtml+xml | 可扩展超文本标记语言(eXtensible HyperText Markup Language,XHTML),是一种标记语言,表现方式与超文本标记语言(HTML)类似,不过语法上更加严格。 |
.xml | application/xml | 可扩展标记语言(英语:eXtensible Markup Language,简称: XML),是一种标记语言。 |
.dtd | application/xml-dtd | XML文件的文件型别定义(Document Type Definition)可以看成一个或者多个XML文件的模板,在这里可以定义XML文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。 |
.xml | application/xop+xml | 二进制优化封装协议(Xmlbinary Optimized Packaging) |
.zip | application/zip | ZIP压缩文件 |
.gzip | application/gzip | Gzip是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。 |
.xls | application/x-xls | XLS 就是 Microsoft Excel 工作表,是一种非常常用的电子表格格式。 |
.001 | application/x-001 | |
.301 | application/x-301 | |
.906 | application/x-906 | |
.a11 | application/x-a11 | |
.awf | application/vnd.adobe.workflow | |
.bmp | application/x-bmp | |
.c4t | application/x-c4t | |
.cal | application/x-cals | |
.cdf | application/x-netcdf | |
.cel | application/x-cel | |
.cg4 | application/x-g4 | |
.cit | application/x-cit | |
.bot | application/x-bot | |
.c90 | application/x-c90 | |
.cat | application/vnd.ms-pki.seccat | |
.cdr | application/x-cdr | |
.cer | application/x-x509-ca-cert | |
.cgm | application/x-cgm | |
.cmx | application/x-cmx | |
.crl | application/pkix-crl | |
.csi | application/x-csi | |
.cut | application/x-cut | |
.dbm | application/x-dbm | |
.cmp | application/x-cmp | |
.cot | application/x-cot | |
.crt | application/x-x509-ca-cert | |
.dbf | application/x-dbf | |
.dbx | application/x-dbx | |
.dcx | application/x-dcx | |
.dgn | application/x-dgn | |
.dll | application/x-msdownload | |
.dot | application/msword | |
.der | application/x-x509-ca-cert | |
.dib | application/x-dib | |
.doc | application/msword | |
.drw | application/x-drw | |
.dwf | application/x-dwf | |
.dxb | application/x-dxb | |
.edn | application/vnd.adobe.edn | |
.dwg | application/x-dwg | |
.dxf | application/x-dxf | |
.emf | application/x-emf | |
.epi | application/x-epi | |
.eps | application/postscript | |
.exe | application/x-msdownload | |
.fdf | application/vnd.fdf | |
.eps | application/x-ps | |
.etd | application/x-ebx | |
.fif | application/fractals | |
.frm | application/x-frm | |
.gbr | application/x-gbr | |
.g4 | application/x-g4 | |
.gl2 | application/x-gl2 | |
.hgl | application/x-hgl | |
.hpg | application/x-hpgl | |
.hqx | application/mac-binhex40 | |
.hta | application/hta | |
.gp4 | application/x-gp4 | |
.hmr | application/x-hmr | |
.hpl | application/x-hpl | |
.hrf | application/x-hrf | |
.icb | application/x-icb | |
.ico | application/x-ico | |
.ig4 | application/x-g4 | |
.iii | application/x-iphone | |
.ins | application/x-internet-signup | |
.iff | application/x-iff | |
.igs | application/x-igs | |
.img | application/x-img | |
.isp | application/x-internet-signup | |
.jpe | application/x-jpe | |
.js | application/x-javascript | |
.jpg | application/x-jpg | |
.lar | application/x-laplayer-reg | |
.latex | application/x-latex | |
.lbm | application/x-lbm | |
.ls | application/x-javascript | |
.ltr | application/x-ltr | |
.man | application/x-troff-man | |
.mdb | application/msaccess | |
.mac | application/x-mac | |
.mdb | application/x-mdb | |
.mfp | application/x-shockwave-flash | |
.mi | application/x-mi | |
.mil | application/x-mil | |
.mocha | application/x-javascript | |
.mpd | application/vnd.ms-project | |
.mpp | application/vnd.ms-project | |
.mpt | application/vnd.ms-project | |
.mpw | application/vnd.ms-project | |
.mpx | application/vnd.ms-project | |
.mxp | application/x-mmxp | |
.nrf | application/x-nrf | |
.out | application/x-out | |
.p12 | application/x-pkcs12 | |
.p7c | application/pkcs7-mime | |
.p7r | application/x-pkcs7-certreqresp | |
.pc5 | application/x-pc5 | |
.pcl | application/x-pcl | |
.pdx | application/vnd.adobe.pdx | |
.pgl | application/x-pgl | |
.pko | application/vnd.ms-pki.pko | |
.p10 | application/pkcs10 | |
.p7b | application/x-pkcs7-certificates | |
.p7m | application/pkcs7-mime | |
.p7s | application/pkcs7-signature | |
.pci | application/x-pci | |
.pcx | application/x-pcx | |
application/pdf | ||
.pfx | application/x-pkcs12 | |
.pic | application/x-pic | |
.pl | application/x-perl | |
.plt | application/x-plt | |
.png | application/x-png | |
.ppa | application/vnd.ms-powerpoint | |
.pps | application/vnd.ms-powerpoint | |
.ppt | application/x-ppt | |
.prf | application/pics-rules | |
.prt | application/x-prt | |
.ps | application/postscript | |
.pwz | application/vnd.ms-powerpoint | |
.ra | audio/vnd.rn-realaudio | RealAudio是一种由RealNetworks发展的RealMedia多媒体音频文件格式,仅指RealPlayer中能够识别的音频文件,也可以理解为real格式的音频文件。 |
.ras | application/x-ras | |
.pot | application/vnd.ms-powerpoint | |
.ppm | application/x-ppm | |
.ppt | application/vnd.ms-powerpoint | |
.pr | application/x-pr | |
.prn | application/x-prn | |
.ps | application/x-ps | |
.ptn | application/x-ptn | |
.red | application/x-red | |
.rjs | application/vnd.rn-realsystem-rjs | |
.rlc | application/x-rlc | |
.rm | application/vnd.rn-realmedia | |
.rat | application/rat-file | |
.rec | application/vnd.rn-recording | |
.rgb | application/x-rgb | |
.rjt | application/vnd.rn-realsystem-rjt | |
.rle | application/x-rle | |
.rmf | application/vnd.adobe.rmf | |
.rmj | application/vnd.rn-realsystem-rmj | |
.rmp | application/vnd.rn-rn_music_package | |
.rmvb | application/vnd.rn-realmedia-vbr | |
.rnx | application/vnd.rn-realplayer | |
.rpm | audio/x-pn-realaudio-plugin | |
.rms | application/vnd.rn-realmedia-secure | |
.rmx | application/vnd.rn-realsystem-rmx | |
.rsml | application/vnd.rn-rsml | |
.rtf | application/msword | |
.rv | video/vnd.rn-realvideo | |
.sat | application/x-sat | |
.sdw | application/x-sdw | |
.slb | application/x-slb | |
.rtf | application/x-rtf | |
.sam | application/x-sam | |
.sdp | application/sdp | |
.sit | application/x-stuffit | |
.sld | application/x-sld | |
.smi | application/smil | |
.smk | application/x-smk | |
.smil | application/smil | |
.spc | application/x-pkcs7-certificates | |
.spl | application/futuresplash | |
.ssm | application/streamingmedia | |
.stl | application/vnd.ms-pki.stl | |
.sst | application/vnd.ms-pki.certstore | |
.tdf | application/x-tdf | |
.tga | application/x-tga | |
.sty | application/x-sty | |
.swf | application/x-shockwave-flash | |
.tg4 | application/x-tg4 | |
.tif | application/x-tif | |
.vdx | application/vnd.visio | |
.vpg | application/x-vpeg005 | |
.vsd | application/x-vsd | |
.vst | application/vnd.visio | |
.vsw | application/vnd.visio | |
.vtx | application/vnd.visio | |
.torrent | application/x-bittorrent | |
.vda | application/x-vda | |
.vsd | application/vnd.visio | |
.vss | application/vnd.visio | |
.vst | application/x-vst | |
.vsx | application/vnd.visio | |
.wb1 | application/x-wb1 | |
.wb3 | application/x-wb3 | |
.wiz | application/msword | |
.wk4 | application/x-wk4 | |
.wks | application/x-wks | |
.wb2 | application/x-wb2 | |
.wk3 | application/x-wk3 | |
.wkq | application/x-wkq | |
.wmf | application/x-wmf | |
.wmd | application/x-ms-wmd | |
.wp6 | application/x-wp6 | |
.wpg | application/x-wpg | |
.wq1 | application/x-wq1 | |
.wri | application/x-wri | |
.ws | application/x-ws | |
.wmz | application/x-ms-wmz | |
.wpd | application/x-wpd | |
.wpl | application/vnd.ms-wpl | |
.wr1 | application/x-wr1 | |
.wrk | application/x-wrk | |
.ws2 | application/x-ws | |
.xdp | application/vnd.adobe.xdp | |
.xfd | application/vnd.adobe.xfd | |
.xfdf | application/vnd.adobe.xfdf | |
.xls | application/vnd.ms-excel | |
.xwd | application/x-xwd | |
.sis | application/vnd.symbian.install | |
.x_t | application/x-x_t | |
.apk | application/vnd.android.package-archive | |
.x_b | application/x-x_b | |
.sisx | application/vnd.symbian.install | |
.ipa | application/vnd.iphone | |
.xap | application/x-silverlight-app | |
.xlw | application/x-xlw | |
.xpl | audio/scpls | |
.anv | application/x-anv | |
.uin | application/x-icq |
九 https
https是基于http和SSL/TLS实现的一个协议,他可以保证在网络上传输的数据都是加密的,从而保证数据安全。
接下来我们从http协议开始,提出想法并逐步进行分析,最终实现Https。
1. http协议是不安全的。
在https诞生之前,所有网站都使用http协议,而http协议在数据传输的过程中都是明文,所以可能存在数据泄露和篡改。
2. 使用对称秘钥进行数据加密
为了防止数据泄露和篡改,我们对数据进行加密,如:生成一个对称密码【DKUFHNAF897123F】,将对称秘钥分别交给浏览器和服务器端,他们之间传输的数据都使用对称秘钥进行加密和解密。
请求和响应流程如下:
- 客户端使用对称秘钥对请求进行加密,并发送给服务端。
- 服务端接收到密文之后,使用对称秘钥对密文进行解密,然后处理请求。 最后再使用对称秘钥把要返回的内容再次加密,返回给客户端。
- 客户端接收到密文之后,使用对称秘钥进行解密,并获取最终的响应内容。
如此一来,数据传输都是密文,解决了明文传输数据的问题。但是,这么干有bug。
- 浏览器如何获取对称秘钥?
- 每个客户端的对称秘钥相同,浏览器能拿到对称秘钥,那么黑客也可以拿到,所以,数据加密也就没有意义了。
3. 动态对称秘钥和非对称秘钥
为了解决对称秘钥动态性以及让客户端和服务端安全的获取对称秘钥,可以引入非对称秘钥机制。
如此一来,解决了 动态对称秘钥 和 数据加密的问题,因为每个用户的对称秘钥都是随机生成且传输的过程中都使用公钥加密(公钥加密的数据只有私钥能解密),所有黑客无法截获对称秘钥。而数据传输是通过对称秘钥加密过的,所以黑客即使能获取数据也无法去解密看到真实的内容。 看似无懈可击,但是,这么干还是又bug。
如果黑客在上图 【步骤2】劫持,黑客把自己的公钥返回给客客户端,那么客户端会使用黑客的公钥来加密对称秘钥,黑客在【步骤6】截获请求,使用自己的私钥获取对称秘钥,后面过程全都会完蛋...
4. CA证书的应用
使用 ca 证书可以解决黑客劫持的问题。
如此一来,就解决了黑客劫持的问题,因为即使黑客劫持后的给浏览器即使返回了证书也无法通过校验,同时浏览器也会提示错误信息。
注意:https是基于http和SSL/TLS实现的一个协议,其中前9个步骤称为是SSL/TLS过程,之后的传输数据利用的就是http协议(收发数据)。
5. 总结
以上就是Https的实现原理,https可以保证数据安全,但由过程需要反复加密解密所有访问速度会有所下降(鱼和熊掌不能兼得)。
http协议详解+https相关推荐
- 应用层协议:HTTP与HTTPS协议详解、二者的区别
http协议详解 1.HTTP协议:超文本传输协议 是一种分布式.合作式.多媒体信息系统服务,面向应用层的协议.是一种通用的,不分状态的协议.是一种请求/应答协议. 1.1.HTTP/1.0和HTTP ...
- 通过CURL请求示例详解HTTPS协议
通过CURL请求示例详解HTTPS协议 基于HTTPS通信是当前互联网最通用便捷的通信方式,简单理解来看可以视为HTTP协议 + SSL/TLS协议,通过一个curl的示例阐述一下HTTPS协议. 特 ...
- RTSP、HTTP、HTTPS、SDP四种协议详解
RTSP.HTTP.HTTPS.SDP四种协议详解 从这篇开始我们将进入流媒体的环节,流媒体在android中有nuplayer来实现的,在开始讲解android流媒体前,我们先来讲讲流媒体传输协议, ...
- HTTPS简介以及SSL协议详解
HTTPS简介以及SSL协议详解 1.HTTPS简介 2.SSL协议介绍 2.1.SSL协议的功能 2.2.SSL协议在协议栈的位置 2.3.SSL协议组成 2.3.1.纪录协议的功能 2.3.2.S ...
- Https完全协议详解
转自Https协议详解 HTTP 的缺点 到现在为止,我们已了解到 HTTP 具有相当优秀和方便的一面,然而 HTTP 并非只有好的一面,事物皆具两面性,它也是有不足之处的.HTTP 主要有这些不足, ...
- 【计算机网络】HTTPS 协议详解
前言: 之前详细介绍了 HTTP 协议,在 HTTP 协议的基础上,本章详细介绍 HTTPS 协议的内容.如果对于 HTTP 协议有疑问的友友们,可以看看之前的文章<HTTP 协议详解>, ...
- 【计算机网络】--- HTTP与HTTPS协议详解
HTTP与HTTPS协议详解 一.URL 二.HTTP协议 三.HTTPS协议 四.HTTP与HTTPS区别(重中之重) 五.如何正确选择HTTP协议和HTTPS协议 引言:当我们打开一个网页时,奇妙 ...
- Http、Https协议详解
Http/Https协议详解 Http协议是什么? HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol.它是从WEB服务器传输超文本标记语言(HTML) ...
- HTTPS协议详解(三):PKI 体系
本文大部分内容摘自:http://www.wosign.com/faq/faq2016-0309-03.htm 尊重知识产权,转载注明Wosign -------------------------- ...
最新文章
- python--windows下安装BeautifulSoup
- c语言数组中的字母可以相等吗,C语言数组比较
- day11-(cookiesession)
- linux定时任务启动
- java 对象 序列化 文件中_如何将一个java对象序列化到文件里
- oracle安装向导卡住了_JDK 8 的安装与配置
- struts2基础----自定义拦截器
- 创建目录 java_java创建文件和目录
- 计算机加域成灰色,高手解说win7系统创建域选项变成灰色的具体教程
- python中的超类_Python中的抽象超类
- 物联网技术对于智慧生活24小时改变
- 学画画怎么画三点透视图
- POE 网络变压器 Pulse 普思
- 图书所属类别用mysql_Java图书信息查询
- Excel如何删除空白行
- 电子计算机工程 专业大学排名,电子与计算机工程专业大学排名【科教评价网版】...
- 视频快搜新片热剧,百度手机浏览器上都有啊
- 二阶魔方高级玩法公式
- 先秦经典智慧名言故事丛书(全16册) 内容简介
- 2015关于第十一届蓝狐网络杯湖南省大学生计算机程序设计竞赛的总结
热门文章
- java中的Dao类是什么意思
- 学习笔记:min-width和min-height
- 什么是ChainLink (LINK)
- 黑马MySQL进阶篇笔记
- 神马? 网飞(Netflix)程序员的基本薪资居然是谷歌的2倍多...
- LinuxProbe学习笔记(一)
- python 发送邮件connect none_python发送邮件(smtplib)
- 8086CPU指令系统 串操作指令和处理机控制指令
- js内置对象于自定义对象
- 关于数据库的内模式、模式、外模式,数据的逻辑独立性,数据的物理独立性的个人体会