关于Http和Https的那些事儿
Posted zhonghu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Http和Https的那些事儿相关的知识,希望对你有一定的参考价值。
一:什么是协议?
网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者“规则”,有了这种约定,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。
二:HTTP协议是什么?
HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(html)到本地浏览器的传送协议。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP有多个版本,目前广泛使用的是HTTP/1.1 版本。
三:对HTTP状态码的了解
• 1XX 信息
1. 100 Continue: 表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
• 2XX 成功
1. 200 OK
2. 204 No Content:请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,但不需要返回数据时使用。
3. 206 Partial Content:表示客户端进行了范围请求,响应报文包含由Content-Range指定范围的实体内容。
• 3XX 重定向
1. 301 Moved Permanently: 永久性重定向;
2. 302 Found:临时性重定向;
3. 303 See Other:和302有着相同的功能,但是303明确要求客户端应该采用GET方法获取资源。
4. 304 Not Modified: 如果请求报文首部包含一些条件,例如:if-Match,if-Modified-Since,if-None-Match,if-Range,if-Unmodified-Since,如果不满足条件,则服务器会返回304状态码。
5. 307 Temporary Redirect:临时重定向,与302的含义类似,但是307要求浏览器不会吧重定向请求的POST方法改为GET方法。
• 4XX 客户端错误
1. 400 Bad Request:请求报文中存在语法错误。
2. 401 Inauthorized: 该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
3. 403 Forbidden:请求被拒绝。
4. 404 Not Found
• 5XX 服务器错误
1. 500 Internal Server Error : 服务器正在执行请求时发生错误;
2. 503 Service Unavailable:服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。
四:forward和redirect的区别?
Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。
直接转发方式(Forward):客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其他信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源都是共享的。
间接转发方式(Redirect):实际是两次HTTP请求,服务器再响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。
• 举个通俗的例子:
直接转发就相当于: “A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;
间接转发就相当于: “A找B借钱,B说没有,让A去找C借”。
五: HTTP方法有哪些?
客户端发送的请求报文第一行为 请求行,包含了方法字段。
1. GET:获取资源,当前网络中绝大部分使用的都是GET;
2. HEAD:获取报文首部,和GET方法类似,但是不返回报文实体主体部分;
3. POST:传输实体主体;
4. PUT: 上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。
六:GET和POST的区别?
GET和POST本质都是HTTP请求,只不过对它们的作用做了界定和适配,并且让他们适应各自的场景。
本质区别:GET只是一次HTTP请求,POST先发请求头再发请求体,实际上是两次请求。
1. 从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;
2. 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;
3. 从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的请求头中,以?分隔URL和传输数据,参数之间以&相连。特别地,如果数据是英文字母/数字,原样发送;而POST请求会把提交的数据放置在HTTP请求报文的请求体中;
4. 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而POST请求参数则被包装到请求体中,相对更安全;
5. 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
七:在浏览器中输入URL地址到显示主页的过程?
1. DNS解析:浏览器查询DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于像本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个Ip地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
2. TCP连接:浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
3. 发送HTTP请求:TCP连接建立起来后,浏览器向服务器发送HTTP请求;
4. 服务器处理请求并返回HTTP报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
5. 浏览器解析渲染页面:
6.连接结束。
八:DNS的解析过程?
1. 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。
九:谈谈你对域名缓存的了解?
为了提高DNS查询效率,并减轻服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值课减少网络开销,而减少此时间值了提高域名解析的正确性。
不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启东市从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。
十:谈下你对HTTP长连接和短连接的理解?分别应用于哪些场景?
在HTTP、1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含又其他的Web资源(如:javascript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP、1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如:APache)中设定这个时间。实现长连接需要客户端和服务器都支持长连接。
十一:谈下HTTP 1.0 和 1.1 、1.2 的主要变化?
• HTTP1.1的主要变化:
1. HTTP 1.0 经过多年发展,在1.1 提出了改进。首先是提出了长连接,HTTP 可以在一次TCP连接中不断发送请求。
2. 然后 HTTP 1.1 支持只发送header 而不发送 body。原因是先用header判断是否成功,再发数据,节约带宽,事实上,post请求默认就是这样做的。
3. HTTP 1.1 的host字段。由于虚拟主机可以支持多个域名,所以一般将域名解析后得到host。
• HTTP2.0的主要变化:
1. HTTP 2.0 支持多路复用,同一个连接可以并发处理多个请求,方法是吧HTTP数据包拆分为多个帧,并发有序的发送,根据序号在另一端进行重组,而不需要一个个HTTP请求顺序到达;
2. HTTP 2.0 支持服务器推送,就是服务器再HTTP请求到达后,除了返回数据之外,还推送了额外的内容给客户端;
3. HTTP 2.0 压缩了请求头,同事基本单位是二进制帧流,这样的数据占用空间更少;
4. HTTP 2.0 适用于 HTTPS 场景,因为其在 HTTP 和 TCP 中间加了一层SSL层。
十二:HTTPS的工作过程?
1. 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了;
2. 服务器从中选出一套加密算法和hash算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构;
3. 客户端收到网站的证书之后要做下面的事情:
• 3.1 验证证书的合法性;
• 3.2 如果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密;
• 3.3 用约定好的hash算法计算握手消息,然后用生成的秘钥进行加密,然后一起发送给服务器。
4. 服务器收到客户端传过来的信息,要做下面的事情:
• 4.1 用秘钥解析出密码,用密码解析握手消息,验证hash值是否和浏览器发来的一致;
• 4.2 使用秘钥加密消息;
5. 如果计算法hash值一致,握手成功。
十三:HTTP和HTTPS的区别?
1. 开销:HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费;
2. 资源消耗:HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl加密传输协议,需要消耗更多的CPU和内存资源;
3. 端口不同:HTTP和HTTPS使用完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
4. 安全性:HTTP的连接很简单,是无状态的;HTTPS协议是由TSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
十四:什么是数字签名?
为了避免数据在传输过程中被替换,比如黑客修改了你的报文内容,但是你并不知道,所以我们让发送端做一个数字签名,把数据的摘要消息进行一个加密,比如MD5,得到一个签名,和数据一起发送。然后接收端把数据摘要进行MD5加密,如果和签名一样,则说明数据确实是真的。
十五:什么是数字证书?
对称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但是数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥其实是假的。所以为了保证发送方的公钥是真的,CA证书机构会负责颁发一个证书,里面的公钥保证是真的。用户请求服务器时,服务器将证书发给用户,这个证书是经由系统内置证书的备案的。
十六:什么是对称加密和非对称加密?
对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。
非对称加密指使用一对非对称密钥,即:公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接受到加密信息后,使用自己的私钥进行解密。
由于非对称加密的方式不需要发送解密的私钥,所以可以保证安全性。但是和对称加密比起来。它非常的慢,所以我们还是要用对称加密来传送信息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
以上是关于关于Http和Https的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章