XmlHttpRequest学习笔记 (3) 解析Xml

和其它的http组件不同的是,XmlHttpRequest提供了自动的Xml解析:

responseXML方法

当服务器返回的数据是Xml格式的话,Xmlhttp会自动尝试用其自带的responseXML属性来解析它。responseXML实际上是一个IXMLDOMDocument对象,你可以使用IXMLDOMDocument所提供的方法来操作这个Xml。也就是说,当Xml解析出问题的时候,你可以使用responseXML.parseError来查询错误信息;否则就可以通过比如selectNodes之类的方法来查询Xml的内容。比如,下面的代码演示了如何查询leonax.net的RSS,并且打印出每一条blog的标题和链接:

输出结果如下:

试用传说中的ifttt @ http://leonax.net/p/3022/ifttt-trial/
三国杀——山扩展 @ http://leonax.net/p/3016/sanguosha-shan-ex/
China Joy 2011 @ http://leonax.net/p/3011/china-joy-2011/
在PowerShell中获取当前运行脚本的路径 @ http://leonax.net/p/3005/getting-location-of-executing-script-in-powershell/
美少女特攻队 Sucker Punch 2011 @ http://leonax.net/p/3000/sucker-punch-2011/
个人博客在国内的访问加速 @ http://leonax.net/p/2997/acceleration-of-personal-blog-from-mainland/
iPhone 5,我们能期待些什么? @ http://leonax.net/p/2989/what-can-we-expect-in-iphone-5/
学车笔记 (二) 倒桩 @ http://leonax.net/p/2986/notes-for-driving-study-2/
活埋 Buried 2010 @ http://leonax.net/p/2983/buried-2010/
美少女的谎言 Pretty Little Liars 2010 @ http://leonax.net/p/2979/pretty-little-liars-2010/

个人博客在国内的访问加速

最近开始研究国内访问的解决方案。

可行的方法无非有两种,一是使用第三方的 DNS 服务器,比如 DNSPod,一个国内的免费 DNS 服务器,提供免费的 DNS 解析、流量监测等服务,通过简单的 6 步设置,就可以把域名的 DNS 解析放到 DNSPod 上,解析速度一般低于 100ms(免费版)。

不过即使有了国内的 DNS 解析,博客的内容依然是在国外的服务器上,访问速度依然慢。于是就有了第二种解决方案,CDN。它的全称是 Content delivery network,工作原理大致是把网站的内容缓存到一些网络节点上,终端用户只需访问离他最近的节点即可,大大地减少了数据包传输的物理距离,从而提升网站的实际访问速度。

听上去 CDN 很美好,但是实际上多数 CDN 服务都是要收费的,而且动辄就是成千上万的年费,个人博客实在负担不起。不过最近貌似有免费的 CDN 服务出来了,比如 Webluker,是一家国内的 CDN 服务商,提供免费的 CDN、DNS 解析等服务。兴冲冲地去试了一把,于是就放弃了。据说还有一家 CoCDN 的,现在连主页都打不开了,情何以堪-_- 国外也有免费的 CDN,它家最近的节点在日本,而 GoDaddy 的服务器在新加坡,从网速上差不了多少,还是不用了吧。

于是目前可行的方案就是在 DNSPod 上注册了一个解析服务,其它什么事情也干不了@@

HTTP状态12007

通常HTTP状态代码是三位数字,并以1至5开头,比如200代表状态正常、404代表页面不存在、500代表服务器内部错误。当某一天我看到一个HTTP请求的状态是12007的时候,立马就傻了-_-

比如以下代码:

于是Google之,发现这是由WinINet定义的状况代码,表示服务器名称无法被解析(ERROR_INTERNET_NAME_NOT_RESOLVED)。也就是说,这个HTTP请求根本没发到服务器上,在WinINet那一层,就出错了。

类似的状态还有:

  • 12002:请求超时 (ERROR_INTERNET_TIMEOUT)
  • 12014 / 12015:无法登录FTP服务器(可能是密码错误) (ERROR_INTERNET_INCORRECT_PASSWORD / ERROR_INTERNET_LOGIN_FAILURE)
  • 12031:连接被重置 (ERROR_INTERNET_CONNECTION_RESET)

更多WinINet的错误信息可以参见KB193625.

IPv4 vs IPv6

这几天关于IPv4地址耗尽的报道几乎天天有啊……这东西倒底和我们的生活有什么关系呢?

