HTTP又称为超文本传输协议,是一个请求响应协议,用于从万维网服务器传输超文本到本地浏览器,它可以使浏览器更加高效,减少网络传输。
当我们在浏览器地址栏上输入要访问的URL后,浏览器会分析出URL上面的域名,然后通过DNS服务器查询出域名映射的IP地址,浏览器根据查询到的IP地址与Web服务器进行通信,而通信的协议就是HTTP协议。
问题1、HTTP 1.0 / 1.1 / 2.0 的版本区别
1)HTTP 1.0
规定了请求头、请求尾、响应头、相应尾
-
HTTP/1.0中浏览器与服务器只保持短暂的连接(短连接),连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。
-
TCP连接的建立需要三次握手,是很耗费时间的一个过程。所以,HTTP/1.0版本的性能比较差。
-
补充:HTTP1.0 其实也可以强制开启长链接,例如接受Connection: keep-alive 这个字段
2)HTTP 1.1
HTTP 1.1在HTTP 1.0的基础上做了2点改进
- 第一个改进是默认启用长连接,即TCP连接默认不关闭,可以被多个请求复用。
- 第二个改进是引入了管道(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。只要第一个请求发出,不必等其回来就可以发第二个请求,这样就进一步改进了HTTP协议的效率。
有了长连接和管道,HTTP的效率得到了极大的提升。但是服务端还是顺序执行的,效率还有提升的空间。
3)HTTP 2.0
二进制分帧,多路复用,Header压缩,服务器推送
- 二进制分帧:将请求和响应数据分割为更小的帧,并且它们采用二进制编码。例如,客户端收到了前一部分,先放在缓冲池里,之后收到了另外一部分,在组合起来,最后在把完整的信息推送给用户。
同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。 - 多路复用:一个连接里面,客户端和服务器都可以同时发送多个请求或回应。一个TCP中多个http请求是并行的
- Header压缩:http/2使用encoder来减少需要传输的header大小,通讯双方各自缓存一份头部字段表,既避免了重复header的传输,又减小了需要传输的大小。
- 服务器推送:服务器可以对一个客户端请求发送多个响应,服务器向客户端推送资源无需客户端明确地请求。并且,服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。
问题2、短连接和长连接
短连接:例如普通的web请求,在三次握手之后建立连接,发送数据包并得到服务器返回的结果之后,通过客户端和服务端的四次握手进行关闭断开。
长连接:区别于短连接,由于三次握手链接及四次握手断开,在请求频繁的情况下,连接请求和断开请求的开销较大,影响效率。采用长连接方式,执行三次握手链接后,不断开连接,保持客户端和服务端通信,直到服务器超时自动断开连接,或者客户端主动断开连接。
适用场景
短连接:适用于网页浏览等数据刷新频度较低的场景。
长连接:适用于客户端和服务端通信频繁的场景,例如聊天室,实时游戏等。
问题3、HTTP的状态码及其含义
1xx——信息类状态码;
2xx——表示成功处理了请求的状态码
3xx——重定向,表示要完成请求,需要进一步操作。通常这些状态代码用来重定向。
4xx——客户端错误,这些状态码表示请求可能出错,妨碍了服务器的处理
5xx——服务器错误,这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求的错误
-
100 接受的请求正在处理
-
200 服务器已成功处理了请求
-
301 永久性重定向,表示资源已被分配了新的 URL
302 临时性重定向,表示资源临时被分配了新的 URL
303 表示资源存在另一个URL,用GET方法获取资源
304 (未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容 -
400(错误请求)服务器不理解请求的语法
-
401表示发送的请求需要有通过HTTP认证的认证信息
-
403(禁止)服务器拒绝请求
-
404(未找到)服务器找不到请求网页 //请求资源不存在,输入了错误的URL
-
500 服务器端错误
-
503 服务器繁忙
问题4、HTTP状态码301和302的区别,都有哪些用途?
- 301重定向(301 Move Permanently),指页面永久性转移,表示为资源或页面永久性地转移到了另一个位置。301重定向是一种非常重要的”自动转向“技术,网址重定向最为可行的一种方法。
- 302重定向(302 Move Temporarily),指页面暂时性转移,表示资源或页面暂时转移到另一个位置,常被用作网址劫持,容易导致网站降权,严重时网站会被封掉,不推荐使用。
问题5、HTTP与HTTPS的区别?
http是超文本传输协议,HTTPS协议是(加密传输协议)SSL+HTTP协议
区别:
- http是超文本传输协议,信息是明文传输;https是由SSL加密传输协议+http协议组成,ssl依靠证书来验证身份。
- https协议需要到申请证书,一般免费证书较少,因而需要一定费用。
- http和https使用的是完全不同的连接方式,用的端口号也不一样,http是80,后者是https。
- http是明文传输,几乎没有安全性;HTTPS协议是由SSL+HTTP协议构建的,可进行加密传输、身份认证的网络协议,比http协议安全。
问题6、HTTP的方法有哪些?
-
GET: 获取资源。用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
-
POST:传输实体主体。用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
-
PUT: 上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。
-
HEAD: 获取报文首部,与GET方法类似,只是不返回报文实体主体,一般用于验证URI是否有效。
-
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
-
OPTIONS:查询相应URI支持的HTTP方法。
问题7、GET 和 POST 的区别?
GET 和 POST 是最常见的Http协议请求方式,GET 用于获取资源,而 POST 用于传输实体主体。可以看作,GET 是查(只读), POST 是改。
- GET参数放在url里面,POST放在请求体中。所以说,GET请求在URL中传送的参数是有长度限制的,而POST没有。
- GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
- GET请求只支持url编码,而POST支持多种编码方式。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
问题8、 HTTPS 的加密与认证过程
1、HTTPS的加密
-
客户端在浏览器中输入一个https网址,然后连接到server的443端口
-
采用https协议的server必须有一套数字证书(一套公钥和密钥)。首先server将证书(公钥)传送到客户端。客户端解析证书,验证成功,则生成一个随机数(私钥),并用证书将该随机数加密后传回server
-
server用密钥解密后,获得这个随机值,然后将要传输的信息和私钥通过某种算法混合在一起(加密)传到客户端 客户端用之前的生成的随机数(私钥)解密服务器端传来的信息
2、HTTPS 的认证
首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。
用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
问题9、 Cookie和Session的区别
1、数据存放位置不同:
Cookie数据存放在客户的浏览器上,Session数据放在服务器上
2、安全程度不同:
cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用session
3、数据存储大小不同:
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。服务端为每个用户都会生成一个Session对象,通过SessionID来区分来自于哪个用户
问题10、浏览器输入url后经历的过程
1、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。
2、否则,在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
3、浏览器会向服务器发起tcp连接,与浏览器建立tcp三次握手。
4、握手成功后,浏览器向服务器发送http请求,请求数据包。
5、服务器处理收到的请求,将数据返回至浏览器
6、关闭TCP连接(四次挥手)
7、浏览器收到响应结果解析html代码并请求资源(js、css、图片等)
8、浏览器进行页面布局渲染
输入一个URL用到的协议:
DNS协议(将域名解析为IP地址)、http协议
DNS服务器是基于UDP的,因此会用到UDP协议
http协议是基于TCP的,因此会用TCP协议。
TCP的数据包会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现(也可以是其他物理层协议,比如PPP,SLIP),以太网协议需要直到目的IP地址的物理地址,有需要ARP协议。
注意:
DNS协议,http协议属于应用层
IP协议,ARP协议属于网络层
问题11、DNS协议
DNS协议首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。
DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。
问题12、ARP协议(地址解析协议)
将IP地址转为MAC地址(物理地址)
ARP解决的是同⼀个局域⽹内,主机或路由器的IP地址和MAC地址的映射问题。如果源主机和⽬的主机在同⼀个局域⽹内(⽬标IP和本机IP分别与⼦⽹掩码相与的结果相同,那么它们在⼀个⼦⽹),就可以⽤ARP找到⽬的主机的MAC地址;如果不在⼀个局域⽹内,⽤ARP 协议找到本⽹络内的⼀个路由器的MAC地址,剩下的⼯作有这个路由器来完成。
ARP协议的具体内容:
(1)每个主机都会有ARP⾼速缓存,存储本局域⽹内IP地址和MAC地址之间的对应关系。
(2)当源主机要发送数据时,⾸先检查ARP⾼速缓存中是否有对应IP地址⽬的主机的MAC地址,如果有,则直接发送数据,如果没有,就像本⽹段的所有主机发送ARP请求分组,该数据包包括的内容有:(源主机IP地址,源主机MAC地址,⽬的主机的IP地址)。
(3)当本⽹络的所有主机收到该ARP请求分组时,⾸先检查数据包中的IP地址是否是⾃⼰的IP地址,如果不是,则忽略该数据包;如果是,则⾸先从数据包中取出源主机的IP地址和MAC地址写⼊到ARP⾼速缓存中,如果已经存在,则覆盖,然后将⾃⼰的MAC地址写⼊ARP响应包中,告诉源主机⾃⼰是它想要找的MAC地址。
(4)源主机收到ARP响应分组后,将⽬的主机的IP和MAC地址写⼊ARP⾼速缓存中,并利⽤此信息发送数据。如果源主机⼀直没有收到ARP响应分组,表⽰ARP查询失败。