#yyds干货盘点#前端到后端的访问过程
当我们在浏览器输入一个网址访问到一个网页,看似简单的过程,究竟在程序中如何运行?操作:在浏览器输入网址(如:www.baidu.com)
过程:
[*]浏览器先会进行域名获取(www.baidu.com),获取后通过DNS解析得到百度的IP地址(202.108.22.5),通过这个IP地址找到客户端到服务器的路径。
[*]浏览器与服务器建立TCP链接(默认端口80)通过TCP进行封装数据包,输入到网络层。客户端的网络层不需要关心应用层和传输层的东西,主要做的是通过查找确定如何到达服务器。
[*]浏览器发送HTTP请求向服务器获取百度首页。
[*]服务器通过HTTP响应把首页文件发送给浏览器。
[*]TCP链接释放
[*]浏览器解析首页文件,将Web页显示给用户。
思考的问题
过程1:
什么是DNS?--->域名解析服务器
怎么解析?(DNS解析过程)
[*] 浏览器检查自身缓存中有没有解析过这个域名
有,解析结束返回IP
没有,执行下面操作:
[*] 浏览器检查系统中有没有对应的已解析过的结果。
而操作系统也有对应解析过程:
在windows系统中的hosts文件进行设置,如果你在此指定了一个域名对应的ip地址,浏览器就会首先使用这个ip。(设置本地自己的博客方法)。
因为可以通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,就造成所谓的域名劫持.所以在windows7中将hosts文件设置成了管理员权限,防止被恶意篡改。(以前的黑-客操作)
[*]如果还没有找到,才会真正的请求本地域名服务器(LDNS)来解析域名。
这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
[*]如果LDNS仍然没有找到,就会找Root Server 域名服务器请求解析。
过程2:
TCP是什么?
传输控制层协议,面向字节流的通讯协议。
TCP的三次握手
[*]客户向服务器发送请求报文(客户端同步已发送状态)
[*]服务器收到请求报文,如果同意连接,向A发送确认报文(服务器同步收到)
[*]客户端收到服务器发送确认报文后(客户端已建立连接)服务器收客户端确定报文后(服务器已建立连接)。
TCP/UDP区别
TCP UDP
可靠性 可靠 不可靠
连接线 面向链接 面向无连接
报文 面向字节流 面向无连接
效率 低 高
传输速度 慢 快
应用场景 效率要求低 对效率高
精准度要求高 准确度低的场景
有连接的场景 远程文件服务器
电子邮件,HTTP
TCP的黏包问题
问题的产生
[*]TCP基于字节流,只维护送出去多少,客户端确定了多少,并没有维护信息与信息之间的边界,因而极有可能导致粘包问题。
[*] TCP所发送的的字节流中存在一个MSS(最大报文端长度),如果所发送的消息的字节过长,那么会对所发送的消息进行分割,那么也会直接导致粘包。
[*]tcp的延迟发送问题
问题的解决
应用层要维持消息与消息的边界(因为传输层,链路层,网络层都没有)
[*]在包的尾部加转义字符:\r\n(换行),但消息里面有就会出现问题
[*]采用包头加包体长度的方法,一般情况下包头是定长的,假如包头是4个字节,可以先接受包头的4个字节,从而计算出包体的长度,然后继续进行接受。
[*]当然,我们可以使用复杂的应用层协议。
过程3:
请求方式(8种,GET请求,POST请求)
GET使用给定的URI从给定服务器中检索信息(返回内容)
POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。(更新内容)
过程4:
响应方式(8种,与请求方式对应)
ps:状态码:200(请求成功)302(重定向访问),404(资源不存在),500(服务器报错),503(服务器暂时无法提供服务)
https://blog.51cto.com/u_14765571/4781214
页:
[1]