目录
HTTP
HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求行(请求的方法、URL、协议版本)、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括状态行(协议的版本、成功或者错误代码、服务器信息)、响应头部和响应数据。
在浏览器输入URL地址到显示主页的过程(HTTP请求过程)?
- 浏览器向DNS 服务器请求解析该URL 中的域名所对应的IP 地址;
- 解析出IP 地址后,根据该IP 地址和默认端口80,和服务器建立TCP 连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的html 文本发送给浏览器;
- 释放TCP 连接;
- 浏览器将该html 文本解析后显示网页内容;
细致过程(笔试原题,排序):
- 浏览器输入URL,先解析URL地址是否合法
- 浏览器检查是否有缓存(浏览器缓存 - 系统缓存 - 路由器缓存)。如果有,直接显示。没有,进行(3)
- 在发送HTTP请求前,需要域名解析(DNS解析),解析获取对应的IP地址
- 浏览器向服务器发起TCP连接,进行TCP连接的三次握手
- 握手成功后,浏览器向服务器发送HTTP请求,请求数据包
- 服务器收到请求,进行处理后将数据发送给浏览器
- 浏览器收到HTTP响应
- 浏览器解析响应,如果响应可以缓存则存入缓存
- 浏览器发送请求获取嵌入在HTML的资源(HTML、CSS、JS等),对于未知类型,会弹出对话框
- 浏览器发送异步请求
- 页面全部渲染结束显示网页
HTTP请求方法
GET和POST的区别?
GET 和POST 本质上就是TCP 连接,并无差别。但是由于HTTP 的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
- get 参数通过 url 传递,post 放在 request body 中。
- get 请求在 url 中传递的参数是有长度限制的,而 post 没有。
- get 请求只能进行 url 编码,而 post 支持多种编码方式。
- get 请求会浏览器主动 cache,而 post 支持多种编码方式。
- get 请求参数会被完整保留在浏览历史记录里,而post 中的参数不会被保留。
- GET 产生一个TCP 数据包;POST 产生两个TCP 数据包。
- 对于GET 方式的请求,浏览器会把http header 和data 一并发送出去,服务器响应200(返回数据)
- 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
HTTP状态码
HTTP的无连接是什么意思?
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP的无状态是什么意思?
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
HTTP1.0、HTTP1.1、HTTP2.0的区别?
HTTP1.0
- HTTP1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接。就像对讲机一样,一次只能说一件事,说完就要over挂断,又因为TCP连接建立一次需要三次握手,所以效率很低。
如果不想断开连接,需要在HTTP相应的Connection字段指定为keep-live
connection:keep-alive;
HTTP1.1
HTTP1.1引进了持久连接,**TCP连接默认不关闭,**可以被多个请求复用。客户端和服务端发现对方一段时间没有活动后,可以主动关闭连接;或者客户端在最后一个请求时,主动告诉服务端要关闭连接。响应的顺序必须和请求的顺序一致
HTTP1.0就像打一次电话只能说一次事,HTTP1.1是打完电话先不直接挂断,而是持续一会,这期间如果有事情还可以再次沟通。
HTTP1.1还引入了管道机制,即在同一个TCP连接里,客户端可以同时发送多个请求,这样就进一步改进了HTTP协议的效率。
HTTP2.0
**HTTP2.0采用了多路复用,即在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按顺序一一对应。**能这样做有一个前提,就是HTTP2.0进行了二进制分帧,即会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
负责这个拆分、组装请求和二进制帧的一层就叫做二进制分帧层
也就是说,老板可以同时下达多个命令,员工也可以收到请求A和请求B,于是先回应A,结果发现处理A非常耗时,于是就发送A请求已经处理好的部分,接着回应B请求,完成后 ,再发送A请求剩下的部分。A请求的两部分响应再组合到一起发送给老板
除此之外还有一些其他的优化,比如Header压缩、服务端推送等
- Header压缩就是压缩老板和员工之间的对话
- 服务端推送就是员工事先把一些老板可能询问的事情提前发送到老板的手机上(缓存)。这样老板想要知道的时候就可以直接读取短信(缓存)了。
HTTP 和 HTTPS 的区别
HTTPS (Hyper Text Transfer Protocol over SecureSocket Layer):是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP+SSL,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS 采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。
- 开销:HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- 端口不同:HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- 安全性:HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
- 资源消耗:HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的SSL加密传输协议,需要消耗更多的CPU和内存资源
在OSI模型中,HTTP工作于应用层,而HTTPS工作于传输层;
HTTPS 优点
HTTPS 传输数据过程中使用密钥进行加密,所以安全性更高
HTTPS 协议可以认证用户和服务器,确保数据发送到正确的用户和服务器
HTTPS 缺点
HTTPS 握手阶段延时较高:由于在进行HTTP 会话之前还需要进行SSL 握手,因此HTTPS 协议握手阶段延时增加
HTTPS 部署成本高:一方面HTTPS 协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS 协议需要进行加解密的计算,占用CPU 资源较多。
ps:对称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥是真是假。为了保证发送方的公钥是真的,CA证书机构会负责颁发一个证书,里面的公钥确保是真的,用户请求服务器时,服务器将证书给用户,这个证书是经由系统内置证书的备案过的。
对称加密
加密与解密使用同样的密钥。对称加密效率较高,被广泛应用于各种加密协议,然而在通讯前需要将密钥发送给对方,容易导致密钥泄漏。
非对称加密
非对称加密使用了一对密钥:公钥和私钥。私钥只能由一方保管,不能外泄,而公钥则可以发给任何请求者。通过公钥加密的数据只能由私钥解开。相比对称加密而言,非对称加密是十分安全的,但是加密和解密效率却没有对称加密高。
HTTPS的通信建立过程
- 在使用HTTPS是需要保证服务端配置正确了对应的安全证书
- 客户端发送请求到服务端
- 服务端返回公钥和数字证书到客户端
- 客户端接收后会验证证书的安全性,如果通过,则会随机生成一个随机秘钥,用公钥对其加密,发送到服务端
- 服务端接受到这个加密后的随机秘钥后,会用私钥对其解密,随后用这个随机秘钥当做对称加密密钥对需要发送的数据进行对称加密
- 客户端在接收到加密后的数据对称加密密钥与服务器通信。
- SSL加密建立
什么是数字签名?
为了避免数据在传输过程中被替换,比如黑客修改了报文内容,但是用户并不知道,所以需要让发送端做一个数字签名,把数据的摘要信息进行一个加密,比如MD5,得到一个签名,和数据一起发送。然后接收端把数据摘要进行MD5加密,如果和签名一样,则说明数据是正确的
ps:MD5属于压缩技术,不是加密技术
什么是数字证书?
对称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥是真是假。为了保证发送方的公钥是真的,CA证书机构会负责颁发一个证书,里面的公钥确保是真的,用户请求服务器时,服务器将证书给用户,这个证书是经由系统内置证书的备案过的。