IPv4是指IP(Internet Protocol)协议第4版,IPv6就是第6版了(至于第5版是什么,有兴趣的同学可以自己查查)。IP协议是网络通信中的一个基础协议。每一个连上网(无论是局域网还是英特网)的设备,都会有一个IP地址,作用和电话号码一样。在浏览网站(如http://leonax.net)的时候,浏览器会先得到这个网站的IP地址,如54.92.46.8,向这个地址来发送请求,然后网站向你的电脑所使用的IP发回网页数据。想像一下你打电话订餐的流程,差不多。

IPv4中的地址格式由4个0到255的整数组成(形如x.x.x.x),就一共可能有256的4次方(即4294967296)种变化。尽管其中有一些特殊用途的地址,比如常见的127.0.0.1和192.168.0.1,英特网中可用的IPv4地址数量在42亿以上。听上去数字蛮吓人的,但仔细想想其实不多啦,全世界人口已经超过60亿了,每人一台设备,地址就分配不过来了……

于是IPv6就产生了,它的地址格式由8个0到65535的整数组成(形如x:x:x:x:x:x:x:x),数量是IPv4地址数量的4次方,具体多少不高兴算了,反正IPv6号称可以给地球上每一粒沙子分配一个地址。取之不尽,用之不竭啊……

既然这样,还用IPv4干啥呀,大家一起上v6不就得了。IPv6在设计的时候并没有考虑兼容性的问题,也就是说IPv4并不能平滑地迁移到IPv6,迁移过程中需要电信运营商、网站等各种机构开展大量的工作,而他们却从中得不到什么好处,于是大家就都拖着,耗到IPv4用完没办法了,才开始着手解决。

那在迁移过程中,家庭用户需要做些什么呢?简单来说:什么都不用做。个人电脑(PC)上,主流的操作系统(Windows / Mac / Linux)都已支持IPv6;而手机所用的3G协议似乎不受IPv6的影响(3G协议不熟,请高手指点)。咱们就坐等电信(或者长宽啥的)的客服上门升级IPv6吧……

*温习一下:IP协议处于OSI 7层协议中的第3层网络层,OSI 7层协议从下到上从别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

StrongVPN,号称是最好的VPN

VPN,全称是虚拟专用网络(Virtual Private Network),是一种加密通信方式,通常在公开的网络中(如互联网),可以保护VPN管道内的通信不被第三方识别。VPN的原理是在客户端A和VPN服务器B之间建立一条通信管道,这条管道中的通信数据都是加密的,所有A发到其它服务器(比如C)的数据,都会先发送到B,在B端解密,再发送到C。和代理服务器不一样的是,VPN连接一旦建立,所有通信都会经由VPN服务器,而代理服务器一般只能控制浏览器的通信。

StrongVPN / ReliableHosting始于1994年在South Lake Tahoe创立的一家销售PC电脑的小企业。但不久,该公司就开始通过California.net为当地人提供上网服务,此后还提供服务器和网络组建服务。到现在还开展起VPN服务,并非常迅速发展。

StrongVPN的技术团队都是一批技术过硬,拥有丰富服务器运维经验的技术工程师,管理遍布全球的服务器超过400台。

StrongVPN具备如下优点:

  • 24小时不间断的客服,包括网页中的在线聊天,电话和Skype等。
  • 支持Windows/Mac/Linux,以及移动设备如iPhone等。
  • 无须安装任何软件即可使用。
  • 128位加密,可保证通信安全。
  • 速度很快,开启VPN之后访问国外网站感觉不出明显的延迟。
  • 随时可用,不限流量。

现在便宜的套餐有两种,$55/年,或者$7/月,可选的VPN出口的美国的3个城市和英国的1个。

他家的客服很热情呀,订完之后还会打电话来确认,然后会发邮件告知VPN的用户名密码。

在Windows中配置VPN请参见这里

想使用StrongVPN的同学可以先看一下套餐介绍,然后去官网注册,暂时没有被墙。

ADSL升级光纤小记

最近家里接到电信的通知说要把 ADSL 的线路换成光纤,速度还是 2M-_-,但是对以后的升级有好处。换就换吧,反正免费的。

昨天有个维修人员上门来安装,原来的 ADSL 猫不用的,新装了两个设备,光纤的猫和路由器,路由器上有 IPTV 的接口。维修人员说这个路由器自带无线功能,然后我就问他怎么登录路由器,他说不能登录,只有无线的密码-_-。等他都调试好走人之后,我发现路由器背面就写了登录的帐号和密码-_-,于是登进去看了一下。控制界面那个简单啊,几乎什么都不能改。无线方面,能改的有是否开放无线、无线网络的 SSID,是否广播 SSID,和“AP隔离”(不知道这个是什么),无线密码没法改,也没法不设密码,那只能不广播了。而且它不能显示有多少客户端连上来,就是不知道有没有人偷网络-_-。用户方面,可以改 admin 帐号的用户名和密码。还有重启路由器之类的功能,其它就没有了……

新的线路用了一天左右,没什么明显的感觉,可能比 ADSL 的反应稍快一点,但影响不大-_-

无线网络的 SSID 默认是 ChinaNet-xxxx,其中 xxxx 是随机 4 位大小写英文,密码是 8 位纯小写字母和数字,WPA-PSK 协议。无线功能不知道是不是默认开通的,如果是的话,等这个设备普及了之后,就全民 WIFI 了呀……

顺便提两个避免别人偷网络的方法:

  1. 禁止 SSID 广播。这样其他人就不知道有这个 SSID 的存在,于是就不会来破解这个无线的密码了。
  2. 设置防火墙中可通过的 MAC 地址。因为家里可用无线的设备就那么几个,把这几个设备的 MAC 地址都设置在路由器里,其它设备一律禁止掉,这样最安全了。

以上两方法都不用对无线加密,节约了电脑和路由器之间的加解密的消耗,很低碳呀:P

XmlHttpRequest学习笔记 (1) 创建

XmlHttpRequest是一个用于在网页中读取服务器数据的组件。最初是由微软开发用来访问Outlook Web Access 2000的。在目前流行的IE版本中都支持(从IE5到IE9),只不过问题是这个东东目前还没有成为标准(W3C正在讨论,只有一个draft可作参考),于是就有了万恶的浏览器兼容性的问题。常见的生成XmlHttpRequest对象的Javascript是这么写的:

在IE7之前,IE中的XmlHttpRequest组件都是由Msxml提供的。尽管Msxml目前有很多版本(从3.0到6.0都是被支持的),但只有3.0是从Win2000到Vista都带的,6.0只在XP SP3和Vista以之后的操作系统中有,而且3.0有个好处是创建的时候只要写"Msxml.Xmlhttp"即可,不用像6.0一样加上后缀的版本号。当然6.0在安全和性能方面都要比3.0好,大有取而代之的趋势。