浏览器与服务器响应流程-----(转)

一. 解析域名地址为IP地址

浏览器DNS缓存:以Chrome为例,在浏览器窗口中输入chrome://net-internals/#dns,就可以查看当前浏览器DNS缓存记录,chrome的DNS缓存过期时间还是比较短的,大约为1分钟。

本机DNS缓存:在Windows命令行模式下输入ipconfig /displaydns,就可以查看本机DNS缓存记录。许多主机在启动时从本地域名服务器下载域名和地址的全部数据库,维护存放自己最近使用的域名的缓存。

本地域名服务器:在Windows命令行模式下输入ipconfig /all,就可以查看本地DNS服务器的IP地址,一般而言本地域名服务器都是由ISP提供,主机通过UDP和本地域名服务器通信。如果在本地域名服务器高速缓存中搜索不到要转换的域名,就向更高级别的域名服务器发起迭代查询,按根域名服务器(一般查询根域名服务器都是遵循就近原则,中国有3个根服务器,位置分别为北京,香港,台北)-> 顶级域名服务器-> 权限域名服务器的顺序询。假如本地域名服务器高速缓存中存在顶级域名服务器.com的IP地址,那么本地域名服务器可以不向根域名服务器进行查询,而是直接向com顶级域名服务器发送UDP请求报文,这样就可以大大减轻根域名服务器的负荷。维护本地域名服务器数据库的主机自然应该定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删掉无效的项。

二. TCP 连接建立

由上一步获取www.cnblogs.com的IP地址42.121.252.58后,客户端主机就会选择一个未使用的端口与42.121.252.58:80通信,在Windows命令行模式下输入netstat,就可以查看当前正在活动的TCP连接。

Client首先发送一个连接试探,ACK=0 表示确认号无效,SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,seq = x 表示Client自己的初始序号。

Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。TCP报文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到,seq = y 表示Server 自己的初始序号。

Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK 置1 表示确认号ack= y + 1 有效,Client自己的序号seq= x + 1。

三. 浏览器给服务器发送一个http请求

上一步中有提到Client收到确认后还需再次发送确认,这时就可以携带要发送给Server的数据,这个数据就是HTTP请求报文。

HTTP请求行:GET http://www.cnblogs.com/  HTTP/1.1

HTTP请求首部:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie:省略
Host:www.cnblogs.com
If-Modified-Since:Mon, 22 Apr 2013 09:12:11 GMT
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1354.0 Safari/537.21

 

这里重点提一下Connection。

Connection设置为keep-alive,就是Server在发送响应后仍然在一段时间内保持这条连接,使同一Client可以继续在这条连接上传送后续的HTTP请求报文和响应报文。对于不同的web服务器,如IIS,Apache,都有不同的keep-alive 过期时间,当然如果过期时间太短,就达不到重用连接的效果,如果过期时间太长,则会造成占用资源的坏处。

四. 服务器给浏览器发送一个http响应

当Server接收到http请求的时候,就把请求交给专门的web服务器处理,并最终把数据发送给Client,这个数据就是HTTP响应报文。

HTTP状态行:HTTP/1.1 200 OK

HTTP响应首部:

 

Cache-Control:public, max-age=62
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Wed, 24 Apr 2013 08:14:03 GMT
Expires:Wed, 24 Apr 2013 08:15:04 GMT
Last-Modified:Wed, 24 Apr 2013 08:13:04 GMT
Server:Tengine
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET
X-UA-Compatible:IE=edge

 

 

 

   

     最后就是HTTP响应主体内容--html文档了,如果需要继续获取嵌套在html中的对象,且这些对象都存在于同一个服务器上时,这些HTTP请求就会重用现存TCP连接。

五. TCP 连接释放

在正常情况下,服务器端的keep-alive过时了,就会主动发出请求释放这条TCP连接。

 

 

 

Server发送一个连接释放报文,FIN = 1 表示Server的数据已发送完毕,seq = v ,v等于前面已传送过的数据的最后一个字节加1。

