﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-临渊羡鱼，不如退而结网</title><link>http://www.blogjava.net/jhx800/</link><description>www.auto136.com
柴油发电机
发电机
柴油机
柴油发电机
13636374743（上海）
13291526067（嘉兴）
</description><language>zh-cn</language><lastBuildDate>Fri, 03 Apr 2026 18:17:45 GMT</lastBuildDate><pubDate>Fri, 03 Apr 2026 18:17:45 GMT</pubDate><ttl>60</ttl><item><title>当你输入一个地址之后，后台做了些什么事情呢？</title><link>http://www.blogjava.net/jhx800/archive/2010/10/20/335704.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Wed, 20 Oct 2010 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2010/10/20/335704.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/335704.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2010/10/20/335704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/335704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/335704.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: medium/24px Tahoma, Helvetica, Arial, sans-serif; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; color: rgb(53,53,53); line-height: 21px">
<p class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">作为一个软件开发者，你一定会对网络应用如何工作有一个完整的层次化的认知，同样这里也包括这些应用所用到的技术：像浏览器，HTTP，HTML，网络服务器，需求处理等等。</p>
<p class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">本文将更深入的研究当你输入一个网址的时候，后台到底发生了一件件什么样的事～</p>
<h3 class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">1. 首先嘛，你得在浏览器里输入要网址:</h3>
<p class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; width: 591px; padding-top: 0px; border-bottom: 0px; height: 675px; max-width: 630px" height="675" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image4.png" width="591" border="0" /></p>
<p class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"></p>
<h3 class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">2. 浏览器查找域名的IP地址</h3>
<p class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="96" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image13.png" width="228" border="0" /></p>
<p class="entrybody" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下：</p>
<div class="entrybody" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<ul style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 30px 0px 30px 30px; word-break: break-all; padding-top: 0px; border-right-width: 0px; word-wrap: break-word">
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">浏览器缓存 &#8211;<span class="Apple-converted-space">&nbsp;</span></strong>浏览器会缓存DNS记录一段时间。 有趣的是，操作系统没有告诉浏览器储存DNS记录的时间，这样不同浏览器会储存个自固定的一个时间（2分钟到30分钟不等）。</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">系统缓存</strong><span class="Apple-converted-space">&nbsp;</span>&#8211; 如果在浏览器缓存里没有找到需要的记录，浏览器会做一个系统调用（windows里是gethostbyname）。这样便可获得系统缓存中的记录。</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">路由器缓存</strong><span class="Apple-converted-space">&nbsp;</span>&#8211; 接着，前面的查询请求发向路由器，它一般会有自己的DNS缓存。</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">ISP DNS 缓存</strong><span class="Apple-converted-space">&nbsp;</span>&#8211; 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">递归搜索</strong><span class="Apple-converted-space">&nbsp;</span>&#8211; 你的ISP的DNS服务器从根域名服务器开始进行递归搜索，从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名，所以到顶级服务器的匹配过程不是那么必要了。</li>
</ul>
</div>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">DNS递归查找如下图所示：</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="500px-An_example_of_theoretical_DNS_recursion_svg" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="178" alt="500px-An_example_of_theoretical_DNS_recursion_svg" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/500pxAn_example_of_theoretical_DNS_recursion_svg.png" width="500" border="0" /></p>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">DNS有一点令人担忧，这就是像wikipedia.org 或者 facebook.com这样的整个域名看上去只是对应一个单独的IP地址。还好，有几种方法可以消除这个瓶颈：</p>
<ul style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 30px 0px 30px 30px; word-break: break-all; padding-top: 0px; border-right-width: 0px; word-wrap: break-word">
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(0,66,118); padding-top: 0px; text-decoration: none" href="http://baike.baidu.com/view/1527368.html" target="_blank"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">循环 DNS</strong></a><span class="Apple-converted-space">&nbsp;</span>是DNS查找时返回多个IP时的解决方案。举例来说，Facebook.com实际上就对应了四个IP地址。</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(0,66,118); padding-top: 0px; text-decoration: none" href="http://baike.baidu.com/view/486970.htm" target="_blank"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">负载平衡器</strong></a><span class="Apple-converted-space">&nbsp;</span>是以一个特定IP地址进行侦听并将网络请求转发到集群服务器上的硬件设备。 一些大型的站点一般都会使用这种昂贵的高性能负载平衡器。</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">地理 DNS<span class="Apple-converted-space">&nbsp;</span></strong>根据用户所处的地理位置，通过把域名映射到多个不同的IP地址提高可扩展性。这样不同的服务器不能够更新同步状态，但映射静态内容的话非常好。</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(0,66,118); padding-top: 0px; text-decoration: none" href="http://baike.baidu.com/view/1398775.htm" target="_blank"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Anycast</strong><span class="Apple-converted-space">&nbsp;</span></a>是一个IP地址映射多个物理主机的路由技术。 美中不足，Anycast与TCP协议适应的不是很好，所以很少应用在那些方案中。</li>
</ul>
</div>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">大多数DNS服务器使用Anycast来获得高效低延迟的DNS查找。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"></p>
</div>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">3. 浏览器给web服务器发送一个HTTP请求</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="95" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image22.png" width="216" border="0" /></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">因为像Facebook主页这样的动态页面，打开后在浏览器缓存中很快甚至马上就会过期，毫无疑问他们不能从中读取。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">所以，浏览器将把一下请求发送到Facebook所在的服务器：</p>
<pre class="code" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">GET http://facebook.com/ HTTP/1.1<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, <font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; <font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Accept-Encoding: gzip, deflate<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Connection: Keep-Alive<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Host: facebook.com<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Cookie: datr=1265876274-<font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font>; locale=en_US; lsd=WW<font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font>; c_user=2101<font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font></pre>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">GET 这个请求定义了要读取的<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">URL</strong>： &#8220;http://facebook.com/&#8221;。 浏览器自身定义 (<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">User-Agent</strong><span class="Apple-converted-space">&nbsp;</span>头)， 和它希望接受什么类型的响应 (<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Accept</strong><span class="Apple-converted-space">&nbsp;</span>and<span class="Apple-converted-space">&nbsp;</span><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Accept-Encoding</strong><span class="Apple-converted-space">&nbsp;</span>头).<span class="Apple-converted-space">&nbsp;</span><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Connection</strong>头要求服务器为了后边的请求不要关闭TCP连接。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">请求中也包含浏览器存储的该域名的<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">cookies</strong>。可能你已经知道，在不同页面请求当中，cookies是与跟踪一个网站状态相匹配的键值。这样cookies会存储登录用户名，服务器分配的密码和一些用户设置等。Cookies会以文本文档形式存储在客户机里，每次请求时发送给服务器。</p>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">用来看原始HTTP请求及其相应的工具很多。作者比较喜欢使用fiddler，当然也有像FireBug这样其他的工具。这些软件在网站优化时会帮上很大忙。</p>
</div>
除了获取请求，还有一种是发送请求，它常在提交表单用到。发送请求通过URL传递其参数(e.g.: http://robozzle.com/puzzle.aspx?id=85)。发送请求在请求正文头之后发送其参数。<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
像&#8220;http://facebook.com/&#8221;中的斜杠是至关重要的。这种情况下，浏览器能安全的添加斜杠。而像&#8220;http://example.com/folderOrFile&#8221;这样的地址，因为浏览器不清楚folderOrFile到底是文件夹还是文件，所以不能自动添加斜杠。这时，浏览器就不加斜杠直接访问地址，服务器会响应一个重定向，结果造成一次不必要的握手。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">4. facebook服务的永久重定向响应</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="87" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image8.png" width="214" border="0" /></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">图中所示为Facebook服务器发回给浏览器的响应：</p>
<pre class="code" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">HTTP/1.1 301 Moved Permanently<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
pre-check=0<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Expires: Sat, 01 Jan 2000 00:00:00 GMT<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Location: http://www.facebook.com/<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
P3P: CP="DSP LAW"<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Pragma: no-cache<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
path=/; domain=.facebook.com; httponly<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Content-Type: text/html; charset=utf-8<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
X-Cnection: close<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Date: Fri, 12 Feb 2010 05:09:51 GMT<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Content-Length: 0</pre>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">服务器给浏览器响应一个301永久重定向响应，这样浏览器就会访问&#8220;http://www.facebook.com/&#8221; 而非&#8220;http://facebook.com/&#8221;。</p>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢？这个问题有好多有意思的答案。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">其中一个原因跟<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">搜索引擎排名</strong>有关。你看，如果一个页面有两个地址，就像<a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(0,66,118); padding-top: 0px; text-decoration: none" href="http://litfresh.com/" target="_blank">http://www.litfresh.com/<span class="Apple-converted-space">&nbsp;</span></a>和<a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(0,66,118); padding-top: 0px; text-decoration: none" href="http://litfresh.com/" target="_blank">http://litfresh.com/</a>，搜索引擎会认为它们是两个网站，结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是什么意思，这样就会把访问带www的和不带www的地址归到同一个网站排名下。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">还有一个是用不同的地址会造成<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">缓存友好性</strong>变差。当一个页面有好几个名字时，它可能会在缓存里出现好几次。</p>
</div>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">5. 浏览器跟踪重定向地址</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="95" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image23.png" width="216" border="0" /></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">现在，浏览器知道了&#8220;http://www.facebook.com/&#8221;才是要访问的正确地址，所以它会发送另一个获取请求：</p>
<pre class="code" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">GET http://www.facebook.com/ HTTP/1.1<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, <font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Accept-Language: en-US<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; <font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Accept-Encoding: gzip, deflate<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Connection: Keep-Alive<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Cookie: lsd=XW<font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font>; c_user=21<font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font>; x-referer=<font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Host: www.facebook.com</pre>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">头信息以之前请求中的意义相同。</p>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">6. 服务器&#8220;处理&#8221;请求</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="78" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image9.png" width="93" border="0" /></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">服务器接收到获取请求，然后处理并返回一个响应。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">这表面上看起来是一个顺向的任务，但其实这中间发生了很多有意思的东西- 就像作者博客这样简单的网站，何况像facebook那样访问量大的网站呢！</p>
<ul style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 30px 0px 30px 30px; word-break: break-all; padding-top: 0px; border-right-width: 0px; word-wrap: break-word">
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Web 服务器软件<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    </strong>web服务器软件（像IIS和阿帕奇）接收到HTTP请求，然后确定执行什么请求处理来处理它。请求处理就是一个能够读懂请求并且能生成HTML来进行响应的程序（像ASP.NET,PHP,RUBY...）。
    <p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">举个最简单的例子，需求处理可以以映射网站地址结构的文件层次存储。像http://example.com/folder1/page1.aspx这个地址会映射/httpdocs/folder1/page1.aspx这个文件。web服务器软件可以设置成为地址人工的对应请求处理，这样page1.aspx的发布地址就可以是http://example.com/folder1/page1。</p>
    </li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">请求处理<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    </strong>请求处理阅读请求及它的参数和cookies。它会读取也可能更新一些数据，并讲数据存储在服务器上。然后，需求处理会生成一个HTML响应。</li>
</ul>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">所有动态网站都面临一个有意思的难点 - 如何存储数据。小网站一半都会有一个SQL数据库来存储数据，存储大量数据和/或访问量大的网站不得不找一些办法把数据库分配到多台机器上。解决方案有：sharding （基于主键值将数据表分散到多个数据库中），复制，利用弱语义一致性的简化数据库。</p>
</div>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">委托工作给批处理是一个廉价保持数据更新的技术。举例来讲，Fackbook得及时更新新闻feed，但数据支持下的&#8220;你可能认识的人&#8221;功能只需要每晚更新（作者猜测是这样的，改功能如何完善不得而知）。批处理作业更新会导致一些不太重要的数据陈旧，但能使数据更新工作更快更简洁。</p>
</div>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">7. 服务器发回一个HTML响应</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="87" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image10.png" width="214" border="0" /></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">图中为服务器生成并返回的响应：</p>
<pre class="code" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">HTTP/1.1 200 OK<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
pre-check=0<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Expires: Sat, 01 Jan 2000 00:00:00 GMT<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
P3P: CP="DSP LAW"<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Pragma: no-cache<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Content-Encoding: gzip<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Content-Type: text/html; charset=utf-8<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
X-Cnection: close<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Transfer-Encoding: chunked<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
Date: Fri, 12 Feb 2010 09:05:55 GMT<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
2b3��������T�n�@����<font style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: rgb(173,216,230); padding-top: 0px">[...]</font></pre>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">整个响应大小为35kB，其中大部分在整理后以blob类型传输。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">内容编码</strong>头告诉浏览器整个响应体用gzip算法进行压缩。解压blob块后，你可以看到如下期望的HTML：</p>
<pre style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
lang="en" id="facebook" class=" no_js"&gt;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
...</pre>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">关于压缩，头信息说明了是否缓存这个页面，如果缓存的话如何去做，有什么cookies要去设置（前面这个响应里没有这点）和隐私信息等等。</p>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">请注意报头中把<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Content-type</strong>设置为&#8220;<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">text/html</strong>&#8221;。报头让浏览器将该响应内容以HTML形式呈现，而不是以文件形式下载它。浏览器会根据报头信息决定如何解释该响应，不过同时也会考虑像URL扩展内容等其他因素。</p>
</div>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">8. 浏览器开始显示HTML</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">在浏览器没有完整接受全部HTML文档时，它就已经开始显示这个页面了：</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="137" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image6.png" width="244" border="0" /></p>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">9. 浏览器发送获取嵌入在HTML中的对象</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="126" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image11.png" width="214" border="0" /></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">在浏览器显示HTML时，它会注意到需要获取其他地址内容的标签。这时，浏览器会发送一个获取请求来重新获得这些文件。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">下面是几个我们访问facebook.com时需要重获取的几个URL：</p>
<ul style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 30px 0px 30px 30px; word-break: break-all; padding-top: 0px; border-right-width: 0px; word-wrap: break-word">
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">图片<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    </strong>http://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    http://static.ak.fbcdn.net/rsrc.php/zBS5C/hash/7hwy7at6.gif<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    &#8230;</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">CSS 式样表<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    </strong>http://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    http://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    &#8230;</li>
    <li style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; font-size: 14px; border-bottom-width: 0px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; line-height: 20px; padding-top: 0px; list-style-type: none; border-right-width: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">JavaScript 文件</strong><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    http://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    http://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" />
    &#8230;</li>
</ul>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">这些地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名，发送请求，重定向等等...</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">但不像动态页面那样，静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯，而从缓存中直接读取。服务器的响应中包含了静态文件保存的期限信息，所以浏览器知道要把它们缓存多长时间。还有，每个响应都可能包含像版本号一样工作的ETag头（被请求变量的实体值），如果浏览器观察到文件的版本ETag信息已经存在，就马上停止这个文件的传输。</p>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">试着猜猜看&#8220;<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">fbcdn.net</strong>&#8221;在地址中代表什么？聪明的答案是"Facebook内容分发网络"。Facebook利用内容分发网络（CDN）分发像图片，CSS表和JavaScript文件这些静态文件。所以，这些文件会在全球很多CDN的数据中心中留下备份。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">静态内容往往代表站点的带宽大小，也能通过CDN轻松的复制。通常网站会使用第三方的CDN。例如，Facebook的静态文件由最大的CDN提供商Akamai来托管。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">举例来讲，当你试着ping<span class="Apple-converted-space">&nbsp;</span><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-decoration: underline">static.ak.fbcdn.net</span><span class="Apple-converted-space">&nbsp;</span>的时候，可能会从某个akamai.net服务器上获得响应。有意思的是，当你同样再ping一次的时候，响应的服务器可能就不一样，这说明幕后的负载平衡开始起作用了。</p>
</div>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">10. 浏览器发送异步（AJAX）请求</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word"><img title="image" style="border-right: 0px; padding-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 10px 0px; vertical-align: middle; border-left: 0px; padding-top: 0px; border-bottom: 0px; height: auto! important; max-width: 630px" height="120" alt="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image12.png" width="214" border="0" /></p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">在Web 2.0伟大精神的指引下，页面显示完成后客户端仍与服务器端保持着联系。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">以Facebook聊天功能为例，它会持续与服务器保持联系来及时更新你那些亮亮灰灰的好友状态。为了更新这些头像亮着的好友状态，在浏览器中执行的JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址，它是一个按照程式构造的获取或发送请求。还是在Facebook这个例子中，客户端发送给http://www.facebook.com/ajax/chat/buddy_list.php一个发布请求来获取你好友里哪个在线的状态信息。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">提起这个模式，就必须要讲讲"AJAX"-- &#8220;异步JavaScript 和 XML&#8221;，虽然服务器为什么用XML格式来进行响应也没有个一清二白的原因。再举个例子吧，对于异步请求，Facebook会返回一些JavaScript的代码片段。</p>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">除了其他，fiddler这个工具能够让你看到浏览器发送的异步请求。事实上，你不仅可以被动的做为这些请求的看客，还能主动出击修改和重新发送它们。AJAX请求这么容易被蒙，可着实让那些计分的在线游戏开发者们郁闷的了。（当然，可别那样骗人家~）</p>
</div>
<div class="mynote" style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-right-width: 0px">
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">Facebook聊天功能提供了关于AJAX一个有意思的问题案例：把数据从服务器端推送到客户端。因为HTTP是一个请求-响应协议，所以聊天服务器不能把新消息发给客户。取而代之的是客户端不得不隔几秒就轮询下服务器端看自己有没有新消息。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">这些情况发生时长轮询是个减轻服务器负载挺有趣的技术。如果当被轮询时服务器没有新消息，它就不理这个客户端。而当尚未超时的情况下收到了该客户的新消息，服务器就会找到未完成的请求，把新消息做为响应返回给客户端。</p>
</div>
<h3 style="padding-right: 0px; padding-left: 0px; font-size: 16px; padding-bottom: 0px; margin: 5px 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">总结一下</h3>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">希望看了本文，你能明白不同的网络模块是如何协同工作的。</p>
<p style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 14px 0px; word-break: break-all; line-height: 1.8; padding-top: 0px; position: relative; word-wrap: break-word">修改了一些错字，之前不仔细，请大家见谅~</p>
</span></span><img src ="http://www.blogjava.net/jhx800/aggbug/335704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2010-10-20 17:03 <a href="http://www.blogjava.net/jhx800/archive/2010/10/20/335704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2010年9月9日黄金行情分析</title><link>http://www.blogjava.net/jhx800/archive/2010/09/09/331516.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Thu, 09 Sep 2010 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2010/09/09/331516.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/331516.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2010/09/09/331516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/331516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/331516.html</trackback:ping><description><![CDATA[<div>2010年9月9日黄金行情分析</div>
<div>
<div>行情回顾：昨日国际金价与1255开盘，早间亚盘时段多处于整理向上，在欧盘开盘后，出现上冲，最高上探至1262，之后马上回落在1255一线，获支撑后，金价继续上冲，再次上探1262的阻力，晚间多处于弱势整理，日内更多的时间则处于区间1254-1260内整理，最终日线收盘于1255.98，日线收报一根带长上引线的小阳，可以看做是类十字星。</div>
<div>　　基本面：美国联邦储备委员会8日发表的褐皮书报告显示，由于购房退税政策到期后住房领域继续低迷不振，美国经济在7月下旬和8月份表现疲软；12个辖区的报告显示美国经济仍在增长，但与此前相比，经济增长放缓势头普遍浮现。住房销量在购房退税政策到期后开始走低，随后进一步放缓，导致建筑活动一道放缓。商业地产需求持续低迷，但部分地区显现出了持稳迹象。总体上看，美联储发表的观点较为中性，并未引起市场太多悲观情绪，股市小幅收高。</div>
<div>　　因投资者对欧洲银行业体质的担忧重燃，引发避险情绪升温，欧元周二(9月7日)遭遇重挫，并跌破6月低点以来的重要上升趋势线。受避险情绪以及技术面压力影响，欧元短线可能继续承压。金价受此影响走高，亚洲黄金消费旺季的来临，为金价提供了一定支撑。</div>
<div>　　全球最大的黄金上市交易基金(ETF)&#8211;SPDRGoldTrust表示，截止9月8日的黄金持仓量为1294.4425吨，与上一交易日持平，但本月累计减持9.5856吨，显示大型黄金ETF谨慎看涨黄金。</div>
<div>　　技术面：日线：日线多头趋势维持良好，但在新高面前市场仍保持谨慎。昨日收带上引线的阳十字星，表明了上方压力强度。结合以往几年走势推测，目前金价会在1270-1230盘整，之后突破上行创造新高。日线指标钝化运行良久，随时都有回落可能，金价再次面临调整。</div>
<div>　　4小时周期：惯性上扬后进入整理，金叉粘合，rsi回调50附近游走，有回调修复指标需求，但总体上行通道运行，下方布林中轨于1254起到支撑。1254和1250是上周的两个强阻力位，突破后形成强支撑，如果能有效突破1250，将再次去试探这波涨势的起始点1245-1242。反之，如果调整力度不够，将会为多头带来动力，继续上扬。</div>
<div>　　小时周期：布林收口盘整，布林下轨于1254形成支撑，高位死叉运行，但力度不足，是回调修复表现，下方依然得关注1254和1250的攻防情况。</div>
<div>　　综上所述：日内金剑从昨日日线收线可看出，日内行情弱势盘整可能性比价大，下方关注1250-1252一线，上方关注1260-1258一线，具体做单策略如下：</div>
<div>　　相关操作区间：大区间1240-1265；小区间：1260-1250</div>
<div>　　相关阻力位：1258，1260，1262，1265</div>
<div>　　相关支撑位：1255，1253，1250，1248，1245</div>
<div>　　具体操作策略：</div>
<div>　　***亚盘从小时周期和4小时周期看金价维持在1250-1260盘整，早间如见1258附近做空，止损1260.7，目标：1255-1252；</div>
<div>　　上行策略：</div>
<div>　　1，金价第一次触及1250-1252做多，止损1248下，目标：1255-1258；</div>
<div>　　2，金价得到试探1150-1152一带后，反弹上攻突破1258激进者可轻仓追多，止损1255下，目标：1262-1265既出；</div>
<div>　　3，如见1262-1265分批进空，止损1268，目标中长线持有利润（结合周线看，利润可看20-30美金）</div>
<div>　　下行策略：（结合昨天日线收线看，日内金价走下行可能性比较大）</div>
<div>　　1，金价日内上攻1262上方回调试探突破1250即可追空，止损1252上，目标：1248-1245-1242；</div>
<div>　　2，第一次金价触及1238-1242做多，止损1238下，目标：1248-1252。</div>
<div>　　今日关注：</div>
<div>　　02:00美国美联储经济褐皮书;市场影响★★</div>
<div>　　02:30美国美联储Kocherlakota讲话</div>
<div>　　13:30法国二季度非农就业人数前值0.2%/季</div>
<div>　　14:00德国8月份消费者物价指数前值0.0%/月;市场影响★</div>
<div>　　16:00欧元区欧洲央行月度报告;市场影响★</div>
<div>　　20:30美国7月份贸易收支前值-499亿美元;预测-470亿美元;市场影响★★</div>
<div>　　20:30美国9月4日当周初请失业救济金人数;市场影响★</div>
<div>　　23:00美国9月3日当周原油库存★★★</div>
</div>
<div><br />
</div><img src ="http://www.blogjava.net/jhx800/aggbug/331516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2010-09-09 14:55 <a href="http://www.blogjava.net/jhx800/archive/2010/09/09/331516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>前端性能优化 - 图片篇</title><link>http://www.blogjava.net/jhx800/archive/2010/02/23/313704.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Tue, 23 Feb 2010 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2010/02/23/313704.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/313704.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2010/02/23/313704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/313704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/313704.html</trackback:ping><description><![CDATA[<span  style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; "><strong>一、缩小图片大小</strong><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; ">当图片很多的时候，减少图片大小是提高下载速度最直接的方法。<br />
1. 使用PNG8代替GIF(非动画图片)，因为PNG8在效果一样的情况，图片大小比GIF要小。<br />
&nbsp;<br />
2. 用fireworks处理PNG图片，在我们产品中很多PNG图片是美工直接用photoshop导出的，<br />
&nbsp;&nbsp; &nbsp;后来让美工用fireworks处理PNG(大概的方式是选择保存为PNG8,删除背景色)。<br />
&nbsp;&nbsp; &nbsp;处理后100K的图片大小基本减少了3/4，但图片质量也会有少许降低，要看自己是否能接受。<br />
<br />
3. 使用Smush.it(<a href="http://www.smushit.com/ysmush.it/" title="http://www.smushit.com/ysmush.it/" style="color: #1d58d1; text-decoration: none; ">http://www.smushit.com/ysmush.it/</a>)压缩图片，Smush.it是YUI团队做1个在线压缩图片的网站，<br />
&nbsp;&nbsp; 该网站在不影响原图片的质量下去掉图片中一些元数据，所以可以放心使用该网站进行压缩，<br />
&nbsp;&nbsp; 但这个压缩比例也是比较有限的。</blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><strong>二、合并图片和拆分图片</strong><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; ">1. CSS Sprites合并图片以减少请求数来提高性能大家都知道。但不要把图片合并太多，太多太大了，<br />
就会因为这1个图片影响这个页面的显示了。<br />
<br />
2. 有时候我们需要把1个大图片拆分成多个小图片，比如产品首页图片比较少，就1个很大的banner图片，<br />
因浏览器都可以并发下载图片，所以如果不拆分，只使用1个大图片的话，下载速度反而会比较慢</blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><strong>三、透明图片处理</strong><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; ">IE6不能显示透明的PNG图片，是很多开发人员特别头疼的事，分别介绍下几种方式的优缺点。</blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "><br />
1.使用AlphaImageLoader，IE6支持filter,使用下面的CSS代码，可以让IE6支持PNG<br />
&nbsp;&nbsp;#some-element {<br />
&nbsp;&nbsp; &nbsp;background: url(image.png);<br />
&nbsp;&nbsp; &nbsp;_background: none;<br />
&nbsp;&nbsp; &nbsp;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='image.png', sizingMethod='crop');<br />
&nbsp;&nbsp;}<br />
优点：使用简单<br />
缺点：性能损耗很大,AlphaImageLoader会花费很多资源去处理透明图片，使用AlphaImageLoader,IE使用内存会迅速上升。<br />
而且AlphaImageLoader所有处理都在同1个线程中同步进行，所以当AlphaImageLoader多的时候，会阻塞UI的渲染。<br />
使用_filter，IE7也可以识别，其实IE7是可以识别PNG透明图片的，如果在IE7下使用上面代码，IE7不会直接使用图片，而是使用AlphaImageLoader。<br />
<span style="color: red; ">注：个人建议尽量避免使用AlphaImageLoader</span></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "><br />
2. JS处理<br />
使用DD_belatedPNG(http://www.dillerdesign.com/experiment/DD_belatedPNG/),可以很简单的对界面上所有的透明图片进行同一处理。<br />
优点：使用简单(比AlphaImageLoader还简单)<br />
缺点：当页面上需要处理的图片比较多的时候，速度也比较慢，而且不能动态改变图片。</blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "><br />
3. VML<br />
IE6支持VML，VML可以使用透明图片，代码如下：<br />
修改html代码头部</blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; ">
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 915px; word-break: break-all; "><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">html&nbsp;</span><span style="color: #ff0000; ">xmlns</span><span style="color: #0000ff; ">="http://www.w3.org/1999/xhtml"</span><span style="color: #ff0000; ">&nbsp;xmlns:v</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">head</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #ff0000; ">type</span><span style="color: #0000ff; ">="text/css"</span><span style="color: #0000ff; ">&gt;</span><span style="background-color: #f5f5f5; color: #800000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v\:*</span><span style="background-color: #f5f5f5; color: #000000; ">{</span><span style="background-color: #f5f5f5; color: #ff0000; ">behavior</span><span style="background-color: #f5f5f5; color: #000000; ">:</span><span style="background-color: #f5f5f5; color: #0000ff; ">url(#default#VML)</span><span style="background-color: #f5f5f5; color: #000000; ">;</span><span style="background-color: #f5f5f5; color: #000000; ">}</span><span style="background-color: #f5f5f5; color: #800000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">head</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;</span><span style="color: #800000; ">v:image&nbsp;</span><span style="color: #ff0000; ">src</span><span style="color: #0000ff; ">="image.png"</span><span style="color: #ff0000; ">&nbsp;</span><span style="color: #0000ff; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000ff; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">&lt;/</span><span style="color: #800000; ">html</span><span style="color: #0000ff; ">&gt;</span></div>
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "><br />
</blockquote>优点：性能好，速度快<br />
缺点：使用复杂，而且不支持firefox等浏览器，需要判断不同的浏览器输出不同的HTML代码。</blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "></blockquote><br />
<strong>四、多域名下载图片</strong><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; ">因每个浏览器对同1个域名同时只能发送固定的请求，比如IE6好像是2个，所以可以对图片资源开通多个域名进行请求，<br />
比如img1.abc.com,img2.abc.com。但域名不要开启太多，因为解析域名和打开新的连接都需要消耗时间，域名多了，说不定反而会更慢。一般2-4个域名就够了。</blockquote><br />
<strong>五、IE6下缓存背景图片</strong><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; ">IE6背景图片缓存是个麻烦事，很多人知道使用下面的JS来让IE6缓存背景图片<br />
try{<br />
&nbsp;&nbsp; &nbsp; document.execCommand("BackgroundImageCache", false, true);<br />
}catch(e){}&nbsp;<br />
但是这样做的效果并不是非常好，当出现鼠标移动改变背景图片的时候，IE6老是会发送1个图片请求(尽管该背景图片已经下载)，<br />
虽然返回结果是304，但还是要花费不少时间。在这种情况下，可以使用下面1个变通的方式来处理，<br />
在页面上直接使用1个DIV元素来加载该图片，这样加载图片就能真正被缓存，鼠标移动也不会发送请求了。</blockquote>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size: 13px; "><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">[if&nbsp;IE&nbsp;6]&gt;</span></span>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 954px; word-break: break-all; "><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;style="background-image:url(images/image.png);display:none;"&gt;&lt;/div&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&lt;![endif]</span><span style="color: #008000; ">--&gt;</span></div>
<strong><br />
六、预加载图片</strong><br />
<blockquote class="webkit-indent-blockquote" style="font-style: italic; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; ">使用下面代码可以在页面加载完毕后预加载下1个页面的图片，当进入下1个页面就不用再下载图片了。<br />
window.onload=function(){<br />
&nbsp;&nbsp; var img = new Image();<br />
&nbsp;&nbsp; img.src = "images/image.png";<br />
&nbsp;&nbsp; img = null;<br />
};</blockquote>
<div><br />
</div>
</span><img src ="http://www.blogjava.net/jhx800/aggbug/313704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2010-02-23 13:21 <a href="http://www.blogjava.net/jhx800/archive/2010/02/23/313704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>注册表里如何修改机器名和ip地址</title><link>http://www.blogjava.net/jhx800/archive/2010/02/22/313582.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Mon, 22 Feb 2010 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2010/02/22/313582.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/313582.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2010/02/22/313582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/313582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/313582.html</trackback:ping><description><![CDATA[<span  style="border-collapse: collapse; font-family: Verdana; font-size: 12px; line-height: 18px; ">
<h1 class="b" style="outline-style: none; outline-width: initial; outline-color: initial; margin-top: 15px; margin-right: 15px; margin-bottom: 15px; margin-left: 15px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 16px; font-weight: 700; color: #008ef1; "><span id="subject_tpc" style="outline-style: none; outline-width: initial; outline-color: initial; ">注册表里如何修改机器名和ip地址</span>
<div class="c" style="outline-style: none; outline-width: initial; outline-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-break: break-all; word-wrap: break-word; clear: both; height: 0px; font: normal normal normal 0px/0px Arial; overflow-x: hidden; overflow-y: hidden; "></div>
</h1>
<div class="c" style="outline-style: none; outline-width: initial; outline-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-break: break-all; word-wrap: break-word; clear: both; height: 0px; font: normal normal normal 0px/0px Arial; overflow-x: hidden; overflow-y: hidden; "></div>
<div class="tpc_content" style="outline-style: none; outline-width: initial; outline-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 15px; padding-bottom: 2em; padding-left: 15px; word-break: break-all; word-wrap: break-word; font-family: Arial; line-height: 2em; ">
<div id="p_tpc" class="c" style="outline-style: none; outline-width: initial; outline-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-break: break-all; word-wrap: break-word; clear: both; height: 0px; font: normal normal normal 0px/0px Arial; overflow-x: hidden; overflow-y: hidden; "></div>
<div class="f14" id="read_tpc" style="outline-style: none; outline-width: initial; outline-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-break: break-all; word-wrap: break-word; font-size: 14px; ">比如要将计算机名由"MMX233"改为"P233"，则可以按照下述方法进行操作：打开HKEY_LOCAL_MACHINE\System\CurrenControlSet\Control\ComputerName \ComputerName，将名为"ComputerName"的主键的值从原来的"MMX233"更改为"P233"，注销用户或重新启动 Windows后就会生效。&nbsp;<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
修改IP：&nbsp;<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
Win2000/XP/2003：&nbsp;<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
运行Regedt32，找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\Tcpip\Parameters\Interfaces\（网卡对应的ID号）下的IPAddress<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
SubnetMask是修改子网掩码的。&nbsp;<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
Win98:&nbsp;<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
运行Regedit，找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\Class\NetTrans\（网卡对应的ID号）下的IPaddress&nbsp;<br style="outline-style: none; outline-width: initial; outline-color: initial; " />
SubnetMask是修改子网掩码的。&nbsp;</div>
</div>
</span><img src ="http://www.blogjava.net/jhx800/aggbug/313582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2010-02-22 10:16 <a href="http://www.blogjava.net/jhx800/archive/2010/02/22/313582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LoadRunner监控Tomcat的几种方法(转自csdn,陈能技ID：Testing_is_believing)</title><link>http://www.blogjava.net/jhx800/archive/2010/02/21/313492.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Sun, 21 Feb 2010 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2010/02/21/313492.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/313492.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2010/02/21/313492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/313492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/313492.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 通过JConsole监控Tomcat1、打开tomcat5的bin目录中的catalina.bat文件，在头部注释部分的后面加上：set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.mana...&nbsp;&nbsp;<a href='http://www.blogjava.net/jhx800/archive/2010/02/21/313492.html'>阅读全文</a><img src ="http://www.blogjava.net/jhx800/aggbug/313492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2010-02-21 10:29 <a href="http://www.blogjava.net/jhx800/archive/2010/02/21/313492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinInet 函数返回的错误代码的列表</title><link>http://www.blogjava.net/jhx800/articles/311986.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Thu, 04 Feb 2010 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/articles/311986.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/311986.html</wfw:comment><comments>http://www.blogjava.net/jhx800/articles/311986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/311986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/311986.html</trackback:ping><description><![CDATA[<div><font  face="Verdana, Arial, Helvetica, sans-serif" size="3"><a href="http://support.microsoft.com/kb/193625">http://support.microsoft.com/kb/193625</a></font></div>
<div><font  face="Verdana, Arial, Helvetica, sans-serif" size="3"><br />
</font></div><img src ="http://www.blogjava.net/jhx800/aggbug/311986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2010-02-04 15:52 <a href="http://www.blogjava.net/jhx800/articles/311986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高效监控js代码</title><link>http://www.blogjava.net/jhx800/archive/2009/12/24/307197.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Thu, 24 Dec 2009 10:42:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2009/12/24/307197.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/307197.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2009/12/24/307197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/307197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/307197.html</trackback:ping><description><![CDATA[<div style="font-family: Tahoma; font-size: 11px; color: black; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; "><span style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 13px; color: #ffffff; ">
<pre id="cjabiokabamngnbigeeibddnihgllkggmousedown-target-element" style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #bbbbbb; border-right-color: #bbbbbb; border-bottom-color: #bbbbbb; border-left-color: #bbbbbb; font-size: 9pt; line-height: 15px; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: auto; overflow-y: auto; padding-top: 0.99em; padding-right: 0.99em; padding-bottom: 0.99em; padding-left: 0.99em; word-wrap: break-word; width: 600px; background-color: #ffffff; color: #000000; font-family: monospace; "><span  style="font-family: Arial, Tahoma, Helvetica, sans-serif; line-height: normal; white-space: normal; font-size: 16px; color: #ffffff; "><strong id="cjabiokabamngnbigeeibddnihgllkggmousedown-target-element"></strong></span></pre>
<span style="color: #8500c2; ">
<pre id="cjabiokabamngnbigeeibddnihgllkggmousedown-target-element" style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #bbbbbb; border-right-color: #bbbbbb; border-bottom-color: #bbbbbb; border-left-color: #bbbbbb; font-size: 9pt; line-height: 15px; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: auto; overflow-y: auto; padding-top: 0.99em; padding-right: 0.99em; padding-bottom: 0.99em; padding-left: 0.99em; word-wrap: break-word; width: 600px; background-color: #ffffff; color: #000000; font-family: monospace; "><span  style="font-family: Arial, Tahoma, Helvetica, sans-serif; line-height: normal; white-space: normal; font-size: 16px; color: #ffffff; "><strong id="cjabiokabamngnbigeeibddnihgllkggmousedown-target-element">Description</strong><strong>&nbsp;<br />
</strong>
<div class="desc" style="font-size: 13px; "><strong>Managing multiple webbugs is no fun. The following is an attempt to unify disparate webbugs into a single, extensible, solution.</strong></div>
<strong><br />
</strong><strong id="">How it works</strong><strong>&nbsp;<br />
</strong>
<div class="desc" style="font-size: 13px; "><strong>The unified webbug snippet below replaces the need to include a separate webbug for each of analytics services you are using. Simply add the snippet below to your pages, configure your specific account settings, and you're done. This webbug will make (asynchronous) requests to each of the analytics services, without affecting page performance and simplifying the maintanance of your analytics webbug sprawl.</strong></div>
</span></pre>
<pre id="cjabiokabamngnbigeeibddnihgllkggmousedown-target-element" style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #bbbbbb; border-right-color: #bbbbbb; border-bottom-color: #bbbbbb; border-left-color: #bbbbbb; font-size: 9pt; line-height: 15px; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: auto; overflow-y: auto; padding-top: 0.99em; padding-right: 0.99em; padding-bottom: 0.99em; padding-left: 0.99em; word-wrap: break-word; width: 600px; background-color: #ffffff; color: #000000; font-family: monospace; ">&lt;script type="text/javascript"&gt;
function trackerSetup() {
var tracker = new Tracker();
<span id="quantcast">tracker.addTracker(new QuantcastTracker("<span style="color: green; ">account</span>"));</span>
<span id="googleanalytics">tracker.addTracker(new GoogleAnalyticsTracker("<span style="color: green; ">name</span>", "<span style="color: green; ">UA-XXXXXXX-X</span>"));</span>
<span id="chartbeat">tracker.addTracker(new ChartbeatTracker(<span style="color: green; ">1234</span>, "<span style="color: green; ">domain</span>"));</span>
<span id="omniture">var s_vars = {
s_pageName : "<span style="color: green; ">pageName</span>",
s_server : "<span style="color: green; ">www.test.com</span>",
s_channel : "<span style="color: green; ">IndexPage</span>"
}
tracker.addTracker(new OmnitureTracker(s_vars, "s_code.js"));</span>
tracker.trackPageview();
}
(function loadJs(url, callback) {
setTimeout(function() {
var script = document.createElement("script")
script.type = "text/javascript";
if (script.readyState){
script.onreadystatechange = function(){
if (script.readyState == "loaded" ||
script.readyState == "complete"){
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function(){
callback();
};
}
script.src = url;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(script, s);
},0);
})("http://labs.webmetrics.com/webbug/tracker.js", trackerSetup);
&lt;/script&gt;</pre>
</span>
<pre id="cjabiokabamngnbigeeibddnihgllkggmousedown-target-element" style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #bbbbbb; border-right-color: #bbbbbb; border-bottom-color: #bbbbbb; border-left-color: #bbbbbb; font-size: 9pt; line-height: 15px; margin-top: 1em; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: auto; overflow-y: auto; padding-top: 0.99em; padding-right: 0.99em; padding-bottom: 0.99em; padding-left: 0.99em; word-wrap: break-word; width: 600px; background-color: #ffffff; color: #000000; font-family: monospace; "></pre>
</span></div><img src ="http://www.blogjava.net/jhx800/aggbug/307197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2009-12-24 18:42 <a href="http://www.blogjava.net/jhx800/archive/2009/12/24/307197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下DISPLAY环境变量的作用(转）</title><link>http://www.blogjava.net/jhx800/archive/2009/11/28/304036.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Sat, 28 Nov 2009 10:31:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2009/11/28/304036.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/304036.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2009/11/28/304036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/304036.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/304036.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px">在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容: <br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>DISPLAY=:0.0</td>
        </tr>
    </tbody>
</table>
<br />
使用xdpyinfo可以查看到当前显示的更详细的信息. <br />
<br />
DISPLAY环境变量格式如下host:NumA.NumB, host指Xserver所在的主机主机名或者ip地址, 图形将显示在这一机器上, 可以是启动了图形界面的Linux/Unix机器, 也可以是安装了Exceed, X-Deep/32等Windows平台运行的Xserver的Windows机器. 如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 而不是TCP方式. 使用TCP方式连接时, NumA为连接的端口减去6000的值, 如果NumA为0, 则表示连接到6000端口; 使用unix socket方式连接时则表示连接的unix socket的路径, 如果为0, 则表示连接到/tmp/.X11-unix/X0 . NumB则几乎总是0. <br />
<br />
如果使用su username或者su - username切换到别的用户, 并且使用命令<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>export DISPLAY=:0.0<br />
            </td>
        </tr>
    </tbody>
</table>
<br />
设置DISPLAY环境变量, 运行图形程序(如xclock)时会收到如下错误: <br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>Xlib: connection to ":0.0" refused by server<br />
            Xlib: No protocol specified<br />
            <br />
            Error: Can't open display: :0.0<br />
            </td>
        </tr>
    </tbody>
</table>
<br />
这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的用户的图形显示在当前屏幕上, 则应以当前登陆的用户, 也就是切换身份前的用户执行如下命令<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>xhost +<br />
            </td>
        </tr>
    </tbody>
</table>
<br />
这个命令将允许别的用户启动的图形程序将图形显示在当前屏幕上. <br />
<br />
在2台Linux机器之间, 如果设置服务器端配置文件/etc/ssh/sshd_config中包含<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>X11Forwarding no</td>
        </tr>
    </tbody>
</table>
<br />
客户端配置文件/etc/ssh/ssh_config包含<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>ForwardX11 yes</td>
        </tr>
    </tbody>
</table>
<br />
则从客户端ssh到服务器端后会自动设置DISPLAY环境变量, 允许在服务器端执行的图形程序将图形显示在客户端上. 在服务器上查看环境变量显示如下(这个结果不同的时候并不相同)<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>DISPLAY=localhost:10.0</td>
        </tr>
    </tbody>
</table>
<br />
在客户机上用netstat -lnp可以看到有程序监听了6010端口<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 127.0.0.1:6010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp; 4827/1</td>
        </tr>
    </tbody>
</table>
<br />
如果希望允许远程机器上的图形程序将图形显示在本地机器的Xserver上, 除了要设置远端机器的DISPLAY环境变量以外, 还需要设置本地机器的Xserver监听相应的TCP端口. 而现在的Linux系统出于安全的考虑, 默认情况下不再监听TCP端口. 可通过修改/etc/X11/xinit/xserverrc文件, 将<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>exec /usr/bin/X11/X -dpi 100 -nolisten tcp</td>
        </tr>
    </tbody>
</table>
<br />
修改为<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>exec /usr/bin/X11/X -dpi 100<br />
            </td>
        </tr>
    </tbody>
</table>
<br />
允许在直接使用startx启动图形时启动对TCP端口的监听. <br />
<br />
修改/etc/kde3/kdm/kdmrc, 将<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>ServerArgsLocal=-nolisten tcp</td>
        </tr>
    </tbody>
</table>
<br />
修改为<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>ServerArgsLocal=</td>
        </tr>
    </tbody>
</table>
<br />
允许kdm作为显示管理器时, 启动会话时监听相应的TCP端口. <br />
<br />
修改/etc/gdm/gdm.conf, 在[Security]一节增加<br />
<br />
<table style="border-right: rgb(153,153,153) 1px solid; border-top: rgb(153,153,153) 1px solid; font-size: 12px; border-left: rgb(153,153,153) 1px solid; width: 80%; border-bottom: rgb(153,153,153) 1px solid" align="center">
    <tbody>
        <tr>
            <td>DisallowTCP=false</td>
        </tr>
    </tbody>
</table>
<br />
或者在登陆窗口选择"Options" -&gt; "Configure Login Manager..."的Security页面, 取消"Deny TCP connections to Xserver", 允许gdm作为显示管理器时, 启动会话时监听相应的TCP端口. <br />
</div><img src ="http://www.blogjava.net/jhx800/aggbug/304036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2009-11-28 18:31 <a href="http://www.blogjava.net/jhx800/archive/2009/11/28/304036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下安装loadrunner9,尽情享用吧</title><link>http://www.blogjava.net/jhx800/archive/2009/11/28/304035.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Sat, 28 Nov 2009 10:28:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2009/11/28/304035.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/304035.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2009/11/28/304035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/304035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/304035.html</trackback:ping><description><![CDATA[<div><span  style="border-collapse: collapse; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 22px; ">LR<strong style="word-wrap: break-word; font-style: normal; font-weight: bold; line-height: normal; "><font color="#FF0000" style="word-wrap: break-word; line-height: normal; ">8.0</font></strong>的注册码永久版：</span></div>
<div><span  style="border-collapse: collapse; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 22px; ">10000Webclients&nbsp;&nbsp;AEABEXFR-YTIEKEKJJMFKEKEWBRAUNQJU-KBYGB<br style="word-wrap: break-word; line-height: normal; " />
<br style="word-wrap: break-word; line-height: normal; " />
1000clients&nbsp; &nbsp;&nbsp; &nbsp; AEMAUIK-YAFEKEKJJKEEA-BCJGI</span></div>
1. 下载LR9.0 压缩包到Windows，当然如果Linux能直接连上网就更方便了。<br />
<br />
2. 开启ftp服务,用FTP传入linux中,或者在Linux 中开启samba服务。在samba中建立一个用户并共享一个目录。一定要确保建立的用户对共享的目录拥有相应的权限！！！比如说建立的用户在Linux端是fedora, 但共享的目录是/tmpsoftware. 但是如果/tmpsoftware只有root才有RW的权限的话，那么即使共享了，从windows端也没法访问Linux下的/tmp/software。所以要记得赋权限。有件奇怪的事情，我尝试着在/opt/software试，却怎么也没办法写，至今不明。还有一个要注意的就是共享的目录如果是/home下面的目录，很有可能被SELinux的安全设置给阻挡，导致共享了windows端还是没法访问或写数据。需要在SELinux里面修改secure policy 将/home开放，或者干脆共享其他目录。<br />
<br />
3. 从Windows访问Linux并将LR9.0压缩包copy到共享的目录。我在这步栽了跟头，总是能看到共享目录但是没法copy，后来才发现是因为user 不对，即使在samba里面开放了RW权限，但因为是以fedora登录的，其根本不具备RW权限，所以导致还是没法写。<br />
<br />
4. 解压&nbsp;&nbsp; unzip LR9.zip -d ./LR<br />
<br />
5. 安装前准备。查看loadrunner install guide, PDF 或者是zip 包中的install_notes.txt。在按照之前必须设几个参数。<br />
&nbsp;&nbsp;&nbsp; i. 增加进程条目<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开 /etc/security/limits.conf 添加：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hard nproc 8192<br />
&nbsp;&nbsp;&nbsp; ii. 增加文件描述符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开 /etc/security/limits.conf 添加：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard nfile 8192<br />
&nbsp;&nbsp;&nbsp;&nbsp;iii. 打开 /etc/sysctl.conf 添加:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fs.file-max = 8192<br />
&nbsp;&nbsp;&nbsp; iv.&nbsp;reboot<br />
<br />
6. 安装<br />
&nbsp;&nbsp;&nbsp;&nbsp; chmod u+x install.sh<br />
&nbsp;&nbsp;&nbsp;&nbsp; chmod u+x inst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # inst 会在install.sh中被调用，所以也需要执行用户拥有权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;执行install.sh 有两种方法。一种是在UI下面执行，一种是在console下执行，install guide是这么说的。但是我在UI下面执行的时候被提示说要我在console下执行，晕。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctrl + alt + shift + f1&nbsp; # 从UI切换到console，因为是在VMware上操作，所以多了一个shift. 如果不是的话，直接ctrl + alt + f1<br />
&nbsp;&nbsp;&nbsp;&nbsp; ./install.sh -console<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 报错，<font face="Arial">ERROR:&nbsp; DISPLAY not defined.&nbsp; DISPLAY 是一个环境变量，用来设置将图形显示到何处。如果直接登录UI或者从console中startx 到UI后，DISPLAY 会被自动设为 :0.0&nbsp;&nbsp; 具体细节参看：<font face="Arial"><a href="http://www.edacn.net/?uid-55412-action-viewspace-itemid-32229">http://www.edacn.net/?uid-55412-action-viewspace-itemid-32229</a></font></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看 install.sh 发现有这么一行：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">&nbsp;if [ "$DISPLAY" = "" -o "$DISPLAY" = ":0.0" ]; then<br />
&nbsp;&nbsp;echo ERROR:&nbsp; DISPLAY not defined.</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 怪不得报错了。虽然没明白为什么install.sh里面为什么要这么做，install guide里面也没说到底要怎么设（只提了一句要好好设，晕死）。看了一下关于DISPLAY的介绍，DISPLAY的格式是 hostname:A:B&nbsp;&nbsp; hostname代表要将图形显示到哪台机器，空表示本机。后面A.B涉及到端口。端口我就更晕了，只能是不管三七二十一，先把DISPLAY设为非 :0.0 再说了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export DISPLAY=localhost:0.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo $DISPLAY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost:0.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再试<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./install.sh -console<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成功进入安装程序，当然是文字形式的，按照操作按部就班的进行。当中有一步要指定安装目录，需要选择一个当前用户有权限的目录。所以执行 ./install.sh -console 之前最好su到root, 免得那么多麻烦。<br />
--------------------------<br />
开始安装之前，最好是将当前shell 转到C shell。具体原因稍后再说。<br />
chsh<br />
在改完login shell 之后 logoff and then login.<br />
setenv DISPLAY localhost:0.0<br />
<br />
<p><font face="Arial">用命令&#8220;echo $SHELL&#8221;可以查看当前shell是什么。<br />
</font><font face="Arial">&nbsp;/bin/bash&nbsp; ------------------- Bash Shell<br />
&nbsp;/bin/csh&nbsp;&nbsp; ------------------- C Shell<br />
&nbsp;/bin/ksh&nbsp;&nbsp; ------------------- Kron Shell<br />
&nbsp;/sbin/sh&nbsp;&nbsp; ------------------- Bourne Shell<br />
</font><br />
7. 安装后<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别以为看到了install successfully 就说明没事了，还没到长舒一口气的时候，还有post installation。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你确实已经将shell 改成 C shell 了，后面碰到的问题会少很多。假设当前已经是csh 了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd ~<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vi .cshrc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加一行记录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; source /var/loadrunner/env.csh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #/var/loadrunner 为loadrunner安装目录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logoff and login。 或者开启另一个terminal.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd /var/loadrunner/bin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./verify_generator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 这个utility将会检查当前的安装及配置情况<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;极有可能会fail掉。常见错误是：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a. 找不到.rhosts file.&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b. 找不到libstdc++.so.5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c. DISPLAY&nbsp;没有设<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对应的：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.&nbsp;简单说来，.rhosts&nbsp;是一个安全验证文件。远程机器（将来测试时的controller）将remote当前Linux作为它的generator。将controllor hostname添加在.rhosts里面，这样remote时Linux就会将其做为安全访问而不需要password。此文件应在每个user的home下面，代表controllor以某个user 访问Linux server. 我们暂时可以先创建一个空的文件，等确定controllor之后再添加信息进去。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cd ~<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; touch .rhosts<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b. 这个原因是因为Loadrunner 9.0&nbsp;generator 使用的是 libstdc++.so.5&nbsp;但当前的版本很有可能已经是so.6了。可以这样查看：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd&nbsp;/usr.lib<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ll *libstdc++*so*<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果真的没有，那可以到&nbsp;<a href="http://rpm.pbone.net/">http://rpm.pbone.net</a>里找到后下载安装。在UI下面安装非常方便，双击就可以了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c. 这个就是DISPLAY 这个环境变量没有设的问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setenv DISPLAY localhost:0.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo $DISPLAY<br />
<br />
当然，这里写的都是针对csh来说的。如果用的是K Shell 或者是 Bourne Shell, 则要麻烦一些。必须手动的将三个变量添加到.profile里面去。我没有试过这两种shell, 倒是试过bash，redhat 的默认shell。 但是怎么都没法通过verify_generator的验证，总说M_LROOT 有问题，至今不明是不是本来就不支持bash.<br />
**********************<br />
<font face="Arial">M_LROOT={replace w/ LR Linux installation path} ; export M_LROOT<br />
LD_LIBRARY_PATH=${M_LROOT}/bin; export LD_LIBRARY_PATH<br />
PATH=${M_LROOT}/bin:${PATH}; export PATH<br />
**********************<br />
<br />
写到这里还没有完。还记得之前提过的.rhosts吗，那个实际上是给rsh (remote shell) 用的。要真正确保这个安装在Linux上的generator 能被安装在Windows上的controllor所调用就必须确保windows 能够 rsh Linux 。可惜我到现在还没能试通，不知是不是因为我的windows 和 Linux不属于同一个domain的缘故。还得继续研究，等有结果了之后再发上来。<br />
</font></p><img src ="http://www.blogjava.net/jhx800/aggbug/304035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2009-11-28 18:28 <a href="http://www.blogjava.net/jhx800/archive/2009/11/28/304035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>123123</title><link>http://www.blogjava.net/jhx800/archive/2009/10/13/298118.html</link><dc:creator>Seven</dc:creator><author>Seven</author><pubDate>Tue, 13 Oct 2009 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/jhx800/archive/2009/10/13/298118.html</guid><wfw:comment>http://www.blogjava.net/jhx800/comments/298118.html</wfw:comment><comments>http://www.blogjava.net/jhx800/archive/2009/10/13/298118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jhx800/comments/commentRss/298118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jhx800/services/trackbacks/298118.html</trackback:ping><description><![CDATA[<p><a href="http://dan.febird.net/2009/09/htc-magic-g2-flash-rom.html">http://dan.febird.net/2009/09/htc-magic-g2-flash-rom.html</a> <br />
</p>
<p><br />
http://bbs.dospy.com/viewthread.php?tid=3061548</p>
<p>http://www.hiapk.com/bbs/viewthread.php?action=printable&amp;tid=10159<br />
&nbsp;</p>
<p>http://www.hiapk.com/bbs/thread-9751-1-1.html<br />
<br />
http://www.hiapk.com/bbs/viewthread.php?tid=2834&amp;page=1&amp;extra=#pid11606<br />
<br />
http://www.hiapk.com/bbs/thread-9751-1-1.html<br />
<br />
http://www.gphone-cn.com/bbs/viewthread.php?tid=10889&amp;extra=pageD1&amp;page=1</p><img src ="http://www.blogjava.net/jhx800/aggbug/298118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jhx800/" target="_blank">Seven</a> 2009-10-13 22:21 <a href="http://www.blogjava.net/jhx800/archive/2009/10/13/298118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>