目录
16. 当在浏览器中输入Google.com并且按下回车之后发生了什么
1. http的理解?
HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol)
,HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
补充:HTTPS 的全称是 Hypertext Transfer Protocol Secure
,从名称我们可以看出 HTTPS 要比 HTTPS 多了 secure 安全性这个概念,实际上, HTTPS 并不是一个新的应用层协议,它其实就是 HTTP + TLS/SSL 协议组合而成,而安全性的保证正是 TLS/SSL 所做的工作。
HTTPS 就是身披了一层 SSL 的 HTTP。
2. http和https的区别?
安全性不同:
https://前缀表明是用SSL (安全套接字)或TSL加密的,你的电脑与服务器之间收发的信息传输将更加安全。当你使用浏览器访问一个HTTP网站的时候,你会发现浏览器会对该HTTP网站显示“不安全”的安全警告,提示用户当前所访问的网站可能会存在风险。
而假如你访问的是一个HTTPS网站时,情况却是完全不一样。你会发现浏览器的地址栏会变成绿色,企业名称会展示在地址栏中,地址栏上面还会出现一把“安全锁”的图标。这些都会给予用户很大的视觉上的安全体验。
网站申请流程不同:
https协议需要到CA申请证书,一般免费证书很少,需要交费,Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。
默认端口不同:
http和https使用的是完全不同的连接方式,同时使用的端口也不同,http使用的是80端口,https使用的是443端口。在网络模型中,HTTP工作于应用层,而HTTPS工作在传输层。
对搜索排名的提升:
这也是很多站长所关注的地方。百度和谷歌两大搜索引擎都已经明确表示,HTTPS网站将会作为搜索排名的一个重要权重指标。也就是说HTTPS网站比起HTTP网站在搜索排名中更有优势。
HTTPS网站相比起HTTP网站拥有着多种的优势,HTTP明显已经不能适应当今这个互联网时代,可以预见到HTTP在不久的将来将会全面被HTTPS所取代。
3. http常见的响应状态码?
状态码如200 OK,由3位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。相应类别由以下五种:
状态码 | 类别 | 描述 |
---|---|---|
1xx | Informational(信息状态码) | 接受请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要附加操作已完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求出错 |
HTTP的状态码总数达60余种,但是常用的大概只有14种。接下来,我们就介绍一下这些具有代表性的14个状态码。
- 14种常用的HTTP状态码列表
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
200 | OK | 请求成功 。一般用于GET与POST请求 |
204 | No Content | 无内容。服务器成功处理,但未返回内容 。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
206 | Partial Content | 是对资源某一部分的请求 ,服务器成功处理了部分GET请求,响应报文中包含由Content-Range指定范围的实体内容。 |
301 | Moved Permanently | 永久性重定向 。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时性重定向 。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址 。与302类似。使用GET请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
307 | Temporary Redirect | 临时重定向 。与302类似。使用GET请求重定向,会按照浏览器标准,不会从POST变成GET。 |
400 | Bad Request | 客户端请求报文中存在语法错误,服务器无法理解 。浏览器会像200 OK一样对待该状态吗 |
401 | Unauthorized | 请求要求用户的身份认证 ,通过HTTP认证(BASIC认证,DIGEST认证)的认证信息,若之前已进行过一次请求,则表示用户认证失败 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。也可以在服务器拒绝请求且不想说明理由时使用 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 ,也可能是web应用存在bug或某些临时故障 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求 。延时的长度可包含在服务器的Retry-After头信息中 |
- 不常用的HTTP状态码列表
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
402 | Payment Required | 保留,将来使用 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
4. 常见的http请求有哪些?他们的区别是什么?
常见的有5种,分别是GET、HEAD、POST、PUT、DELETE
GET:它是最常见的方法,用于获取资源,常用于向服务器查询某些信息。打开网页一般都是用GET方法,因为要从web服务器获取信息。
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或对已有资源的修改。
PUT: 从客户端向服务器传送的数据取代指定文档的内容。
DELETE: 请求服务器删除指定的页面最常见的HTTP请求方法是GET 和 POST。GET一般用于获取,查询资源信息,而POST一般用于更新资源信息。
GET和POST的区别:
GET提交的数据会放在?之后,以问号 (? )分割URL 和传输数据,参数之间以&相连
GET提交的数据大小有限制 (因为浏览器对URL的长度有限制), 而POST 方法提交的数据大小没有限制。
GET万式提交数据会带来安全问题,比如一个登录页面通过GET万式提交数据时,用户名和密码将出现在URL上如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码
5. 什么是三次握手和四次挥手?
三次握手和四次挥手是TCP/IP协议用于建立和终止网络连接的过程,这是网络通信中非常重要的概念。
三次握手指的是,在建立TCP连接时,客户端和服务端之间需要经过三次会话,以确认彼此的身份并同意建立连接。具体来说,三次握手的步骤如下:
1. 客户端向服务端发送连接请求(SYN)报文。
2. 服务端接收到请求报文后,向客户端回复确认请求(SYN+ACK)报文。
3. 客户端再次发送确认报文(ACK),此时连接建立成功,开始进行数据传输。
四次挥手指的是,在终止TCP连接时,客户端和服务端之间需要经过四次会话,以保证数据传输正常结束并关闭连接。具体来说,四次挥手的步骤如下:
1. 客户端发送终止连接请求(FIN)报文。
2. 服务端收到请求报文后,向客户端发送确认报文(ACK)并告诉客户端已经开始关闭连接。
3. 数据传输完成后,服务端发送终止连接请求(FIN)报文。
4. 客户端接收到终止请求报文后,向服务端发送确认报文(ACK),表示已经同意关闭连接并完成了四次挥手的过程。
6. GET和POST的请求的区别
get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);
post请求一般是去提交数据。
get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,
不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;
post请求是没有的长度限制,请求数据是放在body中;
get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。
get请求可以被缓存,post请求不会被缓存。
get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。
get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。
7. POST和PUT请求的区别
PUT请求是向服务器端发送数据,从而修改数据的内容但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。(可以理解为是更新数据)
POST请求是向服务器端发送数据,该请求会改变数据的种类等资源,它会创建新的内容。(可以理解为是创建数据)
8. 常见的HTTP请求头和响应头
常见的请求头
- Accept: 览器支持的 MIME 媒体类型, 比如 text/html,application/json,image/webp,/ 等
- Accept-Encoding: 浏览器发给服务器,声明浏览器支持的编码类型,gzip, deflate
- Accept-Language: 客户端接受的语言格式,比如 zh-CN
- Connection: keep-alive , 开启HTTP持久连接
- Host:服务器的域名
- Origin:告诉服务器请求从哪里发起的,仅包括协议和域名 CORS跨域请求中可以看到response有对应的header,Access-Control-Allow-Origin
- Referer:告诉服务器请求的原始资源的URI,其用于所有类型的请求,并且包括:协议+域名+查询参数; 很多抢购服务会用这个做限制,必须通过某个入来进来才有效
- User-Agent: 服务器通过这个请求头判断用户的软件的应用类型、操作系统、软件开发商以及版本号、浏览器内核信息等; 风控系统、反作弊系统、反爬虫系统等基本会采集这类信息做参考
- Cookie: 表示服务端给客户端传的http请求状态,也是多个key=value形式组合,比如登录后的令牌等
- Content-Type: HTTP请求提交的内容类型,一般只有post提交时才需要设置,比如文件上传,表单提交等
常见的响应头
- Allow: 服务器支持哪些请求方法
- Content-Length: 响应体的字节长度
- Content-Type: 响应体的MIME类型
- Content-Encoding: 设置数据使用的编码类型
- Date: 设置消息发送的日期和时间
- Expires: 设置响应体的过期时间,一个GMT时间,表示该缓存的有效时间
- cache-control: Expires的作用一致,都是指明当前资源的有效期, 控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据,优先级高于Expires,控制粒度更细,如max-age=240,即4分钟
- Location:表示客户应当到哪里去获取资源,一般同时设置状态代码为3xx
- Server: 服务器名称
- Transfer-Encoding:chunked 表示输出的内容长度不能确定,静态网页一般没,基本出现在动态网页里面
- Access-Control-Allow-Origin: 定哪些站点可以参与跨站资源共享
9. HTTP状态码304是多好还是少好
服务器为了提高网站访问速度,对之前访问的部分页面指定缓存机制,当客户端在此对这些页面进行请求,服务器会根据缓存内容判断页面与之前是否相同,若相同便直接返回304,此时客户端调用缓存内容,不必进行二次下载。
状态码304不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应。
搜索引擎蜘蛛会更加青睐内容源更新频繁的网站。通过特定时间内对网站抓取返回的状态码来调节对该网站的抓取频次。若网站在一定时间内一直处于304的状态,那么蜘蛛可能会降低对网站的抓取次数。相反,若网站变化的频率非常之快,每次抓取都能获取新内容,那么日积月累,的回访率也会提高。
产生较多304状态码的原因:
- 页面更新周期长或不更新
- 纯静态页面或强制生成静态html
304状态码出现过多会造成以下问题:
- 网站快照停止;
- 收录减少;
- 权重下降。
10. 常见的HTTP请求方法
- GET方法:发送一个请求来取得服务器上的某一资源,返回资源的HTTP头和呈现数据。
- POST方法:向URL指定的资源提交数据或附加新的数据。
- PUT方法:向服务器传送的数据取代指定的文档的内容,通常指定了资源的存放位置。
- HEAD方法:只请求页面的首部,返回HTTP头信息。
- DELETE方法:删除服务器上的某资源。
- OPTIONS方法:获取当前URL所支持的方法。
- TRACE方法:回显服务器收到的请求,用于测试或诊断。
- CONNECT方法:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
11. OPTIONS请求方法及使用场景
OPTIONS是除了GET和POST之外的其中一种HTTP请求方
法。
OPTIONS万法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。
该请求方法的响应不能缓存OPTIONS请求方法的主要用途有两个:
获取服务器支持的所有HTTP请求方法
用来检查访问权限。例如: 在进行CORS跨域资源共享时,对于复杂请求,就是使用OPTIONS 方法发送嗅探请求,以判断是否有对指定资源的访问权限。
12. HTTP1.0和HTTP1.1之间有哪些区别?
长连接:
HTTP1.0默认使用短连接,每次请求都需要建立新的TCP连接,连接不能复用。
HTTP1.1支持持久连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少建立和关闭TCP连接的消耗和延迟,提高效率。HTTP1.1默认开启“Connection:Keep-Alive”,使用长连接,加入“Connection:close”才关闭。
host字段:
在HTTP1.0中为每台服务器绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但是随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚机主机,并且它们共享一个IP地址。
HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域,会报400 Bad Request错误。
缓存处理:
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准。
HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
带宽优化及网络连接的使用:
HTTP1.0中存在一些浪费带宽的现象,例如:(1)客户端只需要某个对象的一部分,而服务器却将整个对象发送过来;(2)下载大文件不支持断点续传功能,在发生断连后需要重新下载完整的包。
HTTP1.1则在请求头中引入range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
新增一些错误通知状态码:
HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突 。
13. HTTP1.1和HTTP2.0之间有哪些区别?
二进制协议:HTTP/2采用二进制格式而非文本格式
多路复用:HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
头信息压缩:使用报头压缩,HTTP/2降低了开销
服务器推送:HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
14. HTTP和HTTPS协议的区别
HTTPS协议需要CA证书,费用较高;而HTTP协议不需要
HTTP协议是超文本传输协议,信息是明文传输的,HTTPS则是具有安全性的SSL加密传输协议
使用不同的连接方式,端口也不同,HTTP协议端口是80HTTPS协议端口是443
HTTP协议连接很简单,是无状态的;HTTPS协议是有SSL和HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP更加安全
15. GET方法URL长度限制的原因
HTTP 协议并没有规定 GET 请求 URL 的长度限制,但是实际上在使用中会存在长度限制。造成 GET 请求 URL 长度限制的原因主要有以下两点:
-
浏览器限制:
不同的浏览器对 URL 长度的限制不同,一般来说,在地址栏中输入的 URL 长度范围在 2,000 个字符左右,超过这个长度可能会被浏览器截断。 -
服务器限制:
服务器对 URL 长度的限制是由 web 服务器或者应用服务器决定的,不同的服务器对 URL 长度的限制也不尽相同。通常情况下,Nginx、Apache 等常见的 web 服务器都设置了 URL 长度的上限,例如 Nginx 默认的 client_max_body_size 参数限制为 1MB,如果超出这个限制就会返回 413 Request Entity Too Large 错误。
因此,如果需要传递较大量的数据,建议使用 POST
请求,并将参数放在请求体中,这样可以避免 URL 长度带来的限制
。
16. 当在浏览器中输入Google.com并且按下回车之后发生了什么
- URL 解析
- DNS 查询
- TCP 连接
- 处理请求
- 接受响应
- 渲染页面
17. 页面有多张图片,HTTP是怎样的加载表现
在HTTP1下,浏览器对一个域名下最大TCP连接数为6所以会请求多次。可以用多域名部署解决。这样可以提高同时请求的数目,加快页面图片的获取速度
在HTTP2下,可以一瞬间加载出来很多资源,因为HTTP2支持多路复用,可以在一个TCP连接中发送多个HTTP请求。
18. HTTP2的头部压缩算法是怎样的
HTTP2的头部压缩是HPACK算法。在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,采用哈夫曼编码来压缩整数和字符串,可以达到50%~90%的高压缩率具体来说:
在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送;
首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新
每个新的首部键值对要么被追加到当前表的末尾,要么替换表中之前的值
19. HTTP请求报文是什么样的
一个HTTP请求报文由请求行(request line) 、请求头部(header)、空行和请求数据4个部分组成。
下图给出了请求报文的一般格式。
我们先来看下一个普通的GET请求,它的报文结构是什么样的:
GET /books/java.html HTTP/1.1 ---请求行(如果有带参数,会拼接在URL)
-------------------------------------------------------
Accept: */* ---header
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/links.asp
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate
-------------------------------------------------------
---空白行
--body(这里没有内容)
20. HTTP协议的优点和缺点
优点:
- 简单,灵活,易于扩展:因为无太多限制,因为简单可以叫用户自己扩展。
- 应用广泛,环境成熟:因为过于简单,普及,因此应用很广泛。因为本身不属于一种语言,因此,就无平台,语言界限,因此跨平台性很强。
- 无状态,因为没有任何记录。可以减轻服务器的负担,能够更多的cpu和内存用来对外提供服务。因为无状态,对服务器无要求,因此可以组成集群。
缺点:
- 明文不安全。
- 因为无状态,因此无法做连续多个步骤的操作。例如:加入购物出,结算,支付。每次都需要验证身份信息,但是无状态所以无法连续。解决办法,就是cookie技术。
- 性能:“请求 - 应答”模式则加剧了 HTTP 的性能问题,这就是著名的“队头阻塞”(Head-of-line blocking),当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户端迟迟收不到数据。为了解决这个问题,就诞生出了一个专门的研究课题“Web 性能优化”,HTTP 官方标准里就有“缓存”一章(RFC7234),非官方的“花招”就更多了,例如切图、数据内嵌与合并,域名分片、JavaScript“黑科技”等等
21. 说一下HTTP3.0
HTTP3.0,也称作HTTP over QUIC。HTTP3.0的核心是QUIC(读音quick)协议,由Google在 2015年提出的SPDY v3演化而来的新协议,传统的HTTP协议是基于传输层TCP的协议,而QUIC是基于传输层UDP上的协议,可以定义成:HTTP3.0基于UDP的安全可靠的HTTP2.0协议。
1、流量控制、传输可靠性功能: OUIC在UDP的基础上增加了一层来保证数据传输可靠性,它提供了数据包重传拥塞控制、以及其他一些TCP中的特性
2、集成TLS加密功能: 目前QUIC使用TLS1.3,减少了握手所花费的RTT数
3、多路复用: 同一物理连接上可以有多个独立的逻辑数据流,实现了数据流的单独传输,解决了TCP的队头阻塞问题
4、快速握手: 由于基于UDP,可以实现使用0 ~ 1个RTT来建立连接
22. HTTP协议的性能怎么样
HTTP协议是基于TCP/IP,并且使用了请求-应答的通信模式,所以性能的关键就在这两点里
长连接
HTTP协议有两种连接模式,一种是持续连接,一种非持续连接。
(1)非持续连接指的是服务器必须为每一个请求的对象建立和维护一个全新的连接
(2)持续连接下,TCP连接默认不关闭,可以被多个请求复用。采用持续连接的好处是可以避免每次建立TCP连接二次握手时所花费的时间
对于不同版本的采用不同的连接方式:
在HTTP/1.0 每发起一个请求,都要新建一次 TCP 连接 (次握手),而且是串行请求,做了无畏的 TCP 连接建立和断开,增加了通信开销。该版本使用的非持续的连接,但是可以在请求时,加上 Connection: keep-a live 来要求服务器不要关闭 TCP 连接。
在HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。该版本及以后版本默认采用的是持续的连接。目前对于同一个域,大多数浏览器支持同时建立 6 个持久连接
23. 与缓存相关的HTTP请求头有哪些
强缓存:
Expires
Cache-Control
协商缓存:
Etag、If-None-Match
Last-Modified、If-Modified-Since
24. 什么是HTTPS协议
超文本传输安全协议(Hypertext Transfer Protocol Secure简称:HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。HTTPS的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性
HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
安全层的主要职责就是对发起的HTTP请求的数据进行加密操作和对接收到的HTTP的内容进行解密操作
25. TSL/SSL的工作原理
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
26. 数字证书是什么
现在的方法也不一定是安全的,因为没有办法确定得到的公钥就一定是安全的公钥。可能存在一个中间人,截取了对方发给我们的公钥,然后将他自己的公钥发送给我们当我们使用他的公钥加密后发送的信息,就可以被他用自己的私钥解密。然后他伪装成我们以同样的方法向对方发送信息,这样我们的信息就被窃取了,然而自己还不知道。为了解决这样的问题,可以使用数字证书。
首先使用一种Hash算法来对公钥和其他信息进行加密,生成一个信息摘要,然后让有公信力的认证中心(简称CA)用它的私钥对消息摘要加密,形成签名。最后将原始的信息和签名合在一起,称为数字证书。当接收方收到数字证书的时候,先根据原始信息使用同样的Hash算法生成个摘要,然后使用公证处的公钥来对数字证书中的摘要进行解密,最后将解密的摘要和生成的摘要进行对比,就能发现得到的信息是否被更改了。
这个方法最要的是认证中心的可靠性,一般浏览器里会内置一些顶层的认证中心的证书,相当于我们自动信任了他们,只有这样才能保证数据的安全
27. HTTPS通信(握手)功能
1.客户端提交https请求
2.服务器响应客户,并把服务器公钥发给客户端
3.客户端验证公钥的有效性
4.有效后,客户端会生成一个会话密钥(一个随机数)
5.用服务器公钥加密这个会话密钥后,发送给服务器
6.服务器收到公钥加密的密钥后,用私钥解密,获取会话密钥
7.客户端与服务器利用会话密钥对传输数据进行对称加密通信
28. HTTPS的特点
1、优点
相比于http,https可以提供更加优质保密的信息,保证了用户数据的安全性,此外https同时也一定程度上保护了服务端,使用恶意攻击和伪装数据的成本大大提高。
2、缺点
缺点也同样很明显,第一https的技术门槛较高,多数个人或者私人网站难以支撑,CA机构颁发的证书都是需要年费的,此外对接Https协议也需要额外的技术支持;其二,目前来说大多数网站并不关心数据的安全性和保密性,其https最大的优点对它来说并不适用;其三,https加重了服务端的负担,相比于http其需要更多的资源来支撑,同时也降低了用户的访问速度;第四,目前来说Http网站仍然大规模使用,在浏览器侧也没有特别大的差别,很多用户不关心的话根本不感知。
29. HTTPS是如何保证安全的
先理解两个概念
对称加密:即通信的双方都使用同一个秘钥进行加解密对称加密虽然很简单性能也好,但是无法解决首次把秘钥发给对方的问题,很容易被黑客拦截秘钥
非对称加密
1、私钥+公钥=密钥对
2、即用私钥加密的数据,只有对应的公钥才能解密用公加密的数据只有对应的私钥才能解密
3、因为通信双方的手里都有一套自己的密钥对通信之前双方会先把自己的公钥都先发给对方
4、然后对方再拿着这个公钥来加密数据响应给对方.等到到了对方那里.对方再用自己的私钥进行解感
非对称加密虽然安全性更高,但是带来的问题就是速度很慢,影响性能
解决方案:
结合两种加密方式,将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的容钥,然后双方可以使用对称加密来进行沟通。
此时又带来一个问题,中间人问题!如果此时在客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥.换成自己的公钥.这样中间人就可以轻松解密通信双方所发送的所有数据.
所以这个时候需要一个安全的第三方颁发证书 (CA),证明身份的身份,防止被中间人攻击。 证书中包括: 签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等.
但是问题来了,如果中间人篡改了证书,那么身份证明是不是就无效了?这个证明就白买了,这个时候需要一个新的技术,数字签名
数字签名就是用CA自带的HASH算法对证书的内容进行HASH得到一个摘要,再用CA的私钥加密,最终组成数字签名。当别人把他的证书发过来的时候,我再用同样的Hash算法.再次生成消息摘要,然后用CA的公钥对数字签名解密.得到CA创建的消息摘要.两者一比.就知道中间有没有被人篡改了。这个时候就能最大程度保证通信的安全了.