当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)
>>>点击网址后,应用层的DNS协议会将网址解析为IP地址;
DNS查找过程:
浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。
如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存(hosts文件)中是否有这个域名对应的DNS解析结果。
若还没有,此时会发送一个数据包给DNS服务器,DNS服务器找到后将解析所得IP地址返回给用户。
>>>在应用层,浏览器会给web服务器发送一个HTTP请求;
请求头为:GET http://www.baidu.com/HTTP/1.1
>>>在传输层,(上层的传输数据流分段)HTTP数据包会嵌入在TCP报文段中;
TCP报文段需要设置端口,接收方(百度)的HTTP端口默认是80,本机的端口是一个1024-65535之间的随机整数,这里假设为1025,这样TCP报文段由TCP首部(包含发送方和接收方的端口信息)+ HTTP数据包组成。
>>>在网络层中,TCP报文段再嵌入IP数据包中;
IP数据包需要知道双方的IP地址,本机IP地址假定为192.168.1.5,接受方IP地址为220.181.111.147(百度),这样IP数据包由IP头部(IP地址信息)+TCP报文段组成。
>>> 在网络接口层,IP数据包嵌入到数据帧(以太网数据包)中在网络上传送;
数据帧中包含源MAC地址和目的MAC地址(通过ARP地址解析协议得到的)。这样数据帧由头部(MAC地址)+IP数据包组成。
>>>数据包经过多个网关的转发到达百度服务器,请求对应端口的服务;
服务接收到发送过来的以太网数据包开始解析请求信息,从以太网数据包中提取IP数据包—>TCP报文段—>HTTP数据包,并组装为有效数据交与对应线程池中分配的线程进行处理,在这个过程中,生成相应request、response对象。
>>>请求处理完成之后,服务器发回一个HTTP响应;
请求处理程序会阅读请求及它的参数和cookies。它会读取也可能更新一些数据,并将数据存储在服务器上。处理完毕后,数据通过response对象给客户输出信息,输出信息也需要拼接HTTP协议头部分,关闭后断开连接。断开后,服务器端自动注销request、response对象,并将释放对应线程的使用标识(一般一个请求单独由一个线程处理,部分特殊情况有一个线程处理多个请求的情况)。响应头为:HTTP/1.1200 OK
>>>浏览器以同样的过程读取到HTTP响应的内容(HTTP响应数据包),然后浏览器对接收到的HTML页面进行解析,把网页显示出来呈现给用户。
客户端接收到返回数据,去掉对应头信息,形成也可以被浏览器认识的页面HTML字符串信息,交与浏览器翻译为对应页面规则信息展示为页面内容。
转自:http://blog.csdn.net/random__walker/article/details/52040146
当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)的更多相关文章
- 笔试常考--浏览器输入一个URL点击回车之后发生了什么
解析URL:浏览器首先对拿到的URL进行识别,抽取出域名字段. DNS解析: 查询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间),如果没有找到, 检查系统缓存,检查hosts文件,这个文 ...
- 用list<类>集合接收一个网址返回的一个类的集合的XML
JavaScriptSerializer serializer = new JavaScriptSerializer(); string json = Share.Helper.HttpRequest ...
- 在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程)
在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程) 原文链接:http://www.360doc.com/content/14/1117/10/16948208_42571794 ...
- 一个http请求从用户输入网址开始到结束都发生了什么
一个http请求从用户输入网址开始到结束都发生了什么 一.一个http请求从开始到Django后台,到结束发生了什么 通过用户输入的域名解析出IP地址 TCP/IP 三次握手 进入nginx--- ...
- 当你在浏览器输入一个网址(如http://www.taobao.com),按回车之后发生了什么?
首先你输入了一个网址并按下了回车,这个时候浏览器会根据这个URL去查找其对应的IP,具体过程如下: 首先是查找浏览器缓存,浏览器会保存一段时间你之前访问过的一些网址的DNS信息,不同浏览器保存的时常不 ...
- 输入一个URL到页面呈现其中发生的过程-------http过程详解
在我们点击一个网址,到它能够呈现在浏览器中,展示在我们面前,这个过程中,电脑里,网络上,究竟发生了什么事情. 服务器启动监听模式 那我们就开始了,故事其实并不是从在浏览器的地址栏输入一个网址,或者我们 ...
- 【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思(转载)
原文:https://blog.csdn.net/catshitone/article/details/71213371 新建一个wpf的项目,我们先来看下它默认的命名空间都是哪些? 可以看到xmln ...
- 【一个小功能】点击图标/链接发起QQ临时会话
有时候,我们需要实现在网页上点击一个QQ图标来实现QQ临时会话,这样不用添加好友,也能满足及时沟通的需求. 实现方案比较简单,只是为a标签修改href属性,代码如下 <a href=" ...
- 各位客官!鼠标点击一个Button之后究竟发生了什么?您知道么?(C#)
在谈论主题之前,让我们先简单回顾下事件的基础知识吧! 我们知道事件有发出(raises)事件的源,即event sender,也有接收事件通知(notifications)的接收者,即event re ...
随机推荐
- Dijkstra算法解决单源最短路径
单源最短路径问题:给定一个带权有向图 G = (V, E), 其中每条边的权是一个实数.另外,还给定 V 中的一个顶点,称为源.现在要计算从源到其他所有各顶点的最短路径长度.这里的长度是指路上各边权之 ...
- 有哪些适合新手练手的Python项目?
http://blog.csdn.net/Lina_ACM/article/details/54581721
- luogu P3305 [SDOI2013]费用流
题目链接 bz似乎挂了... luogu P3305 [SDOI2013]费用流 题解 dalao告诉我,这题 似乎很水.... 懂了题目大意就可以随便切了 问1,最大流 问2,二分最大边权求,che ...
- [BZOJ 1150] 数据备份
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1150 Solution: 思路和洛谷P1484完全相同 只不过将求最大不相邻的点权改为最 ...
- [CF935F]Fafa and Array
法法round(雾 题意:给一个序列$a_{1\cdots n}$,定义$\begin{align*}f=\sum\limits_{i=1}^{n-1}\left|a_i-a_{i+1}\right| ...
- 【点分治】poj1741 Tree / poj2114 Boatherds / poj1987 Distance Statistics
三道题都很类似.给出1741的代码 #include<cstdio> #include<algorithm> #include<cstring> using nam ...
- 【进制转换】codevs 1474 十进制转m进制
#include<cstdio> using namespace std; ],en; int main() { scanf("%d%d",&n,&m) ...
- [美团 CodeM 初赛 Round A]最长树链
题目大意: 给你一棵带点权的树,找出一个最长的树链满足链上点权的最大公因数不为1. 思路: 暴力DP. 对于每个点,记录一下以这个点为一个端点的所有链的最大公因数及长度. 然后暴力转移一下,时间复杂度 ...
- 解决Post提交乱码问题
在web.xml里面配置 <filter> <filter-name>charac</filter-name> <filter-class>org.sp ...
- 更新升级10.11 cocoapods安装出问题最简单的解决方法
这是因为10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句,完美解决 sudo xcode-select -- ...