一. 解析域名地址为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

浏览器与服务器响应流程-----(转)相关推荐

  1. pdf意外的服务器响应,浏览器及服务器响应流程.pdf

    当我们在浏览器中输入了一个URL 地址(如),从等待到页面显示的过 程中,后台究竟发生了什么处理呢? . 解析域名地址为IP 地址 浏览器DNS 缓存:以Chrome 为例,在浏览器窗口中输入 chr ...

  2. 什么请求服务器响应快,HTTP请求与服务器响应流程

    1. H遇新是直朋能到分览支体调TTP 简介 1.遇新是直朋能到分览1定义 用能境战求道,重件开又是正易里是了些之框 1.2 请求/响应报文格求圈分件圈浏第用代是水刚道.的它还式 1.3请求方式--G ...

  3. 360浏览器查看服务器响应内容,360浏览器怎么看3个月以前的浏览记录?

    360浏览器怎么看3个月以前的浏览记录? 有时候我们想查找浏览器的浏览记录,这个比较简单,Ctrl+h直接查看,或者如图直接查看.然而有些记录在3个月之前就坑爹了,浏览器是看不到的怎么办呢? 比如几天 ...

  4. Servlet学习DAY_01:服务器概念/Web服务器的作用/ Servlet概念/ 如何关联和解除Tomcat/ 创建一个Web工程 /Servlet响应流程/ Get-Post /常见异常

    Servlet 什么是服务器 服务器就是一台高性能电脑 电脑上安装了提供服务的软件就称为 xxx服务器 举例: 邮件服务器: 就是在电脑上安装了提供邮件收发服务的软件 ftp服务器: 就是在电脑上安装 ...

  5. 一、服务端开发基础(搭建Web服务器、网络基础概念、请求响应流程、配置Apache、静态网站与动态网站)

    一.建立你的第一个网站(目标) 前端开发 最终还是属于 Web 开发 中的一个分支,想要成为一名合格的前端开发人员,就必须要 充分理解Web 的概念. 构建一个专业的网站是一项巨大的工作!对于新手我们 ...

  6. 406(浏览器接收的响应类型和服务器返回的响应类型不匹配)

    也就是说,浏览器所接收的数据格式与服务器响应的数据格式是不匹配的. 浏览器接收的数据格式一般可以是任意格式,但是我们在发起Ajax请求时就已经确定了要接收的是Jsonp格式 响应的数据类型定义在的co ...

  7. 浏览器获取服务器CA证书与认证流程-HTTPS

    证书的签发过程 服务方 S 向第三方机构CA提交公钥.组织信息.个人信息(域名)等信息并申请认证: CA 通过线上.线下等多种手段验证申请者提供信息的真实性,如组织是否存在.企业是否合法,是否拥有域名 ...

  8. wifi因服务器停止响应,如果浏览器由于服务器停止响应而无法打开网页,该怎么办...

    如果浏览器由于服务器停止响应而无法打开网页,该怎么办 如果野生动物园浏览器由于服务器停止响应而无法打开网页,该怎么办?如果您在使用Safari浏览网页的过程中遇到消息" Safari无法打开 ...

  9. 浏览器跨域服务器响应了吗,浏览器跨域问题之HTTP跨域响应头 | kTWO-个人博客

    摘要 本篇文章主要讲解HTTP中的几种响应头,解决web开发中常见的浏览器跨域问题CORS,主要包括了四个HTTP响应报文中的四个字段,同时讲解了如何携带cookie进行跨域. 0x01 浏览器跨域 ...

最新文章

  1. Uber推出数据湖集成神器DBEvents,支持MySQL、Cassandra等
  2. 第6次全天课笔记-20180819
  3. python os模块详细_Python文件系统功能--os模块详解
  4. 截取中文字符长度(中文、字母都有效)
  5. fpm制作mysql rpm包_FPM简介(定制rpm包)
  6. 我为什么fuck GFW同时FUCK 开心网
  7. 如何做Teams Bot的测试覆盖
  8. ThinkPHP中where()方法的使用
  9. 美团深度学习系统的工程实践
  10. 配置iscsi服务器_在Windows Server 2016上安装和配置iSCSI目标服务器
  11. 热烈欢迎 东北鸿顺山特产品有限公司网站正式上线
  12. 关于sql中处理日期的相关函数
  13. python xlwt库的详细函数介绍,xlwt
  14. JVM垃圾回收机制【简单介绍】
  15. 获取微信所有聊天记录数据并通过Python制作词云图
  16. MSN 与六度分隔理论(转)
  17. Docker生态系统:常规组件简介
  18. java 断点下载_java的断点下载
  19. java f1_JAVA编码(19)——java使用f1j9swing来生成excel文件
  20. fastqc v0.11.8

热门文章

  1. 宝塔php扩展fil_宝塔面板安装Redis给WordPress网站加速优化教程
  2. 基于java SSM springboot+redis网上水果超市商城设计和实现以及文档
  3. 归并排序--Java
  4. html5情人节贺卡,Web工程师的情人节卡片
  5. php mysql 分行执行,php执行mysql存储及执行脚本
  6. php基础学哪些,榆林学习php需要哪些基础(PHP是什么)
  7. matlab 红黑强度图片,matlab图形锐化程序
  8. java canvas 画图片_canvas画布——画八卦图
  9. java语言sql接口_Java语言SQL接口
  10. IDEA 生成get和set方法