从开启网络线程到发出一个完整的http请求

每次网络请求时都需要开辟单独的线程进行,譬如如果URL解析到http协议,就会新建一个网络线程去处理资源下载
因此浏览器会根据解析出得协议,开辟一个网络线程,前往请求资源
步骤:
开启网络线程到发出一个完整的http请求
这一部分主要内容包括:dns查询,tcp/ip请求构建,五层因特网协议栈等等
DNS查询得到IP
1.域名组成:

 这是中央电视台用于手法电子邮件的计算机的域名,它由三个标号组成,其中标号com是顶级域名,标号cctv是二级域名,标号mail是三级域名。
2.域名只是逻辑概念, 并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:
        (1)国家顶级域名nTLD :采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。
        (2)通用顶级域名gTLD :最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
        (3)基础结构域名(infrastructure domain): 这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。

3.查询步骤
1、当 客户机 提出查询请求时,首先在本地 计算机 缓存 中查找。如果在本地无法获得查询信息,则将查询请求发给 DNS服务器

2、首先客户机将 域名 查询请求发送到本地DNS服务器,当本地DNS服务器接到查询后,首先在该 服务器管理 的区域的记录中查找,如果找到该记录,则利用此记录进行解析;如果没有区域信息可以满足查询要求, 服务器 在本地的缓存中查找。

3、如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名DNS服务器。

4、 根域名服务器 负责解析客户机请求的根域部分,它将包含下 一级域名 信息的DNS服务器地址返回给客户机的DNS服务器地址。

5、客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域我的DNS服务器地址。

6、按照上述 递归方法 逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应 IP地址 信息。

7、客户机的本地DNS服务器将递归查询结果返回客户机。

8、客户机利用从本地DNS服务器查询得到的IP访问目标 主机 ,就完成了一个解析过程。

tcp/ip请求
http的本质就是tcp/ip请求
需要了解3次握手规则建立连接以及断开连接时的四次挥手
tcp将http长报文划分为短报文,通过三次握手与服务端建立连接,进行可靠传输

三次握手的步骤:(抽象派)
客户端:hello,你是server么?服务端:hello,我是server,你是client么客户端:yes,我是client
建立连接成功后,接下来就正式传输数据
然后,待到断开连接时,需要进行四次挥手 (因为是全双工的,所以需要四次挥手)
四次挥手的步骤:(抽象派)
主动方:我已经关闭了向你那边的主动通道了,只能被动接收了被动方:收到通道关闭的信息被动方:那我也告诉你,我这边向你的主动通道也关闭了主动方:最后收到数据,之后双方无法通信
tcp/ip的并发限制
浏览器对同一域名下并发的tcp连接是有限制的(2-10个不等), 而且在http1.0中往往一个资源下载就需要对应一个tcp/ip请求, 所以针对这个瓶颈,又出现了很多的资源优化方案
get和post的区别
get和post虽然本质都是tcp/ip,但两者除了在http层面外,在tcp/ip层面也有区别。 本质区别get会产生一个tcp数据包,post两个
具体就是:
  • get请求时,浏览器会把headers和data一起发送出去,服务器响应200(返回数据),
  • post请求时,浏览器先发送headers,服务器响应100 continue, 浏览器再发送data,服务器响应200(返回数据)。
注:1.据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
2.并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
其他区别:
  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。
五层因特网协议栈
从客户端发出http请求到服务器接收,中间会经过一系列的流程。
简括就是: 从应用层的发送http请求,到传输层通过三次握手建立tcp/ip连接, 再到网络层的ip寻址,再到数据链路层的封装成帧, 最后到物理层的利用物理介质传输。
当然,服务端的接收就是反过来的步骤
五层因特尔协议栈其实就是:
1.应用层(dns,http) DNS解析成IP并发送http请求2.传输层(tcp,udp) 建立tcp连接(三次握手)3.网络层(IP,ARP) IP寻址4.数据链路层(PPP) 封装成帧5.物理层(利用物理介质传输比特流) 物理传输(然后传输的时候通过双绞线,电磁波等各种介质)
当然,其实也有一个完整的OSI七层框架,与之相比,多了会话层、表示层。
OSI七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
表示层:主要处理两个通信系统中交换信息的表示方式,包括数据格式交换,数据加密与解密,数据压缩与终端类型转换等会话层:它具体管理不同用户和进程之间的对话,如控制登陆和注销过程

有关HTTP请点HTTP详解


(前端小白,如有错误,欢迎指正~~)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值