普通网民打开网页,访问网站,并不需要了解所谓HTTP协议。作为软件工程师,了解一下浏览器的工作过程还是一件比较有意思的事情。我向大家介绍一下当我们在浏览器的地址栏里面回车的时候,浏览器如何和Web服务器通信。

  DNS域名解析

  浏览器第一步做的是DNS域名解析。域名解析的主要作用是将域名转换成IP地址。例如www.sina.com.cn就是域名,202.108.33.81就是IP地址。Windows有个命令叫nslookup,就是域名解析命令。

  

  通过nslookup,我们发现新浪域名解析出好多IP地址,新浪Web网站规模大,所以Web服务器比较多,通过多台Web服务器解决负载问题。

  建立Socket连接

  第二步是和Web服务器建立Socket连接。Web服务器缺省是80端口。我们在地址栏里面输入http://www.sina.com.cn,浏览器连接202.108.33.81服务器的80端口。如果Web服务器不是80端口,例如8080端口,我们需要输入http://www.sina.com.cn:8080。

  HTTP请求和响应

  第三步是浏览器通过Socket向Web服务器发送HTTP请求,接收HTTP响应。HTTP协议比较复杂,下面是一个HTT请求的例子:

  Host:rss.sina.com.cn

  User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

  Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

  Accept-Language:zh-cn,zh;q=0.5

  Accept-Encoding:gzip,deflate

  Accept-Charset:gb2312,utf-8;q=0.7,*;q=0.7

  Keep-Alive:300

  Connection:keep-alive

  Cookie:userId=C5bYpXrimdmsiQmsBPnE1Vn8ZQmdWSm3WRlEB3vRwTnRtW <-- Cookie

  If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT

  Cache-Control:max-age=0

  HTTP 响应消息头部实例:

  Status:OK - 200

  Date:Sun, 01 Jun 2008 12:35:47 GMT

  Server:Apache/2.0.61 (Unix)

  Last-Modified:Sun, 01 Jun 2008 12:35:30 GMT

  Accept-Ranges:bytes

  Content-Length:18616

  Cache-Control:max-age=120

  Expires:Sun, 01 Jun 2008 12:37:47 GMT

  Content-Type:application/xml

  Age:2

  Connection:close

  下载网页文本内容

  第四步浏览器下载网页文本内容,网页文本中标记着图片、CSS文件和Flash等等。浏览器分析出这些内容后开4个线程对这些内容进行下载,显示在屏幕上。

浏览器HTTP请求分析的更多相关文章

  1. 爬虫概要及web微信请求分析

    一.爬虫概要 1.网络爬虫是什么 百度百科:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常 ...

  2. [原]Django慢请求分析工具--dogslow

    当你的网站突然变慢了,你怎么办? 先看监控,查看系统的资源消耗,CPU?IO?磁盘? 然后看日志,查看第一个出现慢请求的接口是哪个? 然后看依赖的服务,是第三方服务还是DB瓶颈,还是redis变慢,还 ...

  3. httpClient模拟浏览器发请求

    一.介绍 httpClient是Apache公司的一个子项目, 用来提高高效的.最新的.功能丰富的支持http协议的客户端编程工具包.完成可以模拟浏览器发起请求行为. 二.简单使用例子 : 模拟浏览器 ...

  4. 浏览器助手,请求拦截,后台模拟键鼠操作,页内嵌入JS

    http://www.cnblogs.com/ /// <summary>        /// 网页浏览器助手        /// 请求拦截,后台模拟键鼠操作,页内嵌入JS       ...

  5. 用户代理检测与浏览器Ua详细分析

    用户代理检测与浏览器Ua详细分析:http://www.cnblogs.com/hykun/p/Ua.html

  6. fiddler抓不到chrome浏览器的请求

    今天遇到一个非常尴尬的问题,接口在某种情况下会报错,此时前端会展示NAN之类的东西,由于复现不了,接口现在一直不报 错了,所以就让前端做了个友好提示, 当接口报错时,给个提示“请稍后重试” ,我要测试 ...

  7. 使用HttpClient配置代理服务器模拟浏览器发送请求调用接口测试

    在调用公司的某个接口时,直接通过浏览器配置代理服务器可以请求到如下数据: 请求url地址:http://wwwnei.xuebusi.com/rd-interface/getsales.jsp?cid ...

  8. iOS美丽约网络请求分析

    网络请求分析html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padd ...

  9. 关于onscroll函数兼容各浏览器的方法分析

    关于window.onscroll函数兼容各浏览器的方法分析 1.当前文档的渲染模式是决定onscroll函数兼容性根本原因 目前浏览器的排版引擎有三种模式:怪异模式(Quirks mode).接近标 ...

随机推荐

  1. 【mysql】mysql统计查询count的效率优化问题

    mysql统计查询count的效率优化问题 涉及到一个问题 就是 mysql的二级索引的问题,聚簇索引和非聚簇索引 引申地址:https://www.cnblogs.com/sxdcgaq8080/p ...

  2. 资源合并fis-postpackager-simple插件的使用

    FIS默认只会进行文件打包,不会对页面中的静态资源引用进行替换,这时可以利用fis-postpackager-simple插件进行资源替换. 安装: npm install -g fis-postpa ...

  3. [翻译] SoundManager 音频管理器

    SoundManager 音频管理器 https://github.com/nicklockwood/SoundManager Purpose SoundManager is a simple cla ...

  4. Andorid之Annotation框架初使用(五)

    注入res文件夹的资源: @StringRes @EActivity public class MyActivity extends Activity { @StringRes(R.string.he ...

  5. docker学习总结--安装、卸载

    参考:http://blog.csdn.net/u012562943/article/details/50463400 https://docs.docker.com/engine/getstarte ...

  6. C#中this的作用

    一.C# this指针的几种用法 1.限定被相似的名称隐藏的成员   C# 代码   复制 public class ThisName { public string name = "张三& ...

  7. JSP学习笔记(一):JSP语法和指令

    一.语法 1.脚本程序的语法格式: 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. <% 代码片段 %> 2.中文编码问题 如果我们要在页面正常显 ...

  8. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  9. WordPress 禁用文章修订和自动保存的方法

    以下代码亲测并没有效果,不能禁用自动保存  /* 移除自动保存和修订版本 */ remove_action('pre_post_update', 'wp_save_post_revision' ); ...

  10. 关于DrawIndexedPrimitive函数的调用

    函数的原型例如以下所看到的: HRESULT DrawIndexedPrimitive( [in] D3DPRIMITIVETYPE Type, [in] INT BaseVertexIndex, [ ...