http://hi.baidu.com/ywqme/item/b5297014b2e58f4e6826bb74

概述

  普通网民打开网页,访问网站,并不需要了解所谓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个线程对这些内容进行下载,显示在屏幕上。

[转]浏览器如何和Web服务器通信的更多相关文章

  1. 无法在Web服务器上启动调试,与Web服务器通信时出现身份验证错误

    问题描述: 我使用的是修改hosts,模拟真实网址来进行调试的.具体是这样的:我修改hosts文件,把某个域名,如www.163.com映射为127.0.0.1,然后在IIS信息管理器中,创建一个网站 ...

  2. 利用XMLHttpRequest(XHR)对象实现与web服务器通信

    XMLHttpRequest对象:XMLHttpRequest是一个JS对象,页面利用它与web服务器通信.XHR对象的基本思想是让JS代码自己发送请求,以便随时获取数据,这种请求是异步的,也就是说请 ...

  3. 网络安全从入门到精通(第一章-1)Web服务器通信原理

    本文内容 IP地址 域名 端口 HTTP协议 从访客角度看网页浏览器流程 常见服务器系统 路径 Web容器 常见的Web容器 !!!多动手,多动手,只看只听是不行的!!! 1,IP地址:就是计算机在互 ...

  4. http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤

    http通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: (1)    建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成 ...

  5. 关于Web服务器的认识

    马上就要毕业了,也要开始找工作了,大学写了这么多代码了,却没有好好总结一下常用的概念很是遗憾额,就通过这篇博客记录一下我最常用的一些知识好了. 说到Web服务器,有很多文章都介绍的很好,之前看到一篇非 ...

  6. 【WEB】一个简单的WEB服务器

    WEB 服务器如何工作的?   HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从H ...

  7. C#中使用Socket实现简单Web服务器

    上一篇博客中介绍了怎样使用socket访问web服务器.关键有两个: 熟悉Socket编程: 熟悉HTTP协议. 上一篇主要是通过socket来模拟浏览器向(任何)Web服务器发送(HTTP)请求,重 ...

  8. C#中使用Socket请求Web服务器过程

    最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生. 而有人或许会问: ...

  9. 详谈socket请求Web服务器过程

    最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生. 而有人或许会问: ...

随机推荐

  1. Android之使用SharedPreferences保存用户偏好参数

    在Android应用中,我们常需要记录用户设置的一些偏好参数,,此时我们就需要用SharedPreferences和Editor将这些信息保存下来,在下次登录时读取. SharedPreference ...

  2. P2P

    https://www.ppmoney.com/Withdraw http://www.daibang.com/

  3. 常用的dos命令之简略总结

    Dos常用命令  一.基础命令  1 dir  无参数:查看当前所在目录的文件和文件夹.  /s:查看当前目录已经其所有子目录的文件和文件夹.  /a:查看包括隐含文件的所有文件.  /ah:只显示出 ...

  4. SDWebImage 在多线程下载图片时防止错乱的策略

    在我们使用sd的时候,对tableView  上cell得图片进行异步下载的时候会遇到这样一个问题: 由于cell的重用机制,在我们加载出一个cell的时候imageView数据源开启一个下载任务并返 ...

  5. 文字排版--字体(font-family)

    我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性.下面我们来看一个例子,下面代码实现:为网页中的文字设置字体为宋体. body{font-family:"宋体"; ...

  6. spring data jpa Specification 例子

    /** * 封装查询条件 * * @param baseQueryDTO * @return */ private Specification<ActivityBase> getSpeci ...

  7. hdoj 2047 简单递推

    代码: #include <stdio.h>int main(){ int n,m,i; __int64 x[41]; x[1]=3; x[2]=8; for(i=3;i<=40;i ...

  8. IOS下双击背景, touchmove, 阻止页面背景scroll.

    ios prevent dblclick(tap) page scrollhtml add:("minimal-ui" is very important) <meta na ...

  9. Sublime text3 JS语法检测工具安装及使用

    Sublime text3 JS语法检测工具安装及使用 工具/原料 sublime text3 nodejs sublimeLinter sublimeLinter-jshint 方法/步骤 首先ct ...

  10. ubuntu 安装 open in teminal

    sudo apt-get install nautilus-open-terminalnautilus -q