和瑞文带什么符文的什么芯片,高分段

& 做网站先来了解这些原理
做网站先来了解这些原理
& & & &引言  现在房价这么高,作为一个程序员只能靠做个网站看能不能卖出 100 万这样搏一手了。这里尝试介绍一下现代 Web 后端并解释一些常见术语,希望能够帮助平常不做 Web 的程序员迅速上手。  我非常确信这篇文章里有很多概念不太对,如果发现哪里不太对的话请跟我讲...  实现一个手动的
服务器!  1、这里的手动真的就是字面上的意思,这里我们要实现的效果是:  2、在命令行中运行 Server。  3、在浏览器中打开 http://localhost ,也就是你本机的地址。  4、在命令行中输入你想在浏览器中显示的结果,然后...  在浏览器里看到你之前输入的结果!  更棒的是整个过程我们一行代码都不用写!  ncat  如果你是在
上的话,请在这里下载 ncat,放到任何地方并在命令行里执行。ncat 的基本功能一方面是用来像任意 TCP/UDP 服务器发送数据,另一方面可以作为一个非常简单基本的 TCP/UDP 服务器来接受任何数据并显示出来。这里我们要用的显然是后者。  首先,在命令行里运行 ncat --listen 80,意思是监听 80 端口,并把接受到的数据显示在命令行里。其中 80 就是著名的 HTTP 端口。如果你使用的是
的话这里需要 sudo,而且如果你的机器上已经有网站在跑的话那么这里可以把 80 改成8080,对应浏览器里的地址也需要用 http://localhost:8080/。
C:\Bin&ncat&-l&&&
_&&----&闪动的光标&&  然后,打开你最喜欢的浏览器打开地址 http://localhost/ 。这时你应该会看到浏览器显示正在链接,而命令行窗口里应该是可以看到这样的东西:
C:\Users\jagt&ncat&--listen&80&&&
GET&/&HTTP/1.1&&&
Host:&localhost&&&
User-Agent:&Chrome&&&
Accept:&*/*&&&
_&&----&闪动的光标&&  这里显示的东西就是 HTTP 请求,也就是浏览器发送的数据。那么现在我们要输入想要显示在浏览器里的内容。很容易想像,既然请求看起来有些格式,我们输入的内容也必须有些格式才行。拷贝下面的内容到命令行中,如果没反应就多按下几次回车。
HTTP/1.1&200&OK&&&
Content-Type:&text/html&&&
Content-Length:&14&&&
Hello&Browser!&&  然后再看看你的浏览器里面,应该就出现了 Hello Browser!,也就是你刚刚输入的内容。  Web 后端基础原理  事实上无论是怎样的网站,只要你用浏览器去访问的时候就会有一台远方的电脑再以非常快的速度重复着我们上面手动完成的步骤。整个过程简单概括的话大概就是这样几个步骤:  1、用户在浏览器里输入网站,浏览器负责找到这个网址对应的计算机,并尝试连接其 80 端口。  2、服务器接收请求,建立 TCP 连接。  3、浏览器通过建立的的连接发送 HTTP 请求 (HTTP Request),也就是上面例子中ncat 里最开始显示的内容。  4、服务器根据请求的内容返回 HTTP 响应 (HTTP Response),也就是我们上面手动输入的东西。  5.浏览器根据返回的内容来显示页面。  对于这个过程额外有几点很重要的是:  ●浏览器总是连接 80 端口 (HTTPS 除外),但是你应该知道标准的 TCP 连接监听的是一个端口(在这个例子是 80),而真正传送数据的是另外一个随机的高位端口(比如 54321)。如果每个用户都占用 80 端口传数据的话那就麻烦了。  ●虽然 TCP 协议是两边都可以主动发起消息,但 HTTP 额外规定了一个 HTTP 连接的过程是,浏览器发送 HTTP 请求,服务器收到请求全文后,返回 HTTP 响应,在浏览器接受到之后就算结束。可以注意到的是,浏览器和服务器只有一次互动的机会,而且一定是浏览器主动发起,而服务器只能被动的根据收到的请求内容返回结果。  ●这里讲的请求 (HTTP Request) 和响应 (HTTP Response) 真的就是上面看到的那样是纯文本。浏览器和服务器之间除了在 Request 和 Response 内的内容外不应该需要额外的信息。  上面描述的基本就是 HTTP 协议 的工作方式。现在流行的很多轻量级的 Web 框架都在按照这个模式进行抽象。首先看看当下最新潮的 node.js 官网上的例子:
http.createServer(function&(req,&res)&{&&
&&&res.writeHead(200,&{'Content-Type':&'text/plain'});&&
&&&res.end('Hello&World\n');&&&
}).listen(1337,&'127.0.0.1');&&  其中的 req 和 res 完完全全对应的就是 HTTP Request 和 Response。里面的函数最主要的工作就是读 req 的内容,把你想显示在用户浏览器里的东西写到 res里面。这里也反映了很多 HTTP 协议的特性,在一个连接的过程中你的起始条件就只有 Request,唯一能做的就是把需要显示的东西写到 Response 里。你没机会函数里面再向浏览器索取信息,也不能在 Response 写完后再向浏览器发送任何内容。  把这段代码里的内容跟最终的 HTTP 响应对比一下:
HTTP/1.1&200&OK&&&
Content-Type:&text/plain&&&
Hello&World!&&  其中的 200 所在的位置是 HTTP Status Code,常见的就是 200 OK 和404 Not Found,浏览器会根据其值来做各种行为,像如果是 301 Moved Permanently 的话浏览器就会自动跳转到另外一个页面。Content-Type 这里先不管他... 下面空一行后面的就是 HTTP message body data,很明显就是显示在浏览器中的内容。  接下来是 Python 的 flask 的例子:
@app.route('/')&&&
def&index():&&&
&&&&username&=&request.cookies.get('username')&&&
&&&&return&'hello,&',&username&&  应该可以很明显的感觉 flask 抽象的层次的要比 node.js 更高一点。这里回头看看最开始在 ncat 里面看到的 HTTP 请求中的第一行:
GET&/&HTTP/1.1&&  这基本上也是其中最重要的一部分,读出来就是 &我要 GET 这个网站上地址为 / 的页面&。其中 GET 是请求的方法 (method),而 / 就是路径。由于 GET 是最常见的一个方法,flask 中可以省略这个参数。这个请求根据方法和路径被 route 到了我们这个 index() 函数。其中 request 毫无悬念的对应的就是 HTTP 请求。整个东西的意思,读出来就是 &遇到要 GET 路径为 / 的请求,从 request 里面拿到用户名并返回响应 hello, 加上它的用户名。&  如果上面的都明白了的话,到这里就只剩下一个问题了:request 里面的 cookies 是从哪里来的?其实 cookies 也是包含在 HTTP 请求的内容里的,下面是一个例子:
GET&/&HTTP/1.1&&&
Cookie:&name=&name2=value2&&  这里 Cookie: name=value1; name2=value2 这种格式的东西叫做 HTTP Headers。HTTP 标准中规定了一系列的请求和响应中可能会出现的键和值的规则,用于控制服务器和浏览器的行为,比如:  ●Response 中的 Content-Type: 你应该发现有时候你打开一个链接会显示页面,有时候却会弹出另存为的对话框。决定这个行为的就是这个 Header,其值是一个 MIME Type。如果是 Content-Type: text/html 的话,浏览器就会把后面的文字显示出来。如果是 Content-Type: application/octet-stream 的话,一般就会弹出&另存为&的对话框。  ●Response 中的 Set-Cookie:浏览器看到 Set-Cookie: 12345 的话,浏览器再之后的访问该网站的 HTTP 请求中都会带上 Cookie: 12345。像用户登录验证等等很多都是靠 Set-Cookie 和 Cookie 来实现的。  ●Request 中的 User-Agent:记得原来刚上网的时候有那种很流弊的图片,可以显示你的地理位置,浏览器版本和操作系统。其实这个就是用 User-Agent 来实现的。一个例子:Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/33.0.,很容易看到相关的信息。  ●Request 中的 Referer:记得原来刚上网的时候有那种防盗链的图片,如果图片是被嵌入在别的网站上的话会变成什么&此图片来自于哪里哪里&这样。这个就是用 Referer 实现的,其内容是你链到这里之前访问的一个地址。  这里的中心思想就是,大部分这些控制行为的东西都是用 HTTP Headers 来实现的。好消息是大部分 Web 框架中你不太需要显示的控制他们。  HTTP 小结  再回头看看最开始手动 HTTP 服务器里的请求和响应,这里我们给每个部分加上注释。
& & 请求的方法&&
  |&请求的地址&&
  GET&/&HTTP/1.1&&
  User-Agent:&Chrome&-|&&
  Host:&localhost:1337&-|&&
  Accept:&*/*&-|---&请求的&Headers&&
  响应的&status&code&&
  HTTP/1.1&200&OK&&
  Content-Type:&text/html&-|&&
  Content-Length:&14&-|---&响应的&Headers&&
  Hello&Browser!&-----&响应的&Message&Body&&  应该就很清楚了。接下来我们不妨直接来看看当下最流行的 Web 后端开发技术。  &我的网站要用 nginx + node.js + mongodb!&  不管怎样,这里先分析一下这三样现在很有代表性的技术在后端中处于什么样的层面。  nginx  nginx 官网的描述是 &HTTP 和反向代理服务器&,所以这两个部分可以分开来看。&HTTP 服务器& 的意思我觉得就是它可以接受 HTTP 请求,根据其内容作出不同的处理。一个非常重要的例子就是用来 &serve& 对静态内容(图片,css) 。无论你的网站用什么语言写,最终部署上线的时候静态内容都应当是由 nginx 这一层来处理,因为这是它的核心功能之一,效率和安全性都会很有保证。而 &反响代理服务器& 看起来很玄乎其实也很好理解。我们知道向一台机器上的 80 端口只能有一个进程在监听,那么比如你有两个应用,一个是你重要的网站程序,一个是记录你开发心路历程的博客,你可以用两个地址分别访问到:  ●http://localhost:8080/ - 我的网站  ●http://localhost:9009/ - 开发博客  明显的你不希望用户在访问的时候也要输入端口号码。如果把 nginx 放在最前面来监听 80 端口的话,它可以把一个请求根据你的配置来&反向代理&到你的网站或者博客。针对上面这个例子,我们可以这样配置:
