背景:做客户端时在开始的程序菜单里往往会放一个.url的文件,指引用户点击到软件主页上。有时会出现.url文件没有图标。
阅读全文
阅读全文
背景:近来嘴里用舌头发现在右边的脸上有一刀疤,左边也有,但刀疤的愈合程度稍好,右边的老是发炎且多次,脖子出现淋巴颗粒。于是否,我今天下决心用剪刀给剪了,留下些血。电话回家问,说是当时刚生时7天内去找当地的医生看有没有七风,医生说是有,于是给嘴里脸上左右划了两个刀口。我估计是右边没有封好,听说用当地的烧柴锅底部的灰给消毒的,我现在想来都有些后怕,为嘛要给嘴里的两脸上的肉动刀呢?不怕感染么,这是什么原理,害得我作为一个重庆人一吃辣那动刀的地就容易出现炎症,用舌头顶还疼。
查了下网上,还真有这事儿,但是名叫: 有一种特殊的破伤风,是由于新生儿断脐所致,俗称脐风。
破伤风是由破伤风杆菌所引起的一种急性疾病,这种细菌广泛存在于泥土和人畜粪便中,它可通过破损的皮肤和黏膜(如伤口、骨折、烧伤,甚至木刺或锈针刺伤)而侵入人体,并在伤口深部缺氧环境中生长繁殖,产生大量破伤风杆菌病毒,作用于神经系统,引起全身特异性感染。
另外,有一种特殊的破伤风,是由于新生儿断脐所致,俗称脐风、撮口,因其常在断脐后7日左右发病,故又称“七日风”。
破伤风一般在细菌入侵后1—2周开始出现症状(极少数人有短至24小时或长达几个月才出现症状的)。
所以,应尽快到医院检查为好。
摘自:http://ask.baby.sina.com.cn/ask/question-detail/qid/11006694
更多:http://tag.120ask.com/jingyan/1uzqu580wewvrfn5sk.html
问一高中同学:
这个治疗就不好评价,巫医是属于现代心理医师的精神治疗 效果也是有的,具体好不好和个人体质精神状态相关。
查了下网上,还真有这事儿,但是名叫: 有一种特殊的破伤风,是由于新生儿断脐所致,俗称脐风。
破伤风是由破伤风杆菌所引起的一种急性疾病,这种细菌广泛存在于泥土和人畜粪便中,它可通过破损的皮肤和黏膜(如伤口、骨折、烧伤,甚至木刺或锈针刺伤)而侵入人体,并在伤口深部缺氧环境中生长繁殖,产生大量破伤风杆菌病毒,作用于神经系统,引起全身特异性感染。
另外,有一种特殊的破伤风,是由于新生儿断脐所致,俗称脐风、撮口,因其常在断脐后7日左右发病,故又称“七日风”。
破伤风一般在细菌入侵后1—2周开始出现症状(极少数人有短至24小时或长达几个月才出现症状的)。
所以,应尽快到医院检查为好。
摘自:http://ask.baby.sina.com.cn/ask/question-detail/qid/11006694
更多:http://tag.120ask.com/jingyan/1uzqu580wewvrfn5sk.html
问一高中同学:
这个治疗就不好评价,巫医是属于现代心理医师的精神治疗 效果也是有的,具体好不好和个人体质精神状态相关。
背景:防止盗链,大多数能搞定,但防止抓取有些困难。curl 模拟浏览器头和refer及Curl模仿http浏览器常见命令:http://www.jackxiang.com/post/6641/
.htaccess
DirectoryIndex search.php
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://你的网站IP [NC,OR]
RewriteRule ^search_result.php search.php
如果HTTP_REFERER为空或者与指定的网站IP不匹配。访问search_result.php时跳到search.php.
[NC] ,[OR]这个我也不太懂。望高手指点下。
摘自:http://yulei568.blog.163.com/blog/static/135886720084231390136/
更多相关:http://www.jb51.net/os/RedHat/1060.html
.htaccess
DirectoryIndex search.php
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://你的网站IP [NC,OR]
RewriteRule ^search_result.php search.php
如果HTTP_REFERER为空或者与指定的网站IP不匹配。访问search_result.php时跳到search.php.
[NC] ,[OR]这个我也不太懂。望高手指点下。
摘自:http://yulei568.blog.163.com/blog/static/135886720084231390136/
更多相关:http://www.jb51.net/os/RedHat/1060.html
关于Sina Weibo PHPSDK里的php <?= > 输出不了的问题
Php/Js/Shell/Go jackxiang 2014-4-13 14:13
背景:下了一个新浪微博的PHPSDK,里面有<?=$a?>输出,但是我用的wamp套件输出不了,换成echo就能输出来。
php <?= > 问题
$i = o;<?= $i ?>为什么输不出来结果呢?换成echo就能输出来,我很奇怪,是不是我的配置文件没配好,请大家帮帮我!谢谢
在php.ini文件中设置short_open_tag为on即可,但是不建议使用这种简短风格的写法!
规范写法:<?php echo $i; ?>
————————————————————————————————————
解决方法:
wamp默 认有2个地方
; - short_open_tag = Off [Portability]
short_open_tag = Off
当 在wamp里php里勾选short open tag时,这两个地方都变成On
需要改2个地方吗?验证ing
; - short_open_tag = Off [Portability]
short_open_tag = On 不行,重启也不行
; - short_open_tag = On [Portability]
short_open_tag = On 不行,重启也不行
把 php里的short open tag勾选了,才行,php.ini都是On,其他并未改变,难道还有别的文件?
搜索发现有2个 php.ini
C:\wamp\bin\php\php5.2.8
C:\wamp\bin\apache\Apache2.2.11\bin
现 在wamp里勾选,apache文件夹里的ini变成2个on,php文件夹里的还是off。
使用phpinfo查看,最终证明只有 C:\wamp\bin\apache\Apache2.2.11\bin\php.ini里的一个short_open_tag = On管用,而且编辑文本不会使wamp的勾选变化。
要在PHP文件中的PHP.INI文件改了才起作用.
摘自:http://hi.baidu.com/123123la/item/e84c431eb823f9fe65eabf98
实践如下:
打开wamp后,在任务栏里左键,找到PHP项,后在PHP-》PHP设置里的short open tag勾选上。
short_open_tag = On //如只编辑php.ini的文本不会使wamp的勾选变化。
php <?= > 问题
$i = o;<?= $i ?>为什么输不出来结果呢?换成echo就能输出来,我很奇怪,是不是我的配置文件没配好,请大家帮帮我!谢谢
在php.ini文件中设置short_open_tag为on即可,但是不建议使用这种简短风格的写法!
规范写法:<?php echo $i; ?>
————————————————————————————————————
解决方法:
wamp默 认有2个地方
; - short_open_tag = Off [Portability]
short_open_tag = Off
当 在wamp里php里勾选short open tag时,这两个地方都变成On
需要改2个地方吗?验证ing
; - short_open_tag = Off [Portability]
short_open_tag = On 不行,重启也不行
; - short_open_tag = On [Portability]
short_open_tag = On 不行,重启也不行
把 php里的short open tag勾选了,才行,php.ini都是On,其他并未改变,难道还有别的文件?
搜索发现有2个 php.ini
C:\wamp\bin\php\php5.2.8
C:\wamp\bin\apache\Apache2.2.11\bin
现 在wamp里勾选,apache文件夹里的ini变成2个on,php文件夹里的还是off。
使用phpinfo查看,最终证明只有 C:\wamp\bin\apache\Apache2.2.11\bin\php.ini里的一个short_open_tag = On管用,而且编辑文本不会使wamp的勾选变化。
要在PHP文件中的PHP.INI文件改了才起作用.
摘自:http://hi.baidu.com/123123la/item/e84c431eb823f9fe65eabf98
实践如下:
打开wamp后,在任务栏里左键,找到PHP项,后在PHP-》PHP设置里的short open tag勾选上。
short_open_tag = On //如只编辑php.ini的文本不会使wamp的勾选变化。
基于统计的冗余设计
如:
count(*)操作。
需要不精准结果,可以直接show table status like …获得。
需要精准结果,可以在缓存层增加key-value对,实时更新该key-value。同时异步更新到数据库中冗余字段,或冗余表中。
查询数据表有多少行,多少容量
不要使用select count(*)
使用show table status like ‘table_name’ 但是innodb的话会有50%左右的浮动,是个预估值
阅读全文
如:
count(*)操作。
需要不精准结果,可以直接show table status like …获得。
需要精准结果,可以在缓存层增加key-value对,实时更新该key-value。同时异步更新到数据库中冗余字段,或冗余表中。
查询数据表有多少行,多少容量
不要使用select count(*)
使用show table status like ‘table_name’ 但是innodb的话会有50%左右的浮动,是个预估值
阅读全文
近来翻墙后访问facebook后,突然跑到: www.facebook.com.gos.saveinter.net,一看就不是 facebook 啊,saveinter.net 是挂在 GODADDY.COM 服务提供商下面的网站,Facebook 需要 godaddy 提供服务? 可以直接判定为钓鱼了!此网站是一个钓鱼网站无误。
最后,无论域名多少长,最后的两位才是真正的有效域名,比如这个域名中的 saveinter.net 就是一个例子,无论前面有多长的字符都是 saveinter.net 的二级域名。二级域名表明都是 saveinter.net 的子域,跟 facebook.com 毫无关系,无论前面提到了 facebook.com 什么云云。都是忽悠的,这就是传中的钓鱼,呵呵。网上不安全,时刻要警醒。
最后,无论域名多少长,最后的两位才是真正的有效域名,比如这个域名中的 saveinter.net 就是一个例子,无论前面有多长的字符都是 saveinter.net 的二级域名。二级域名表明都是 saveinter.net 的子域,跟 facebook.com 毫无关系,无论前面提到了 facebook.com 什么云云。都是忽悠的,这就是传中的钓鱼,呵呵。网上不安全,时刻要警醒。
背景:
Linux 下的权限比较起Windows是个问题,但它保证了其安全性,Cache 会出现 chmod(): Operation not permitted 这个讯息。查看 cache 目录应该是 PHP 以 safe mode 执行的关系,所以没办法建出 777 权限目录。
php -i|grep safe_mode
safe_mode => Off => Off
—————————————————想办法以try catch实现抓权限———————————————————————————
问:PHP在Linux下以www运行为了确保你要读取的WEB页面可以访问,如何才能获得文件的相关属性?
答:PHP提供了一组获得文件属性的方法,例如 filemtime(),fileowner(),filegroup(),filectime(),fileatime()...详细的使用请参阅手册。
来自:http://jingyan.baidu.com/article/bea41d4346a1b2b4c51be6a1.html
文件:fileowner.php
运行:
php fileowner.php
48
48是谁?
vi /etc/passwd 找48即可,是www,如下:
www:x:48:48::/home/www:/sbin/nologin
更多函数一块写:
文件:fileInfo.php
运行情况:
文件拥有者id:48
文件属组id:48
文件权限值:0644
更多PHP手册函数:
http://www.wapm.cn/phpdoc/zh/function.fileperms.html
http://www.w3school.com.cn/php/func_filesystem_filegroup.asp
http://www.w3school.com.cn/php/func_filesystem_fileowner.asp
php异常捕获try catch实例解析:
http://www.jbxue.com/article/10331.html
—————————————————以try catch实现对其权限不够的不活并写入日志—————————————————
permitted.php
这块故意给它一个root权限,chown -R root permitted.php
去执行和写的权限:chmod a-xw permitted.txt
在web下运行结果,tail -f /tmp/logPermissionFile4My.txt :
DateTime:2014-03-25 13:23:22
Error on line 7 in /data/htdocs/tools.jackxiang.com/fileowner.php, ErrorException[Warning]:chmod():Operation not permitted
文件拥有者id:0
文件属组id:0
文件权限值:0444
Linux 下的权限比较起Windows是个问题,但它保证了其安全性,Cache 会出现 chmod(): Operation not permitted 这个讯息。查看 cache 目录应该是 PHP 以 safe mode 执行的关系,所以没办法建出 777 权限目录。
php -i|grep safe_mode
safe_mode => Off => Off
—————————————————想办法以try catch实现抓权限———————————————————————————
问:PHP在Linux下以www运行为了确保你要读取的WEB页面可以访问,如何才能获得文件的相关属性?
答:PHP提供了一组获得文件属性的方法,例如 filemtime(),fileowner(),filegroup(),filectime(),fileatime()...详细的使用请参阅手册。
来自:http://jingyan.baidu.com/article/bea41d4346a1b2b4c51be6a1.html
文件:fileowner.php
运行:
php fileowner.php
48
48是谁?
vi /etc/passwd 找48即可,是www,如下:
www:x:48:48::/home/www:/sbin/nologin
更多函数一块写:
文件:fileInfo.php
运行情况:
文件拥有者id:48
文件属组id:48
文件权限值:0644
更多PHP手册函数:
http://www.wapm.cn/phpdoc/zh/function.fileperms.html
http://www.w3school.com.cn/php/func_filesystem_filegroup.asp
http://www.w3school.com.cn/php/func_filesystem_fileowner.asp
php异常捕获try catch实例解析:
http://www.jbxue.com/article/10331.html
—————————————————以try catch实现对其权限不够的不活并写入日志—————————————————
permitted.php
这块故意给它一个root权限,chown -R root permitted.php
去执行和写的权限:chmod a-xw permitted.txt
在web下运行结果,tail -f /tmp/logPermissionFile4My.txt :
DateTime:2014-03-25 13:23:22
Error on line 7 in /data/htdocs/tools.jackxiang.com/fileowner.php, ErrorException[Warning]:chmod():Operation not permitted
文件拥有者id:0
文件属组id:0
文件权限值:0444
js detect image 404,read the HTTP header to check for 404 with jQuery without performing an ajax request
Php/Js/Shell/Go jackxiang 2014-3-24 18:02
js detect image 404:
一、用Ajax,代码量较长:
二、用图像的onerror函数实现判断404,实践OK:
_________________________________________________________________________
来自:http://forums.mozillazine.org/viewtopic.php?f=25&t=315570
Hello All,
can do this either by Jquery or Javascript...
来自:
http://www.coderanch.com/t/624410/HTML-CSS-JavaScript/check-url-returns-error-status
一、用Ajax,代码量较长:
二、用图像的onerror函数实现判断404,实践OK:
_________________________________________________________________________
来自:http://forums.mozillazine.org/viewtopic.php?f=25&t=315570
Hello All,
can do this either by Jquery or Javascript...
来自:
http://www.coderanch.com/t/624410/HTML-CSS-JavaScript/check-url-returns-error-status
[实践OK]PHP 遇到mysql header不致的问题:Headers and client library minor version mismatch是myql不同版本同在一台机器上导致的,如何卸载重新安装以成功避免。
Php/Js/Shell/Go jackxiang 2014-3-19 16:10
Percona MySQL 升級 5.6 後, PHP 的 mysql_connect() 就出現下述警告(Warning)訊息:
PHP Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50531 Library:50613 ...
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50153 Library:50613 in /data/htdocs/jackxiang.com/libraries/database/mysqlrw.php on line 271
要如何解決?
实践Ok步骤及注意点:
第一点:出现这种情况的可能性必定是因为这个Linux不是纯净的Linux,里面以前有rpm,或低版本的Mysql安装,如何解决之:
第一步:干掉所有的mysql相关的rpm包:
rpm -qa | grep -i mysql | xargs rpm -e --allmatches --nodeps
第二步:是干掉所有相关mysql的各种通过源码安装的安装包及动态库:
find /usr -name "mysql" -exec rm -rf {} \;
find /usr -name "my*" -exec rm {} \;
这下一下子就清静了。
注意点:
1)有可能出现你是干掉了,但是你再安装时还是出现上述错误,为何:
这涉及到有可能关于编译make的问题,makefile如果你颠倒了(也就是你先编译后,再去删除mysql,重新编译(没有clean掉生成的so,.a),因为之前编译的还在,它引用的还是原来的那个mysql header,依旧不行滴。),为此,你得先干死mysql,php,然后是把它们的目录挪动到加上-bak的,如:mysql-bak。
2)把源码包删除掉,重新tar 解压出一份目录,mysql再cmake,php再进行./configure。当然,如果通过make clean能清完,也可以不用删除再重新解包,我是直接删除,再完全重新编译。
总之,不能让先前安装好的包,先前编译的源码包里沾染上原来旧版本的mysql包,这才是核心,否则,编译出来问题依旧,达不到想要的目的。阅读全文
PHP Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50531 Library:50613 ...
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50153 Library:50613 in /data/htdocs/jackxiang.com/libraries/database/mysqlrw.php on line 271
要如何解決?
实践Ok步骤及注意点:
第一点:出现这种情况的可能性必定是因为这个Linux不是纯净的Linux,里面以前有rpm,或低版本的Mysql安装,如何解决之:
第一步:干掉所有的mysql相关的rpm包:
rpm -qa | grep -i mysql | xargs rpm -e --allmatches --nodeps
第二步:是干掉所有相关mysql的各种通过源码安装的安装包及动态库:
find /usr -name "mysql" -exec rm -rf {} \;
find /usr -name "my*" -exec rm {} \;
这下一下子就清静了。
注意点:
1)有可能出现你是干掉了,但是你再安装时还是出现上述错误,为何:
这涉及到有可能关于编译make的问题,makefile如果你颠倒了(也就是你先编译后,再去删除mysql,重新编译(没有clean掉生成的so,.a),因为之前编译的还在,它引用的还是原来的那个mysql header,依旧不行滴。),为此,你得先干死mysql,php,然后是把它们的目录挪动到加上-bak的,如:mysql-bak。
2)把源码包删除掉,重新tar 解压出一份目录,mysql再cmake,php再进行./configure。当然,如果通过make clean能清完,也可以不用删除再重新解包,我是直接删除,再完全重新编译。
总之,不能让先前安装好的包,先前编译的源码包里沾染上原来旧版本的mysql包,这才是核心,否则,编译出来问题依旧,达不到想要的目的。阅读全文
解决 maps to localhost, but this does not map back to the address
Unix/LinuxC技术 jackxiang 2014-3-19 14:33
修改 /etc/ssh/ssh_config
vim /etc/ssh/ssh_config
GSSAPIAuthentication no
----------------------------------
修改 /etc/ssh/ssh_config
vim /etc/ssh/ssh_config
在server 把GSSAPIAuthentication yes
后面的yes 改成no
然后/etc/init.d/sshd restart
来自:http://jafy00.blog.51cto.com/2594646/810716
http://fleiou2008.blog.163.com/blog/static/819810172012631111922846/
vim /etc/ssh/ssh_config
GSSAPIAuthentication no
----------------------------------
修改 /etc/ssh/ssh_config
vim /etc/ssh/ssh_config
在server 把GSSAPIAuthentication yes
后面的yes 改成no
然后/etc/init.d/sshd restart
来自:http://jafy00.blog.51cto.com/2594646/810716
http://fleiou2008.blog.163.com/blog/static/819810172012631111922846/
Fix broken UTF8 encoded RSS feeds in php,RSS出现“Input is not proper UTF-8, indicate encoding !”的解决方法。
Php/Js/Shell/Go jackxiang 2014-3-19 10:14
背景:输出xml提示:error on line 323 at column 23: Input is not proper UTF-8, indicate encoding !<username><![CDATA[*这儿有一个隐藏字符*執↘著]]></username>,去掉就好了,但是这个是用户的输入。
RSS出现“Input is not proper UTF-8, indicate encoding !”的解决方法:
This page contains the following errors:
error on line 402 at column 25: Input is not proper UTF-8, indicate encoding !
Bytes: 0×07 0×43 0×68 0×61
Below is a rendering of the page up to the first error.
搜索一下,说是内容中有不完整的utf8字符导致xml解析器出错。
根据提示的错误位置,把附近的文字复制到Emeditor中,那个隐藏的不完整字符出现了,Emeditor中是用一个大黑点表示的,删除后把文本复制回去,搞定。
上面这个不是长久办法,最后一老外有一篇文章:
http://www.mybelovedphp.com/2009/07/03/fix-broken-utf8-encoded-rss-feeds-in-php/
RSS出现“Input is not proper UTF-8, indicate encoding !”的解决方法:
This page contains the following errors:
error on line 402 at column 25: Input is not proper UTF-8, indicate encoding !
Bytes: 0×07 0×43 0×68 0×61
Below is a rendering of the page up to the first error.
搜索一下,说是内容中有不完整的utf8字符导致xml解析器出错。
根据提示的错误位置,把附近的文字复制到Emeditor中,那个隐藏的不完整字符出现了,Emeditor中是用一个大黑点表示的,删除后把文本复制回去,搞定。
上面这个不是长久办法,最后一老外有一篇文章:
http://www.mybelovedphp.com/2009/07/03/fix-broken-utf8-encoded-rss-feeds-in-php/
linux shell 脚本实现监听端口的shel协议通讯(重定向应用)。
Unix/LinuxC技术 jackxiang 2014-3-17 22:04
零、一段监听端口的shell:
摘自:http://ajiewps.sinaapp.com/?p=266
一、通过shell脚本重定向实现监控memcache状态:
通过nc命令实现:
[chengmo@centos5 shell]$ (echo "stats")|nc 127.0.0.1 11211
二、通过重定向读取远程web服务器头信息:
(echo -e "HEAD / HTTP/1.1\n\n\n\n\n";sleep 2)|telnet www.baidu.com 80
参考:http://www.cnblogs.com/chengmo/archive/2010/10/22/1858302.html
摘自:http://ajiewps.sinaapp.com/?p=266
一、通过shell脚本重定向实现监控memcache状态:
通过nc命令实现:
[chengmo@centos5 shell]$ (echo "stats")|nc 127.0.0.1 11211
二、通过重定向读取远程web服务器头信息:
(echo -e "HEAD / HTTP/1.1\n\n\n\n\n";sleep 2)|telnet www.baidu.com 80
参考:http://www.cnblogs.com/chengmo/archive/2010/10/22/1858302.html
背景:我老家在重庆丰都江池,打从小就听家里人说是石柱有一个叫秦良玉的女人很厉害,当地人叫秦氏妇人,其死后发了72个假坟,大家到目前为止没有找到其真坟(我们那地擅于挖坟求宝),而我在初中还以为是秦始皇(但他是男人),去年看了下明朝那些事儿在崇祯皇帝发现有么个人,但没有想到她还是我们那边的人,一看这人还真猛人也,这人在我们那边的名气很大,为此,特给予记录转载。
阅读全文
阅读全文
MD5数值大小写有关系吗?无!php-md5变换算法之大小写变换干涉代码。
Php/Js/Shell/Go jackxiang 2014-3-14 17:11
背景:外包对下一个客户端的MD5值里的字母是大小写敏感,说道:你的md5怎么给成大写的了?之前不是给的小写的?我是想问一下你们 这个值确定是大写还是小写 还是不确定?我的回答是:我想说的是你得兼容。
C++也有PHP这样的类似函数:http://www.zedwood.com/article/cpp-strtoupper-function
Continuing on with our efforts to replicate the php string manipulation with C++ and the STL, I have implemented strtoupper() and strtolower();
由于PHP所提供的md5()函数返回的密文中的英文字母全部都是小写的,因此我们可以把它们全部转为大写,然后再进行一次MD5运算。
来自:
http://zhidao.baidu.com/question/54522503.html
http://www.oschina.net/code/snippet_59519_2946
C++也有PHP这样的类似函数:http://www.zedwood.com/article/cpp-strtoupper-function
Continuing on with our efforts to replicate the php string manipulation with C++ and the STL, I have implemented strtoupper() and strtolower();
由于PHP所提供的md5()函数返回的密文中的英文字母全部都是小写的,因此我们可以把它们全部转为大写,然后再进行一次MD5运算。
来自:
http://zhidao.baidu.com/question/54522503.html
http://www.oschina.net/code/snippet_59519_2946
https其实就是建构在 ssl 层之上的 http协议,所以要比较https比http多用多少服务器资源,主要看 ssl 本身消耗多少服务器资源。
http使用TCP 三次握手建立连接,客户端和服务器需要交换3个包,https除了 TCP 的三个包,还要加上 ssl握手需要的9个包,所以一共是12个包。http 建立连接,按照下面链接中针对Computer Science House的测试,是114毫秒;https建立连接,耗费436毫秒。ssl 部分花费322毫秒,包括网络延时和ssl 本身加解密的开销(服务器根据客户端的信息确定是否需要生成新的主密钥;服务器回复该主密钥,并返回给客户端一个用主密钥认证的信息;服务器向客户端请求数字签名和公开密钥)。
SSL handshake latency and HTTPS optimizations. :: semicomplete.com
当SSL 连接建立后,之后的加密方式就变成了3DES等对于 CPU 负荷较轻的对称加密方式。相对前面 SSL 建立连接时的非对称加密方式,对称加密方式对 CPU 的负荷基本可以忽略不记,所以问题就来了,如果频繁的重建 ssl 的session,对于服务器性能的影响将会是致命的,尽管打开https 保活可以缓解单个连接的性能问题,但是对于并发访问用户数极多的大型网站,基于负荷分担的独立的SSL termination proxy就显得必不可少了,Web 服务放在SSL termination proxy之后。SSL termination proxy既可以是基于硬件的,譬如F5;也可以是基于软件的,譬如维基百科用到的就是 Nginx,参见下面的链接说明:
SSL termination proxy
那采用 https 后,到底会多用多少服务器资源,2010年1月 Gmail切换到完全使用 https, 前端处理 SSL 机器的CPU 负荷增加不超过1%,每个连接的内存消耗少于20KB,网络流量增加少于2%。由于 Gmail 应该是使用N台服务器分布式处理,所以CPU 负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义。这篇文章中还列出了单核每秒大概处理1500次握手(针对1024-bit 的 RSA),这个数据很有参考意义,具体信息来源的英文网址:ImperialViolet。
可能看了上面的描述,有些概念过于专业,所以想讲一个故事让大家比较好理解:
从前山上有座庙,庙里有个和尚......,别胡闹了,老和尚来了。
小和尚问老和尚:ssl为什么会让http安全?
老和尚答道:譬如你我都有一个同样的密码,我发信给你时用这个密码加密,你收到我发的信,用这个密码解密,就能知道我信的内容,其他的闲杂人等,就算偷偷拿到了信,由于不知道这个密码,也只能望信兴叹,这个密码就叫做对称密码。ssl使用对称密码对http内容进行加解密,所以让http安全了,常用的加解密算法主要有3DES和AES等。
小和尚摸摸脑袋问老和尚:师傅,如果我们两人选择“和尚”作为密码,再创造一个和尚算法,我们俩之间的通信不就高枕无忧了?
老和尚当头给了小和尚一戒尺:那我要给山下的小花写情书,还得用“和尚”这个密码不成?想了想又给了小和尚一戒尺:虽然我们是和尚,不是码农,也不能自己造轮子,当初一堆牛人码农造出了Wifi的安全算法WEP,后来发现是一绣花枕头,在安全界传为笑谈;况且小花只知道3DES和AES,哪知道和尚算法?
小和尚问到:那师傅何解?
老和尚:我和小花只要知道每封信的密码,就可以读到对方加密的信件,关键是我们互相之间怎么知道这个对称密码。你说,我要是将密码写封信给她,信被别人偷了,那大家不都知道我们的密码了,也就能够读懂我们情书了。不过还是有解的,这里我用到了江湖中秘传的非对称密码。我现在手头有两个密码,一个叫“公钥”,一个叫“私钥”,公钥发布到了江湖上,好多人都知道,私钥嘛,江湖上只有我一个人知道;这两个密钥有数学相关性,就是说用公钥加密的信件,可以用私钥解开,但是用公钥却解不开。公钥小花是知道的,她每次给我写信,都要我的公钥加密她的对称密码,单独写一张密码纸,然后用她的对称密码加密她的信件,这样我用我的私钥可以解出这个对称密码,再用这个对称密码来解密她的信件。
老和尚顿了顿:可惜她用的对称密码老是“和尚为什么写情书”这一类,所以我每次解开密码纸时总是怅然若失,其实我钟意的对称密码是诸如“风花”“雪月”什么的,最头痛的是,我还不得不用“和尚为什么写情书”这个密码来加密我给小花回的情书,人世间最痛苦的事莫过于如此。可有一次出意外了,山下的张屠夫给了小花他自己的公钥,谎称的我公钥刚刚更新了,小花后面给我的信的密码都用这个加密,然后张屠夫用他自己的私钥解开小花的对称密码后,不仅看到了小花的信件,还用这个密码给小花发了很多下流的信,同时也用这个密码伪造了一封小花给我的绝交信,直到三个月之后才真相大白。有此教训后,我重新发布到江湖的公钥,上面都有嵩山少林寺的火印,没有火印的公钥,大家不再相信是我的,可是从此之后,我在江湖已经没有名声,也好久没有收到过情书。
小和尚问:那然后呢?
老和尚:过了一年才知道,其实小花还是给我写过信的,当时信确实是用有火印的公钥加密,张屠夫偷到信后,由于不知道我的私钥,解不开小花的密码信,所以一怒之下将信件全部烧毁了。也由于张屠夫无法知道小花的对称密码而无法回信,小花发出几封信后石沉大海,也心生疑惑,到处打听我的近况。这下张屠夫急了,他使用我发布的公钥,仿照小花的语气,给我发来一封信。拿到信时我就觉得奇怪,信纸上怎么有一股猪油的味道,结尾竟然还关切的询问我的私钥。情知有诈,我思量无论如何要找到办法让我知道来的信是否真是小花所写。后来竟然让我想到了办法....
老和尚摸着光头说:这头发可不是白掉的,我托香客给小花带话,我一切安好,希望她也拥有属于自己的一段幸福,不对,是一对非对称密钥。小花委托小镇美女协会给小花公钥打上火印后,托香客给我送来,这样小花在每次给我写信时,都会在密码纸上贴上一朵小牡丹,牡丹上写上用她自己的私钥加密过的给我的留言,这样我收到自称是小花的信后,我会先抽出密码纸,取下小牡丹,使用小花的公钥解密这段留言,如果解不出来,我会直接将整封信连同密码纸一起扔掉,因为这封信一定不是小花写的,如果能够解出来,这封信才能确信来之于小花,我才仔细的解码阅读。
小和尚:难怪听说张屠夫是被活活气死的。您这情书整的,我头都大了,我长大后,有想法直接扯着嗓子对山下喊,也省的这么些麻烦。不过我倒是明白了楼上的话,ssl 握手阶段,就是要解决什么看火印,读牡丹,解密码纸,确实够麻烦的,所以性能瓶颈在这里,一旦双方都知道了对称密码,之后就是行云流水的解码读信阶段了,相对轻松很多。
来自膘哥的博客:http://www.neatstudio.com/show-2534-1.shtml
http使用TCP 三次握手建立连接,客户端和服务器需要交换3个包,https除了 TCP 的三个包,还要加上 ssl握手需要的9个包,所以一共是12个包。http 建立连接,按照下面链接中针对Computer Science House的测试,是114毫秒;https建立连接,耗费436毫秒。ssl 部分花费322毫秒,包括网络延时和ssl 本身加解密的开销(服务器根据客户端的信息确定是否需要生成新的主密钥;服务器回复该主密钥,并返回给客户端一个用主密钥认证的信息;服务器向客户端请求数字签名和公开密钥)。
SSL handshake latency and HTTPS optimizations. :: semicomplete.com
当SSL 连接建立后,之后的加密方式就变成了3DES等对于 CPU 负荷较轻的对称加密方式。相对前面 SSL 建立连接时的非对称加密方式,对称加密方式对 CPU 的负荷基本可以忽略不记,所以问题就来了,如果频繁的重建 ssl 的session,对于服务器性能的影响将会是致命的,尽管打开https 保活可以缓解单个连接的性能问题,但是对于并发访问用户数极多的大型网站,基于负荷分担的独立的SSL termination proxy就显得必不可少了,Web 服务放在SSL termination proxy之后。SSL termination proxy既可以是基于硬件的,譬如F5;也可以是基于软件的,譬如维基百科用到的就是 Nginx,参见下面的链接说明:
SSL termination proxy
那采用 https 后,到底会多用多少服务器资源,2010年1月 Gmail切换到完全使用 https, 前端处理 SSL 机器的CPU 负荷增加不超过1%,每个连接的内存消耗少于20KB,网络流量增加少于2%。由于 Gmail 应该是使用N台服务器分布式处理,所以CPU 负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义。这篇文章中还列出了单核每秒大概处理1500次握手(针对1024-bit 的 RSA),这个数据很有参考意义,具体信息来源的英文网址:ImperialViolet。
可能看了上面的描述,有些概念过于专业,所以想讲一个故事让大家比较好理解:
从前山上有座庙,庙里有个和尚......,别胡闹了,老和尚来了。
小和尚问老和尚:ssl为什么会让http安全?
老和尚答道:譬如你我都有一个同样的密码,我发信给你时用这个密码加密,你收到我发的信,用这个密码解密,就能知道我信的内容,其他的闲杂人等,就算偷偷拿到了信,由于不知道这个密码,也只能望信兴叹,这个密码就叫做对称密码。ssl使用对称密码对http内容进行加解密,所以让http安全了,常用的加解密算法主要有3DES和AES等。
小和尚摸摸脑袋问老和尚:师傅,如果我们两人选择“和尚”作为密码,再创造一个和尚算法,我们俩之间的通信不就高枕无忧了?
老和尚当头给了小和尚一戒尺:那我要给山下的小花写情书,还得用“和尚”这个密码不成?想了想又给了小和尚一戒尺:虽然我们是和尚,不是码农,也不能自己造轮子,当初一堆牛人码农造出了Wifi的安全算法WEP,后来发现是一绣花枕头,在安全界传为笑谈;况且小花只知道3DES和AES,哪知道和尚算法?
小和尚问到:那师傅何解?
老和尚:我和小花只要知道每封信的密码,就可以读到对方加密的信件,关键是我们互相之间怎么知道这个对称密码。你说,我要是将密码写封信给她,信被别人偷了,那大家不都知道我们的密码了,也就能够读懂我们情书了。不过还是有解的,这里我用到了江湖中秘传的非对称密码。我现在手头有两个密码,一个叫“公钥”,一个叫“私钥”,公钥发布到了江湖上,好多人都知道,私钥嘛,江湖上只有我一个人知道;这两个密钥有数学相关性,就是说用公钥加密的信件,可以用私钥解开,但是用公钥却解不开。公钥小花是知道的,她每次给我写信,都要我的公钥加密她的对称密码,单独写一张密码纸,然后用她的对称密码加密她的信件,这样我用我的私钥可以解出这个对称密码,再用这个对称密码来解密她的信件。
老和尚顿了顿:可惜她用的对称密码老是“和尚为什么写情书”这一类,所以我每次解开密码纸时总是怅然若失,其实我钟意的对称密码是诸如“风花”“雪月”什么的,最头痛的是,我还不得不用“和尚为什么写情书”这个密码来加密我给小花回的情书,人世间最痛苦的事莫过于如此。可有一次出意外了,山下的张屠夫给了小花他自己的公钥,谎称的我公钥刚刚更新了,小花后面给我的信的密码都用这个加密,然后张屠夫用他自己的私钥解开小花的对称密码后,不仅看到了小花的信件,还用这个密码给小花发了很多下流的信,同时也用这个密码伪造了一封小花给我的绝交信,直到三个月之后才真相大白。有此教训后,我重新发布到江湖的公钥,上面都有嵩山少林寺的火印,没有火印的公钥,大家不再相信是我的,可是从此之后,我在江湖已经没有名声,也好久没有收到过情书。
小和尚问:那然后呢?
老和尚:过了一年才知道,其实小花还是给我写过信的,当时信确实是用有火印的公钥加密,张屠夫偷到信后,由于不知道我的私钥,解不开小花的密码信,所以一怒之下将信件全部烧毁了。也由于张屠夫无法知道小花的对称密码而无法回信,小花发出几封信后石沉大海,也心生疑惑,到处打听我的近况。这下张屠夫急了,他使用我发布的公钥,仿照小花的语气,给我发来一封信。拿到信时我就觉得奇怪,信纸上怎么有一股猪油的味道,结尾竟然还关切的询问我的私钥。情知有诈,我思量无论如何要找到办法让我知道来的信是否真是小花所写。后来竟然让我想到了办法....
老和尚摸着光头说:这头发可不是白掉的,我托香客给小花带话,我一切安好,希望她也拥有属于自己的一段幸福,不对,是一对非对称密钥。小花委托小镇美女协会给小花公钥打上火印后,托香客给我送来,这样小花在每次给我写信时,都会在密码纸上贴上一朵小牡丹,牡丹上写上用她自己的私钥加密过的给我的留言,这样我收到自称是小花的信后,我会先抽出密码纸,取下小牡丹,使用小花的公钥解密这段留言,如果解不出来,我会直接将整封信连同密码纸一起扔掉,因为这封信一定不是小花写的,如果能够解出来,这封信才能确信来之于小花,我才仔细的解码阅读。
小和尚:难怪听说张屠夫是被活活气死的。您这情书整的,我头都大了,我长大后,有想法直接扯着嗓子对山下喊,也省的这么些麻烦。不过我倒是明白了楼上的话,ssl 握手阶段,就是要解决什么看火印,读牡丹,解密码纸,确实够麻烦的,所以性能瓶颈在这里,一旦双方都知道了对称密码,之后就是行云流水的解码读信阶段了,相对轻松很多。
来自膘哥的博客:http://www.neatstudio.com/show-2534-1.shtml