• 小谈 浏览器和服务器交互原理


          作为一名.net程序员,如果只知道用微软的服务器控件拖出漂亮的界面,然后双击控件,得到响应事件的方法,然后在这个方法里面写出对应的代码,这是远远不够的,就成为人们常说的 "只会拖控件的开发人员"。不仅如此,这样开发出来的网站往往存在执行效率慢的问题即用户量访问过大,浏览器加载页面过慢,如果你看源文件,会发现存在大量的ViewState。因此,如果我们希望成为 asp.net 开发高手,就需深刻了解服务器与浏览器之间的交互原理,以及asp.net页面生命周期。      

          浏览器和服务器之间进行通信,是通过Socket套接字进行的(这点我们必须清楚,不然作为网站开发者,不知道就太逊了)。作为微软的铁杆粉丝,我在这里就只谈 IIS服务器和浏览器之间通信过程(其他服务器我也不太清楚,能力有限见谅见谅)。     

        众所周知,现在我们所用的协议都是Http协议,而Http协议是无状态的协议。那么,无状态协议是怎么样的一种协议呢。用通俗一点的话说,用户通过浏览器向服务器发出请求,发出请求之后,浏览器是不会记住当前用户是谁,是谁希望浏览器向服务器发送服务请求的(那么,有些朋友会说,为什么我用浏览器查看下一页 后一页会有显示呢,这就是很多朋友没弄清楚的地方,这是浏览器替用户缓存了页面,而不是Http协议缓存了页面,注意 注意!),浏览器在将服务器返回的数据呈现给用户后,Http协议会自动断开,不会一直替用户工作,因为服务器的资源是很宝贵的,监听此次请求的套接字会立即释放,然后去监听下一个请求!

        当浏览器向IIS服务器发送请求后,浏览器会将一长串的请求报文发给服务器,而这些请求报文则包含了相当用的信息喔,请看下面~`

      GET /zt2011/zk/no6.htm?pgv_ref=aio HTTP/1.1  

        Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml,    

        User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.0.30729; InfoPath.2; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; BOIE9;ZHCN)   

       Accept-Encoding: gzip, deflate   

     Host: games.qq.com   

       Connection: Keep-Alive    

      而IIS得到这些请求报文后会对其进行一系列的解析,    

        必然的内容 1请求的方式 GET

           2请求的路径  zk/no6.htm?pgv_ref=aio                 

                        3使用协议版本 HTTP/1.1          

                        4请求报文头内容 Accept: image/gif, image/jpeg, image/pjpeg.......

                        5主机域名 Host: games.qq.com

           6连接状态 Connection:keep-Alive 

        浏览器会得到服务器的影响 下面是响应报文头

        HTTP/1.1 200 OK    

      Server: nginx/0.6.39    

         Content-Type: text/html; charset=gb2312   

         Transfer-Encoding: chunked   

          Connection: keep-alive   

          Content-Encoding: gzip

     而这些 报文头的具体意思 这里就不详谈了,参考其他博文吧~~

       而响应报文体则包含了众多的 html代码 js,css,对于这些内容我将会在以后的博文中陈述!这些设计了页面控件树的生成,比较复杂。   

       再浏览器获得了服务器的响应后,一次 请求-发送请求-处理请求-返回处理结果 这样一个过程也就结束了,Http协议就完成了一次工作,然后Http协议就不会关心用户在页面上所做的任何事情,直到用户再次请求!这就是一次浏览器和服务器最简单的交互!

       好了,这篇文章也就结束了,下面就会讲 asp.net 页面生命周期了,谢谢~~~~~

  • 相关阅读:
    linux下的shell 快捷键
    Python3.x和Python2.x的区别
    [Python2.x] 利用commands模块执行Linux shell命令
    redis缓存策略
    高并发解决方案
    java8 lambda表达式应用
    java读写分离的实现
    数据库读写分离
    大数据量处理方案:分布式数据库
    google的CacheBuilder缓存
  • 原文地址:https://www.cnblogs.com/xianrongbin/p/2237154.html
Copyright © 2020-2023  润新知