Client收到Server的连接释放请求后,发送一个确认报文。ACK = 1 表示确认后ack有效,ack = u+1表示期望收到对方下一个报文段的第一个数据字节序号是u+1 ,seq = v , v等于前面Client已传送过的数据的最后一个字节加1。

由于HTTP协议是基于请求-响应模型,所以这时Client再发送请求数据给Server已经无效了,因为Server到Client的TCP连接已关闭,不会再发送响应了。这里的Close-Wait大概是等待主机通知关闭这次TCP连接。

接下来Client就发送一个连接释放给Server,FIN=1,ACK=1,ack = u + 1 与之前发送给Server的确认号一样。这里的seq = v 也与之前的一样。(个人认为Close-Wait期间Client不会再发送数据给Server,所有数据序号并没有发生改变,正确与否有待考证)

Server收到连接释放报文后,便发送一个确认报文。然后进入Time-Wait,而不是立即关闭连接,原因是不保证这个确认报文没有丢失,而Client收不到确认报文则执行超时重传FIN+ACK,这时Server还未关闭,就可以重传ACK。

 

转载于:https://www.cnblogs.com/shao-shao/articles/3489436.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pc-98 android,PC安卓多功能搞机助手3.98

V3.98版本更新日志:1.全新多设备检测机制,底层代码重写;2.新增支持检测安卓用户是否允许当前电脑调试设备;3.软件冻结#卸载中新增清除指定应用数据;4.小米线刷检测功能优化,修复之前版本不能正确识别设备是…

拼接路径的两种方式

//本文永久链接,转载请注明出处:http://www.cnblogs.com/ChenYilong/p/3490669.html https://www.evernote.com/shard/s227/sh/1401e497-899e-4b04-9ff6-e1d9638e9f25/f6b722ed5cb2c5f603a9b242ee7fe230转载于:https://www.cnblogs.com/ChenYilong/p/3490669.html

android像素鸟,像素鸟Flappy Bird

Flappy Bird是最近非常热门的一款像素游戏,Flappy Bird 的游戏规则异常简单:和Frogmind Games的成名作品BADLAND类似,玩家只需要点击屏幕就可以操作游戏,控制角色通过各种障碍。看似简单的规则下是让人抓狂的游戏难度。首先&#…

Android是什么 之三手机之硬件形态

手机硬件形态  本节可能与Android无关,但是Android系统现在这个阶段更多的是移动终端形态的开发平台,本节给出了Android背后的工作-Android管理的硬件是什么,Android的本质就是要管理好这些硬件部分,为用户提供一个体验更好&…

品味性能之道十一:JAVA中switch和if性能比较

通常而言大家普遍的认知里switch case的效率高于if else。根据我的理解而言switch的查找类似于二叉树,if则是线性查找。按照此逻辑推理对于对比条件数目大于3时switch更优,并且对比条件数目越多时switch的优势越为明显。一、测试目的最近与开发同学对于前…

miniblink载入html,winform使用miniblink展示html(全屏)

【实例简介】使用miniblink 展示html的例子,miniblink基于chromium的浏览器控件【实例截图】点击下图中的百度,即可 实现全屏访问 百度网页 ,如下图:其实是winform嵌入的这个网页,打开即是 全屏效果【核心代码】using …

html设置照片模糊效果,CSS如何实现照片模糊?

在开发网页时,照片模糊处理会经常被使用,比如当我们背景图的模糊,当我们不想背景图片过于突出影响美观时,就可以设置将照片模糊处理,突出文字部分。那么 CSS 如何实现照片模糊呢?这篇文章 w3cschool 小编告…

女生学计算机未来出路,计算机真的已经烂大街了吗,女生学计算机没出路吗?...

假的。先说第一个问题:情况是,现在程序员是很多,但多半是中低端程序员,高端程序员供不应求,薪资一涨再涨。现在的程序员门槛一高再高,就是为了淘汰掉那些半吊子的程序员。如果你是靠从网上复制粘贴代码的“…

这些快捷键要学会使用啊