server&{&&
&&&listen&80;&&&
&&&location&/site&{&&&
&&&&&&&proxy_pass&http:&&
&&&location&/blog&{&&&
&&&proxy_pass&http:&&
}&&  这样两个应用的现在分别可以用更好看的地址访问到:  ●http://localhost/site - 我的网站  ●http://localhost/blog - 开发博客  当然现实生活中你的应用代码里可能也要根据这样的配置做一些处理。但是总体感觉就是这样。nginx 还有很多高端功能可以来控制反向代理的细节,可以很灵活的做各种事。所以预先的考虑把 nginx 放在最前面是很有帮助的。当你真的要用的时候可以到处搜搜会有很多教程。  node.js  node.js 可能是当下最火热的后端技术。你的网站逻辑就是要在这里来写了。比起之前其他的 web 技术 node.js 其实位置有点特殊,它给人的感觉应该像是 &可以用 JavaScript 控制逻辑的 nginx& 这样。上手相当容易,看看教程写个程序然后node foo.js,打开浏览器就能看到了。  因为 node.js 功能是偏向底层的,所以当你真正要写网站的时候可能需要一个高层一点点的框架,可以自行搜索。  关于 node.js 还有一点需要提到的就是其 &async& 的意思。它这里的 &async& 仅仅是说的是 IO,即读文件写文件和一些先关的操作是异步的,跟多线程并行什么的是一点关系都没有。举一个例子:
http.createServer(function&(req,&res)&{&&&
&&&&setTimeout(function(){&&&
&&&&&&&&res.writeHead(200,&{'Content-Type':&'text/plain'});&&
&&&&&&&&res.end('Hello&World\n');&&&
&&&&},&10000)&&&
}).listen(1337,&'127.0.0.1');&&  打开浏览器访问发现要等 10 秒。在等待过程中你可以再开一个窗口也访问这个地址,你会发现在之前那个请求结束之前新的那一个也会在等待。如果这个行为跟你想象的不太一样的话,你可能需要看一看 js &Event-Based Programming& 是怎么回事。  mongodb  mongodb 是一个面向文档的。跟传统 SQL 数据库比起来 mongodb 刚开始给人的感觉是更容易入门,但实际情况感觉也是有好有坏。你可以这样想,你网站的复杂度是固定的,那么其实不论用什么技术要解决的问题其实是差不多的,所以技术的选择在我们这种入门级选手来说其实不会是致命的。  不过说到为什么做网站一定要用个数据库,我觉得原因是因为网站不像很多普通的应用程序有一个明显的开始和结束的过程。像一个命令行程序你可以把大部分的程序状态都放在局部变量里面,有需要再序列化到文件中;而网站的话你需要有一个可靠而持久的地方来存放数据。另一方面像 mongo 和 SQL 都有可以让你很方便的对数据进行处理的操作,对于很多类型的应用来说也是很必要的。  不过反过来讲,网站程序中最好不要使用全局变量或者类似的东西。这里有一个例子,比如你想实现一个计数器,每次有人访问显示的数量就会增加。node.js 的话可以写成这样:
var&http&=&require('http');&&&
var&counter&=&0;&&&
http.createServer(function&(req,&res)&{&&&
&&&&res.writeHead(200,&{'Content-Type':&'text/plain'});&&
&&&&res.end(&&+counter++);&&&
}).listen(1337,&'127.0.0.1');&&  这样其实是可以正常工作的,先不考虑说断电,程序异常退出之类的高端问题,这种做法还是有一个很要命的问题。你在开发的时候命令行里面跑跑发现没问题,但是后来又听说 node.js 支持 cluster 或者类似的东西, 可以起多份进程来做服务,这样可以 &scale& 你的网站。结果试了试发现计数器显示的数字变的很随机,有增有减,这时候就蛋疼了。  发生这个的原因就是这里使用了对于单个进程内的全局变量,也就是多个进程之间是无法共享的东西。当 cluster 起了多份进程的时候,等于是每个里面自己都有一个 counter 变量。  实际上这个问题对于 node.js 还算好 (node.js 的整个模型都倾向于单线程)。但像 Python 或者其他这种,依靠某种协议来起 &worker& 的方式这种做法就会迅速出问题。所以网站的数据都会放到一个统一的,可以由多个进程共同使用的地方,一般就是各种数据库。  选择你的武器  我一直觉得做网站(或者任何开发)最振奋人心的时刻就是最开始选择技术 &stack& 的时候了。&用这个这个加上这个,高性能够灵活上手简单,肯定很牛逼!&,这种感觉估计每个人都有。不过似乎对于业余开发来说真的不是太重要,选择熟悉的或者感兴趣的都可以,因为说到底差别都不是那么大,自己感觉好就可以了。  迈向人生巅峰的步骤  当你本地调试好了的时候,就要考虑上线了。在浏览器里输入一个地址就能看到你精心设计的页面,感觉不是一般的好。如果你是第一次的话,你需要按步骤做以下这些事:  1、购买一个 VPS,可以搜索 &vps 海外 支付宝&。不要考虑那种共享的 &支持 php, ruby& 这种,你需要的是一台可以 ssh 进去有 root 权限的 VPS。  2、购买一个域名,可以搜索 &域名 海外 支付宝&。一定不要买国内的。  3、把你的域名迁移到 DNSPod。注册后看文档有很详细的教程。  4、配置 Google Analytics, 可以监测你网站的流量和用户情况。如果担心国内抽风的话可以搜 &网站流量统计& 寻找国内的代替品。  5、在 VPS 上装好 nginx 或者 apache 或者什么别的都可以,配置到浏览器里输入你的域名能刷出页面来。  6、部署你的网站!最好能自动化这个过程不然会很痛苦。  最后  就我个人做过的软件开发里面,似乎只有 Web 后端是入门就要牵涉到多种进程或服务的,开发部署和环境配置跟通常写个程序然后点&编译&都差别很大,总的来说应该还是蛮有意思的。
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 15:56:3)&&( 16:53:30)&&( 12:54:35)&&( 16:49:24)&&( 16:20:38)&&( 16:13:10)&&( 21:24:53)&&( 20:56:1)&&( 21:3:44)&&( 20:29:3)
老师你好,VS2010之MFC从入门到精通教程的第十四讲,为什么点击使用说明没反映呢,对比过几次了,没写错,用AfxMessageBox()来测试,点击“使用说明”,还是没弹出任何东西
有一些其实用的很少
初来乍到,踩一下很有必要!甲午年(马)冬月十八
初来乍到,踩一下很有必要!甲午年(马)冬月十九
支持了,现在做过直接跳过很多步骤了。
现在的JS全都是直接找代码了
完全随机文章  主要是策划、功能开发、程序建设、框架设计、测试上线,一般来说,企业建设自己的网站,不仅能够给企业带来新的客户,而且也能够在短时间内大幅度的提升自己企业的业绩。互联网是一个包容万象的世界,它的内容非常丰富,对一个企业而言,其具有网络沟通能力的标志是公司拥有自己的独立网站。
  企业网站建设方案策划
  第一、企业网站建设定位分析
  1、企业自身分析
  根据自己的产品、销售渠道和销售对象等情况,明确自己的网站是信息服务型、销售型、销售服务型或是综合型,面向企业客户的网站和面向个体消费者的网站是完全不一样的,即使是面向个体消费者的网站,也并非所有都需要销售商品,而且并不是所有产品都适合在网上销售。比如,面向企业客户的网站的重点是其在企业间合作过程中的作用,而不需要象面向消费者的网站那样千方百计去增加浏览率。
  2、资源分析
  要研究企业的财务状况能够支持怎样类型的网站的建设、运行和维护;企业的市场营销、美工、创意策划等各类专业人员配置是否完备;企业所要建立的网站提供的各种信息、服务、资源等是否合法,是否能被我国的法律环境和政治环境接受。还要看网站的内容和服务是否为社会文化环境接受,是否和网络文化以及网站目标顾客所崇尚的价值观兼容。
  3、目标顾客分析
  对目标顾客的年龄、性别、学历、职业、个性、行为、收入水平、地理位置分布等各种资料的分析。企业要加强对网上消费者者行为进行研究,这将是提高顾客服务的基础。企业必须要重视对网络消费者的研究,探讨网络营销环境的建设。
  第二、企业网站建设功能模块
  企业站是用来展示企业形象或者是用来产品展示的,企业网站大致可以分为以下6个模块,针对个性化的功能定制,企业可提出需求。
  1.网站首页顶部导航。网站的顶部导航一般是最显眼的需要放置公司最重要的信息,一般包括:企业介绍,联系方式,产品分类,企业新闻,人力资源,产品展示等栏目。
  2.首页广告展示图片。广告展示图片是为了吸引客户眼球,要做的好看且一定要在图片上表明公司提供的服务,一般网站建设公司会免费帮助设计2-3个,如果对广告图片的要求较高可以请专业的平面设计师设计。
  3.新闻资讯模块。这个模块显示的是公司新闻或其他资讯文章的标题,一般显示数量在10-20条左右,这部分的内容一般需要企业自己准备好在提供给网站建设公司。
  4.在线咨询模块。现在的在线咨询一般是在网站侧边挂几个在线咨询的客服QQ,也可以用百度商桥等在线沟通软件,这些信息都需要企业准备好提供给网站建设公司。
  5.会员中心模块:会员可根据需要设置级别,并可根据级别限制浏览相关内容,会员机制与订购、应聘、留言三大模块有机结合。
  6.产品展示模块。企业网站一般会推荐几个产品在在首页展示,需展示的产品可以网站后台直接推荐,网站的详细产品会在网站的内页中展示。网站的产品和介绍内容等信息需要网站企业准备好提供给网站建设公司。
  第三、企业网站风格框架设计
  1.突出主题,凸显公司卖点,展示公司业务,吸引用户,传播企业影响力;
  2.定位,概括整个网站的整体风格,展示企业的整体形象,结合本公司实际情况,充分体现出公司规模、经营理念、企业特质、主营业务及主打产品。
  3.栏目设置合理;
  4.页面结构设计创意新颖,设计精美,结构合理,功能完备,导航清晰易用、浏览速度快、兼容性高、符合SEO特性;
  5.色彩配置图文符合公司UI系统要求;
  6.网页的风格可以采用模块式,扁平式,响应式,全屏网页设计等。具体的要根据企业公司所做的产品,面向的用户群体等而定。
  7.在版式设计上,要求把信息分门别类,让用户在扫描页面时保证视觉流的流畅性,在短时间内(3-5秒)发现首页包涵哪些区域(如菜单、广告、注册、个人信息、链接、按钮等),方便用户在第一时间内做出选择。在设计过程中,严格遵循四个排版的原则,即:对比、对齐、重复和亲密性。
  购买域名虚拟主机
  一个网站的建设首先当然是选择一个好的域名,后缀一般都是选择.com和.cn的较多,.com是国际域名后缀,.cn是中国的域名,域名的主体一般和你的网站主题,或者企业的名称全拼来做域名的主体,如今互联网当中网站繁多,很多域名已经被注册,可以是全拼,可以是首字母,可以加地域或者数字,但是一定要有意义,让人容易记住。当域名购买完了之后,还要有个域名可以访问到的地方,这时候就要租一个虚拟主机的空间了,把域名与主机绑定,当访问域名时,就直接进入放在虚拟主机空间里的网站了。
  企业网站制作
  当做好准备的时候,就要开始建站了,建站主要分前台和后台,前台的就是网站的板式,根据网站类型,面向人群,来设计网站的版面,不宜太过杂乱,一定要简洁,保证用户体验,才能让访问者有好感。建设后台就较为复杂了,就要用程序整合前台,并且完成需要的功能,这个需要较为复杂的程序编写。
  第一、定制网站比使用模板的好处
  对于模块网站大家都知道,只是客户根据已经成型的网站来选择自己喜欢模版,更改图片、文字以及logo就可以了。首先,模块网站的功能基本是不能更改以及添加的;其次,由于模块网站的相似性很高,所以不便于搜索引擎的搜录。
  定制开发的网站安全性高、功能可以根据需要进行调整、便于做SEO优化,同时可以制作个性化网页,网站的后期维护也简单方便。当然选择一家专业的网站建设的公司也是非常重要的,海淘科技网络公司从事网站定制开发多年,拥有卓越的技术团队、专业的技术水平,成功项目很多。
  第二、如何选择建站公司
  1.上网查网站建设公司的基本信息
  企业网站是一家企业在互联网世界的门面,如果一家网站建设公司自己的官网都做不好,又怎样去保证客户的网站品质呢?判断一家网站建设公司怎么样,先去浏览他们公司自己的官网。在官网中不但可以了解到该公司的整体情况外,而且可以看出他们的建设水平,包括栏目策划、美工设计、功能实现等等,以此来淘汰一批连基本制作能力都达不到的小型建站团队。
  2.现场考察网站建设公司
  建站公司是否有一个固定的办公场所,决定了他是否能够为你提供稳定、长期的服务。现在做网站的门槛越来越低,很多在校大学生,或者略通设计、编程的人员,两三人合伙即可组成一个网站建设工作室,一般这样的团队没有固定的办公场所,也没有固定的办公时间,设计水准、技术力量没有办法与正规公司相比,网站制作完成后,后续的维护工作也没有保障。建议大家不要选择这样的建站工作室,即使他们的价格真的相当便宜。
  3.查看网站建设公司的案例
  通过网站建设公司的官方网站查看他们以往的案例,从这些案例中重点观察两点:
  (1)这家网站建设公司的风格是否能达到你预期的要求;
  (2)这家网站建设公司展示的案例是否真实,最好让网站建设公司提供相关的证明,以验证案例真实性。在网站建设公司提供的案例中,如果有知名企业或者是政府部门的真实案例,那就基本可以认可该建站公司的实力和经验。
  4.考察网站建设公司的综合实力和水平
  可以在对该公司的美工、程序、售后人员的整体技术能力进行考评,设计师是否能准确理解客户需求,程序人员是否能够完整实现技术要求,售后人员是否耐心、及时沟通问题,都是一个网站建设公司的基本考评条件。
  企业网站建设程序
  当域名和空间都有了的时候,我们需要将相应的网站程序安装到我们的虚拟主机里面,以便于网站能够正常运行。网站建设程序由编程人员编写,HTML技术开发,CSS排版,Ajax和Json数据交互,等等。
  企业网站建设测试发布
  当网站程序方面编写好的时候,就是个一个网站的雏形了,但这时候网站还是不完善的,需要进行测试评估,网站还是有很多不完善的地方,要从用户体验的角度多去观察,渐渐完善。当网站的问题都解决,没什么大的问题的时候,就可以把网站传到虚拟主机空间里,这是访问域名就可以正式访问网站了。
  企业网站建设维护推广
  网站虽然上线了,但是工作还没有完成,这时候网站也许还有没发现的漏洞等细节,在网站上线之后,还要继续完善网站的不足,维护主要针对于网站的服务器,网站安全和网站内容的维护。这时候站内的完成了,就要注重站外了,网站宣传推广是一门综合性很强的学问,倘若对其缺乏深刻充分的认识和了解,又没有专业人士引导的话,确实很不理想,建议您找一个这方面专业的公司来运做。
  更多资讯,点击《》和《》,了解更多!
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。50316人阅读
作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络,需求处理等等。
本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~
1. 首先嘛,你得在浏览器里输入要网址:
2. 浏览器查找域名的IP地址
导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
* 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
* 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
* 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
* ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的。在这一般都能找到相应的缓存记录。
* 递归搜索 – 你的ISP的DNS从跟域名开始进行递归搜索,从.com顶级域名到Facebook的域名。一般DNS的缓存中会
有.com域名中的域名,所以到顶级的匹配过程不是那么必要了。
DNS递归查找如下图所示:
19:53:01 上传
DNS有一点令人担忧,这就是像wikipedia.org 或者 这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:
* 循环 DNS 是DNS查找时返回多个IP时的解决方案。举例来说,实际上就对应了四个IP地址。
* 负载平衡器 是以一个特定IP地址进行侦听并将网络请求转发到集群上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。
* 地理 DNS 根据用户所处的地理位置,通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的不能够更新同步状态,但映射静态内容的话非常好。
* Anycast 是一个IP地址映射多个物理主机的路由技术。 美中不足,Anycast与TCP协议适应的不是很好,所以很少应用在那些方案中。
大多数DNS使用Anycast来获得高效低延迟的DNS查找。
3. 浏览器给发送一个HTTP请求
因为像Facebook主页这样的动态页面,打开后在浏览器缓存中很快甚至马上就会过期,毫无疑问他们不能从中读取。
所以,浏览器将把一下请求发送到Facebook所在的:
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
User-Agent: Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: datr=-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]
GET 这个请求定义了要读取的URL: “”。 浏览器自身定义 (User-Agent 头), 和它希望接受什么类型的相应 (Accept and Accept-Encoding 头). Connection头要求为了后边的请求不要关闭TCP连接。
请求中也包含浏览器存储的该域名的cookies。可能你已经知道,在不同页面请求当中,cookies是与跟踪一个状态相匹配的键值。这样cookies会存储登录用户名,分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里,每次请求时发送给。
用来看原始HTTP请求及其相应的工具很多。作者比较喜欢使用fiddler,当然也有像FireBug这样其他的工具。这些软件在优 化时会帮上很大忙。
除了获取请求,还有一种是发送请求,它常在提交表单用到。发送请求通过URL传递其参数(e.g.: )。发送请求在请求正文头之后发送其参数。
像“”中的斜杠是至关重要的。这种情况下,浏览器能安全的添加斜杠。而像“HTTP: ///folderOrFile”这样的地址,因为浏览器不清楚folderOrFile到底是文件夹还是文件,所以不能自动添加 斜杠。这时,浏览器就不加斜杠直接访问地址,会响应一个重定向,结果造成一次不必要的握手。
4. facebook服务的永久重定向响应
图中所示为Facebook发回给浏览器的响应:
HTTP/1.1 301 Moved Permanently
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Expires: Sat, 01 Jan :00 GMT
P3P: CP=”DSP LAW”
Pragma: no-cache
Set-Cookie: made_write_conn= expires=Thu, 12-Feb-:50 GMT;
path=/; domain=.; httponly
Content-Type: text/ charset=utf-8
X-Cnection: close
Date: Fri, 12 Feb :51 GMT
Content-Length: 0
给浏览器响应一个301永久重定向响应,这样浏览器就会访问“” 而非“”。
为什么一定要重定向而不是直接发会用户想看的网页内容呢?这个问题有好多有意思的答案。
其中一个原因跟搜索引擎排名有 关。你看,如果一个页面有两个地址,就像 和,搜索引擎会认为它们是两个,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是
什么意思,这样就会把访问带www的和不带www的地址归到同一个排名下。
还有一个是用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。
5. 浏览器跟踪重定向地址
现在,浏览器知道了 “”才是要访问的正确地址,所以它会发送另一个获取请求:
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
Accept-Language: en-US
User-Agent: Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: lsd=XW[...]; c_user=21[...]; x-referer=[...]
头信息以之前请求中的意义相同。
6. 服务器“处理”请求
服务器接收到获取请求,然后处理并返回一个响应。
这表面上看起来是一个顺向的任务,但其实这中间发生了很多有意思的东西- 就像作者博客这样简单的网站,何况像facebook那样访问量大的网站呢!
* Web 服务器软件web服务器软件(像IIS和阿帕奇)接收到HTTP请求,然后确定执行什么请求处理来处理它。请求处理就 是一个能够读懂请求并且能生成HTML来进行响应的程序(像ASP.NET,PHP,RUBY…)。
举 个最简单的例子,需求处理可以以映射网站地址结构的文件层次存储。像这个地 址会映射/httpdocs/folder1/page1.aspx这个文件。web服务器软件可以设置成为地址人工的对应请求处理,这样
page1.aspx的发布地址就可以是。* 请求处理请求处理阅读
请求及它的参数和cookies。它会读取也可能更新一些数据,并讲数据存储在服务器上。然后,需求处理会生成一个HTML响应。
所 有动态网站都面临一个有意思的难点 -如何存储数据。小网站一半都会有一个SQL数据库来存储数据,存储大量数据和/或访问量大的网站不得不找一些办法把数据库分配到多台机器上。解决方案有:sharding (基于主键值讲数据表分散到多个数据库中),复制,利用弱语义一致性的简化数据库。
委托工作给批处理是一个廉价保持数据更新的技术。举例来讲,Fackbook得及时更新新闻feed,但数据支持下的“你可能认识的人”功能只需要每晚更新(作者猜测是这样的,改功能如何完善不得而知)。批处理作业更新会导致一些不太重要的数据陈旧,但能使数据更新耕作更快更简洁。7.
服务器发回一个HTML响应
图中为服务器生成并返回的响应:
HTTP/1.1 200 OKCache-Control: private, no-store, no-cache, must-revalidate, post-check=0,pre-check=0Expires:
Sat, 01 Jan :00 GMTP3P: CP=”DSP LAW”Pragma: no-cacheContent-Encoding:
gzipContent-Type: text/ charset=utf-8X-Cnection: closeTransfer-Encoding:
chunkedDate: Fri, 12 Feb :55 GMT
2b3Tn@[...]
整个响应大小为35kB,其中大部分在整理后以blob类型传输。
内容编码头告诉浏览器整个响应体用 gzip算法进行压缩。解压blob块后,你可以看到如下期望的HTML:
“”&lang=”en”
id=”facebook”&
关于压缩,头信息说明了是否缓存这个页面,如果缓存的话如何去做,有什么cookies要去设置(前面这个响应里没有这点)和隐私信息等 等。
请注意报头中把Content-type设置为“text/html”。报头让浏览器将该响应内容以HTML形式呈现,而不是以文件形式下 载它。浏览器会根据报头信息决定如何解释该响应,不过同时也会考虑像URL扩展内容等其他因素。8.
浏览器开始显示HTML
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了:
9. 浏览器发送获取嵌入在HTML中的对象
在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。
下面是几个我们访问时需要重获取的几个URL:
HTTP://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif
HTTP://static.ak.fbcdn.net/rsrc.php/zBS5C/hash/7hwy7at6.gif
…* CSS 式样表
HTTP://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css
HTTP://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css
…* JavaScript 文件
HTTP://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js
HTTP://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js
这些地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等…
但不像动态页面那样,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取。服务器的响应中包含了静态文件保存的期限信息,所以浏览器知道要把它们缓存多长时间。还有,每个响应都可能包含像版本号一样工作的ETag头(被请求变量的实体值),如果浏览器观察到文件的版本 ETag信息已经存在,就马上停止这个文件的传输。
试着猜猜看“fbcdn.net”在地址中代表什么?聪明的答案是”Facebook内容分发网络”。Facebook利用内容分发网络 (CDN)分发像图片,CSS表和 JavaScript文件这些静态文件。所以,这些文件会在全球很多CDN的数据中心中留下备份。
静态内容往往代表站点的带宽大小,也能通过CDN轻松的复制。通常网站会使用第三方的CDN。例如,Facebook的静态文件由最大的 CDN提供商Akamai来托管。
举例来讲,当你试着ping static.ak.fbcdn.net的时候,可能会从某个akamai.net服务器上获得响应。有意思的是,当你同样再ping一次的时候,响应的 服务器可能就不一样,这说明幕后的负载平衡开始起作用了。10.
浏览器发送异步(AJAX)请求
在Web 2.0伟大精神的指引下,页面显示完成后客户端仍与服务器端保持着联系。
以 Facebook聊天功能为例,它会持续与服务器保持联系来及时更新你那些亮亮灰灰的好友状态。为了更新这些头像亮着的好友状态,在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。还是在Facebook这个例子中,客户端发送给一个发布请求来获取你好友里哪个
在线的状态信息。
提起这个模式,就必须要讲讲”AJAX”– “异步JavaScript 和 XML”,虽然服务器为什么用XML格式来进行响应也没有个一清二白的原因。再举个例子吧,对于异步请求,Facebook会返回一些 JavaScript的代码片段。
除了其他,fiddler这个工具能够让你看到浏览器发送的异步请求。事实上,你不仅可以被动的做为这些请求的看客,还能主动出击修改和重 新发送它们。AJAX请求这么容易被蒙,可着实让那些计分的在线游戏开发者们郁闷的了。(当然,可别那样骗人家~)
Facebook聊天功能提供了关于AJAX一个有意思的问题案例:把数据从服务器端推送到客户端。因为HTTP是一个请求-响应协议,所 以聊天服务器不能把新消息发给客户。取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息。
这些情况发生时长轮询是个减轻服务器负载挺有趣的技术。如果当被轮询时服务器没有新消息,它就不理这个客户端。而当尚未超时的情况下收到了 该客户的新消息,服务器就会找到未完成的请求,把新消息做为响应返回给客户端。总结一下
希望看了本文,你能明白不同的网络模块是如何协同工作的
本篇文章来源于 站长资讯网 原文链接:
我们似乎每天都要做这样一件事情,打开一个浏览器,输入网址,回车,一个空白的页面顿时有了东西,它可能是百度之类的搜索页面,或是一个挤满了文字和图片的门户网站。从我们打开浏览器,到我们看到我们想看的内容,这过程究竟发生了什么?
下面我们就从三个方面理解这个过程,一个是浏览器,二个是服务器,第三个是浏览器和服务器之间通信的协议。在理解这三方面之前我们必须先搞明白将这三方面联系起来的一个词:web。
1,world wide web
我们通常所说的web就是指world wide web。一般来讲,这一种通过浏览器来访问资源的技术。我们经常说的上网,应该大部都是指的是上万维网(web),但是我们经常将万维网和因特网(Internet)搞混。因特网是一种网络互连的技术,它更指的是物理层面上的互连,而万维网应该算是跑在因特网上的一种服务。
我们通常通过浏览器还访问web,我们常见到的网页中包含超文本,图片,视频音频等各项内容。向我们提供这些资源的是一个一个的站点,通过互联网,这些站点相互连接起来。我们通过超链接从一个网页访问到另外一个网页,从一个站点到另外一个站点,所有的这一切组成一个庞大的网,这就是web。
支持web的技术,首先是底层的网络,因为web就是建立在Internet之上,web的基本协议是HTTP协议,它跑在TCP上的协议之上,而TCP协议又需要IP协议的支持,IP协议又要由底层链路来支撑,所以我们可以从高到第看到这样一个协议栈 http-&tcp-&ip-&连路层协议。要理解web到ip就已经足够了。
我们可以想一想web上的资源有哪些? 首先是文本,后来添加了图片,到现在的各种音频视频资源,所有互联网上的资源都要通过一个叫做URI的东西还标记,当然了我们更常见是URL。现在也不必纠结于两者有何不同,URL就是URI的一个子集,URL给了我们资源的地址,所以我们能够找到它。
现在看一个URL: 这是一个图片的url。它是按照这样的语法来定义:scheme://domain:port/path?query_string#fragment_id.scheme就是协议,在浏览器里通常是http,例子中的是https是一种由HTTP和SSL/TLS组合起来的应用,用以提供加密通信和对网络服务器的身份验证(
)。然后就是域名,每个站点都至少有一个域名,上面例子上的域名部分是,这个域名也是分为三部分的,www是主机名,com.hk算是顶级域名,除了com还有cn,net等。域名后面是端口号默认为80,通常被省略,这是服务器端服务器软件侦听的端口,也是TCP里面一个端口号的值。然后就是path,资源在服务器上的路径。最后问号部分的客户端利用url传给服务器的一些参数值,通常值比较少,不太重要时这么做。
(1)HTTP协议
web里最重要的协议就是HTTP协议,对于经典的ISO七层网络模型来说, HTTP处于最高层--应用层。HTTP应用的模型是client/server模型。因此对应着两种HTTP消息类型,request和response。客户端向服务器发出请求,服务器向客户端发回请求。下面看一下两种类型消息的格式:
下面分别进行解释。
首先是HTTP Request Message
请求行:请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。请求方法常见的有:GET POST HEAD PUT等。
消息报头:在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。 请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。 请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。 POST请求的内容放在实体正文中。
HTTP Response Message
状态行:最主要的一个字段是服务器响应代码。比如,200 OK ,400 Bad Request ,401 Unauthorized ,403 Forbidden ,404 Not Found ,500 Internal Server Error ,503 Server Unavailable
消息报头:普通报头和实体报头与 请求报头的类似。有区别的在于响应包头,响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
(这部分说的比较粗略,网上的资源比较多,可以参考这一篇:
下面是ethereal抓到的一个get报文,post报文和响应报文,可以大概看一下。
(2)TCP协议
HTTP协议基于TCP协议,也就是HTTP的所有内容将作为TCP的实体被封装到TCP报文里面。TCP协议是面向连接,可靠的传输机制。也就是说客户端在与服务器交互数据的过程中会有一个连接建立和释放的过程,看上面的Http头部字段可以看到相关的字段。TCP有强大的窗口机制能够适应发送方和接收方的发送接收能力,也能根据整个网络状况进行调整。
(3)IP协议
IP协议处于整个TCP/IP协议族的承上启下地位。我们知道因特网上主机是靠一个32位的ip地址来定位的,HTTP用的URL也算是地址,但是比较高级,IP协议是理解不了的,所以需要一个从URL到IP的转换,这个过程通过DNS(域名查询系统)协议完成。我们用的每一台电脑上都配置了DNS服务器的地址,如果没有配置那么你的网关默认充当了,当我们有一个URL想知道对应的IP时就需要向DNS服务器发送查询请求了,它会把查询的结果发回。
在web的世界里最不能少的角色就是浏览器。前面我们说到HTTP协议,HTTP消息有两种,request和response。浏览器的主要工作就是发送http request报文和接收处理http response报文。没有看过浏览器的开源文档,但是我觉得一个软件只要完成下面几件事,基本上就可以称的上一个浏览器了。
(1)能够根据用户的请求生成合适的HTTP REQUEST报文。比如用户在浏览器地址栏上输入地址进行访问,浏览器要能够生成HTTP GET报文,表单的发送生成POST报文等等。
(2) 能够对各种的RESPONSE进行处理。
(3)渲染Html文档,生成文档树,能够解释css,还要有个javascript引擎。
(4)能够发起dns查询得到ip地址。
浏览器是个非常复杂的软件,当然现在的浏览器对http协议的支持应该不是问题,它们主要纠结于html文档渲染部分,对于用户层出不穷的新需求,w3c层出不穷的新标准,浏览器的路应该才刚刚开始。
3, 服务器
服务器有两个层级的概念,它可以是机器,它上面存着一个站点的所有东西,也可以是软件,安装在一个也叫做服务器的机器上,帮助这个机器分发用户想要的东西。 我对服务器研究不多,只是用过几次apache。所以只是简单的谈谈我的认识。
服务器最基本的功能就是响应客户端的资源请求。服务器首先会侦听80端口,来了http请求,就根据请求进行处理,请求一个图片那就根据路径找到资源发回,请求静态html页面也是如此,如果请求的是像php这样的动态页面应该先调用php编译器(或是解释器吧)生成html代码,然后返回给客户端。当然还要解决的一个问题就是并行问题以应对大访问量。
因为对这方面不太了解,只想到了这么多。
先说到这里, 有了新的认识再写。
来源:从输入网址到显示网页的全过程分析
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:84628次
排名:千里之外
原创:32篇
评论:16条
(2)(1)(2)(5)(2)(2)(1)(2)(1)(4)(12)(3)(2)

我要回帖

更多关于 瑞文带巨像的勇气 的文章

 

随机推荐