http://www.cnblogs.com/maybe2030/p/4781555.html
三次握手四次挥手
三次握手:
- client发送连接请求
syn
- server接受连接后回复
syn+ack
- client 收到ack后也向server发送
ack
四次挥手:
- (假设)client发起中断连接请求,也就是发送
FIN
报文.
server端接到FIN
后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK
,这个时候Client端就进入FIN_WAIT1状态 - server发送
ack
,'你的请求我收到了,但是我还没准备好,请继续你等我的消息', - client收到
ack
, 进入FIN_WAIT2状态,继续等待Server端的FIN报文。 - server端确定数据已发送完成,则向Client端发送
FIN
报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了" - client收到fin后回复
ack
, (不相信网络,怕Server端不知道要关闭),发送ack后进入TIME_WAIT状态 - Server端收到ACK后,"就知道可以断开连接了"
- Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
http2.0与http1
https://imququ.com/post/http2-resource.html
多路复用 (Multiplexing)
多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息
二进制分帧
在 应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。
HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 。
改进传输性能,实现低延迟和高吞吐量。
首部压缩
服务端推送
在客户端请求之前发送数据的机制
https与http区别
https://juejin.im/entry/58d7635e5c497d0057fae036
基本概念
HTTP:超文本传输协议
,被用于在Web浏览器和网站服务器之间传递信息。传输的数据都是未加密的,也就是明文
的。
HTTPS:HTTP的安全版,即HTTP下加入SSL层。可进行加密传输
、身份认证
的网络协议。
区别
- https协议需要到ca申请
证书
,需要一定费用。 - http是超文本传输协议,信息是
明文
传输,https则是具有安全性的ssl加密
传输协议。 -
端口
也不一样,前者是80,后者是443。 - http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行
加密传输、身份认证
的网络协议,比http协议安全
。
HTTPS原理
采用HTTPS协议的服务器必须要有一套数字证书
,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
证书其实就是一对公钥和私钥
。
过程:
- 客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到server的443端口。 - 传送证书(公钥)
- 客户端解析证书
客户端的TLS来完成
首先会验证公钥是否有效;
如果证书没有问题,那么就生成一个随机值,用证书对该随机值进行加密。 - 传送加密信息
目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。 - 服务段解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密(将信息和私钥通过某种算法混合在一起) - 传输加密后的信息
- 客户端解密信息
服务器资源使用
HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包;
HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。
HTTPS优点
- 安全
- 谷歌搜索排名高
HTTPS缺点
- 会使页面的加载时间延长近50%,握手阶段比较费时,增加10%到20%的耗电,影响缓存,增加数据开销和功耗。
- HTTPS连接服务器端资源占用高很多
- HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本太高
- 加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
- SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
- SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
- SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗
网络层次划分
OSI七层
物理层,数据链路层,网络层,传输层,应用层
TCP/IP五层
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
输入url过程
在浏览器中输入www.baidu.com 后执行的全部过程:
- 客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。
客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。 - 传输层,把HTTP会话请求分成报文段,添加源和目的端口。
如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。 - 网络层,不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器。
- 链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。
ajax请求过程
我理解Ajax 是一种异步请求数据的一种技术,对于改善用户的体验和程序的性能很有帮助
(1)创建XMLHttpRequest
对象,也就是创建一个异步调用对象.
(2)创建一个新的HTTP
请求,并指定该HTTP
请求的方法、URL
及验证信息.
(3)设置响应HTTP
请求状态变化的函数.
(4)发送HTTP
请求.
(5)获取异步调用返回的数据.
(6)使用JavaScript和DOM实现刷新
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET','demo.php','true');
xmlHttp.send()
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState === 4 & xmlHttp.status === 200){
}
}
细节
-
xmlhttp.open(method,url,async);
: 创建一个新的HTTP
请求- method:请求的类型;GET 或 POST
- url:文件在服务器上的位置,相对位置或绝对位置
- async: true(异步)或 false(同步)
True 表示脚本会在 send() 方法之后继续执行,而不等待来自服务器的响应。
-
send(string)
方法post请求时才使用
xmlhttp.send("fname=Herry&lname=Ford");
服务器返回数据
responseText 获得字符串形式的响应数据。
responseXML 获得XML 形式的响应数据。异步处理
xmlhttp.onreadystatechange=function () {//接收到服务端响应时触发
if(xmlhttp.readyState==4&&xmlhttp.status==200){
document.getElementById("mydiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.readyState
: 请求状态,从0 到 4 发生变化
- 1: 服务器连接已建立
- 2: 请求已接收
- 3: 请求处理中
- 4: 请求已完成,且响应已就绪
xmlhttp.status
:响应状态码 - 304:该资源在上次请求之后没有任何修改(这通常用于浏览器的缓存机制,使用GET请求时尤其需要注意)。
- 403 (禁止) 服务器拒绝请求。
- 408 (请求超时) 服务器等候请求时发生超时。
- 500 (服务器内部错误) 服务器遇到错误,无法完成请求。