史上最全苹果键盘及Xcode快捷键整理 它们分别是command、option、control、shift以及esc除了command键上有标志之外其余四个可以通过这四个键对比比较出来。 谢谢原文作者提供较详细的快捷键说明。 常用的Xcode快捷键,工欲善其事,必先利其器。mac的键盘和…

关机计算机专业,电脑关机后自动重启怎么回事

日常生活中,大部分的网友朋友们都碰到过电脑在正常使用时,突然电脑自动重启了,并且多次尝试强制关机都无效,令人费神。下面小编针对此问题的原因给出了几种方法,希望对大家有所帮助,快来看看吧!…

计算机无法打开打印机ip端口,讲述Win10电脑上无法选择打印机端口的解决方法...

我们在Win10电脑上使用打印机,进行打印材料是很平常的一件事,但是有用户在Win10电脑上,操作打印机时,出现了打印机端口无法选择的问题,不知道该怎么办?如果打印机端口无法正常选择的话,就代表我…

计算机WIN7动态硬盘分区,win7硬盘分区教程

win7硬盘分区教程硬盘分区其实是对硬盘的一种格式化,进行了此步骤后才可以使用硬盘保存各种数据,下面是小编为大家详细介绍win7硬盘分区教程,欢迎大家阅读!一、进入磁盘管理工具我们点击要对硬盘进行分区,我们首先得知…

计算机的alu的作用,算术逻辑运算单元(ALU)的基本功能是什么 – 手机爱问

2004-12-28解释定点运算器的功能和组成部件解释定点算器包括ALU\阵列乘除器\寄存器\多路开关\三态缓冲器\数据总线等逻辑部件。运算器的设计,主要是围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果进行的。在决定方案时,需要考虑数据传送的方便性和操作速度,在微型机和…

笔记本上的小键盘计算机怎样用,笔记本数字小键盘不能用怎么办【解决方法】...

许多笔记本键盘中都会携带一个小键盘,与台式电脑的键盘大小差不多,小键盘上面标注着阿拉伯数字0到9,非常适合会计行业的人们使用。小键盘可以帮助人们快速地将数字敲打出来,使用起来极为方便。要知道,大键盘属于输入设…

批量Append

GIS数据是按照图幅号组织的,现需要每个单独的系统数据进行拼接。 以下是批量追加代码: # --------------------------------------------------------------------------- # Append.py # Created on: 2013-01-21 10:25:22.00000 # (generated by ArcGI…

jquery ajax php中 css样式不显示,Chrome浏览器在Ajax同步调用之前不会显示Jquery的动态css Propery更改...

我有如下因素HTML节点:上的click事件会触发聊天对象的方法this.addUser function(trigger_node, id, is_silent, session, show_block_message){if(trigger_node){this.bk_trigger_node.html trigger_node.innerHTML;this.bk_trigger_node.cn trigger_node.class…

email协议与服务器关系,常见的邮件协议:POP3、IMAP、SMTP之间的区别和联系

POP3POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员,主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3是因特网电子邮件的第一个离线协议标准,允许用户从服务器上把邮件存储到本地主…

php 连接mssql

以前用的都是mysql,今天突然想用下mssql,起先用的是sql server200. 第一种方法 打开mssql.dll拓展。然后把mssql.secure_connection off改为on 使用mssql拓展。类似于mysql拓展库 $connmssql_connect((local),sa,); if(!$conn){ //die(mssql_error()); …

2013年未之wpf项目乱述

不知识为何现已很少在网上发帖,貌似人生的方向已经看的七七八八.要么用心工作,要么自主创业.无论怎么样,对于现在的我来说都是一种淡定的选择。作为一个c#程序员,今年下半年开始使用wpf,更觉得wpf将来肯定会是win 客户端上的首选技术。 今年在公司共用wp…

(转) PowerDesigner中Table视图同时显示Code和Name

PowerDesigner中Table视图同时显示Code和Name,像下图这样的效果: 实现方法:Tools-Display Preference 转载于:https://www.cnblogs.com/wallis0922/p/3548402.html