AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求[原创]
[ 2009-3-9 11:54 | by 张宴 ]
[文章+部分代码 作者:张宴 本文版本:v1.0 最后修改:2009.03.09 转载请注明原文链接:http://blog.zyan.cc/ajaxcdr/]
最近的一个项目中,需要通过 JavaScript 提交表单数据到另一个域名下的PHP接口(因为数据较大,需要HTTP POST方式提交),并获取PHP接口的返回值,在页面无刷新、无跳转的情况下,更新div标签内的内容。
浏览器出于安全考虑,是不允许JavaScript代码进行跨域操作。JavaScript 和 AJAX 跨域访问分为两大类,一是本域和子域的交互,二是本域和其他域的交互。
一、本域和子域的交互:www.zyan.cc 和 blog.zyan.cc
二、本域和其他域的交互:blog.zyan.cc 和 api.bz
本域和子域的交互,可以通过iframe设置两个域名document.domain = "zyan.cc",实现统一zyan.cc域下的跨域访问。
本域和其他域的交互,可以通过iframe、代理、JS创建动态脚本等几种方法来实现,这里有篇文章对几种方法作了简要的介绍。
iframe、JS创建动态脚本这两种方法,需要开发者能控制两个域,两端都要编写相应的代码,非常麻烦。在本域服务器上用PHP写个代理中转程序,让本域PHP程序去读取远程其他域的数据再返回给自己,是常用的方法。但是,在本域“前端是CDN或Squid缓存服务器,后端才是PHP应用程序服务器”的系统架构下,穿透CDN或Squid去访问不能被缓存的PHP代理中转程序,效率是很低的。
国外有人尝试用 Flash 做 JavaScript 和 AJAX 跨域访问中转,无疑是一个好方法。JavaScript 将数据提交给本域下的 Flash,通过 Flash 中转去访问其他域的接口,条件只需要其他域的根目录下有一个crossdomain.xml文件,文件中设置允许所有域名或允许本域访问即可。很多网站的API域名都提供了crossdomain.xml文件。
例如:
1、新浪博客的crossdomain.xml文件(http://blog.sina.com.cn/crossdomain.xml)设置了允许所有域名访问;
2、饭否API的crossdomain.xml文件(http://api.fanfou.com/crossdomain.xml)设置了允许所有域名访问;
3、校内网API的crossdomain.xml文件(http://api.xiaonei.com/crossdomain.xml)设置了允许所有域名访问;
4、优酷网的crossdomain.xml文件(http://www.youku.com/crossdomain.xml)设置了允许所有域名访问;
5、土豆网的crossdomain.xml文件(http://www.tudou.com/crossdomain.xml)设置了允许所有域名访问;
6、逍遥视频的crossdomain.xml文件(http://v.xoyo.com/crossdomain.xml)设置了只允许*.xoyo.com域名访问;
7、网易的crossdomain.xml文件(http://www.163.com/crossdomain.xml)设置了只允许tech.163.com、sports.163.com等几个域名访问。
本人在“Cross-domain AJAX using Flash”的基础上,增加了对表单进行智能处理的功能,封装了一个JavaScript包:AJAXCDR。通过 AJAXCDR,即可轻松地解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求,支持IE、Firefox、谷歌Chrome等多种浏览器。
AJAXCDR 拥有两个文件:ajaxcdr.js 和 ajaxcdr.swf,AJAXCDR 拥有一个 JavaScript 函数 AjaxCrossDomainRequest() 和一个全局变量 AjaxCrossDomainResponse。
一、AJAXCDR 下载:
最近的一个项目中,需要通过 JavaScript 提交表单数据到另一个域名下的PHP接口(因为数据较大,需要HTTP POST方式提交),并获取PHP接口的返回值,在页面无刷新、无跳转的情况下,更新div标签内的内容。
浏览器出于安全考虑,是不允许JavaScript代码进行跨域操作。JavaScript 和 AJAX 跨域访问分为两大类,一是本域和子域的交互,二是本域和其他域的交互。
一、本域和子域的交互:www.zyan.cc 和 blog.zyan.cc
二、本域和其他域的交互:blog.zyan.cc 和 api.bz
本域和子域的交互,可以通过iframe设置两个域名document.domain = "zyan.cc",实现统一zyan.cc域下的跨域访问。
本域和其他域的交互,可以通过iframe、代理、JS创建动态脚本等几种方法来实现,这里有篇文章对几种方法作了简要的介绍。
iframe、JS创建动态脚本这两种方法,需要开发者能控制两个域,两端都要编写相应的代码,非常麻烦。在本域服务器上用PHP写个代理中转程序,让本域PHP程序去读取远程其他域的数据再返回给自己,是常用的方法。但是,在本域“前端是CDN或Squid缓存服务器,后端才是PHP应用程序服务器”的系统架构下,穿透CDN或Squid去访问不能被缓存的PHP代理中转程序,效率是很低的。
国外有人尝试用 Flash 做 JavaScript 和 AJAX 跨域访问中转,无疑是一个好方法。JavaScript 将数据提交给本域下的 Flash,通过 Flash 中转去访问其他域的接口,条件只需要其他域的根目录下有一个crossdomain.xml文件,文件中设置允许所有域名或允许本域访问即可。很多网站的API域名都提供了crossdomain.xml文件。
例如:
1、新浪博客的crossdomain.xml文件(http://blog.sina.com.cn/crossdomain.xml)设置了允许所有域名访问;
2、饭否API的crossdomain.xml文件(http://api.fanfou.com/crossdomain.xml)设置了允许所有域名访问;
3、校内网API的crossdomain.xml文件(http://api.xiaonei.com/crossdomain.xml)设置了允许所有域名访问;
4、优酷网的crossdomain.xml文件(http://www.youku.com/crossdomain.xml)设置了允许所有域名访问;
5、土豆网的crossdomain.xml文件(http://www.tudou.com/crossdomain.xml)设置了允许所有域名访问;
6、逍遥视频的crossdomain.xml文件(http://v.xoyo.com/crossdomain.xml)设置了只允许*.xoyo.com域名访问;
7、网易的crossdomain.xml文件(http://www.163.com/crossdomain.xml)设置了只允许tech.163.com、sports.163.com等几个域名访问。
本人在“Cross-domain AJAX using Flash”的基础上,增加了对表单进行智能处理的功能,封装了一个JavaScript包:AJAXCDR。通过 AJAXCDR,即可轻松地解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求,支持IE、Firefox、谷歌Chrome等多种浏览器。
AJAXCDR 拥有两个文件:ajaxcdr.js 和 ajaxcdr.swf,AJAXCDR 拥有一个 JavaScript 函数 AjaxCrossDomainRequest() 和一个全局变量 AjaxCrossDomainResponse。
一、AJAXCDR 下载:
我的技术文章与计算机作品汇总页[原创]
[ 2007-8-14 20:04 | by 张宴 ]
我的技术文章与计算机作品汇总页
张宴(本页网址:http://blog.zyan.cc/tech/)
文章推荐级别:最高 较高 普通
★ Apache、Nginx及其他Web服务器
● [文章] Nginx虚拟主机多server_name的顺序问题 [作者:张宴]
● [文章] Nginx+PHP+MySQL双机互备、全自动切换方案 [作者:张宴]
● [文章] Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化 [作者:张宴]
● [文章] 使用Nginx轻松实现开源负载均衡──9月20日在ChinaUnix技术沙龙上的演讲PPT [作者:张宴]
● [文章] Nginx 0.7.x + PHP 5.2.8(FastCGI)搭建胜过Apache十倍的Web服务器(第4版) [作者:张宴]
● [文章] 解决Nginx + PHP(FastCGI)遇到的502 Bad Gateway错误 [作者:张宴]
● [文章] 使用Nginx作为Web服务器的国内网站 [作者:张宴]
● [文章] Nginx 0.6.31 + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第3版) [作者:张宴]
● [文章] 为Apache编译添加mod_expires模块出错的解决笔记 [作者:张宴]
● [文章] 解决“HTTP/1.1 405 Method not allowed”问题,让静态文件响应POST请求 [作者:张宴]
● [文章] Nginx + PHP5(FastCGI)生产环境跑PHP动态程序可超过“700次请求/秒” [作者:张宴]
● [文章] 视频:Nginx versus Apache (两者的对比)
● [文章] Nginx 0.5.33 + PHP 5.2.5(FastCGI)搭建胜过Apache 10倍的Web服务器(第2版) [作者:张宴]
● [文章] Nginx 简单的负载均衡配置示例 [作者:张宴]
● [文章] Nginx 0.5.31 + PHP 5.2.4搭建可承受3万以上并发连接数,胜过Apache 10倍的Web服务器 [作者:张宴]
● [文章] 为Apache配置mod_deflat压缩输出 [作者:张宴]
● [文章] 修改Linux内核参数,减少TCP连接中的TIME-WAIT sockets [作者:张宴]
● [文章] 查看Apache并发请求数及其TCP连接状态 [作者:张宴]
● [文章] AutoAPM--Linux下自动编译Apache+PHP+MySQL脚本 [作者:张宴]
● [文章] Linux下Apache日志分析工具--AWStats安装使用 [作者:张宴]
★ PHP配置与优化
● [文章] 利用Xdebug分析PHP程序,找出性能瓶颈 [作者:张宴]
● [文章] 安装及配置eaccelerator-0.9.5加速PHP-5.2.1 [作者:张宴]
● [文章] Linux下为RPM方式安装的PHP添加GD库支持 [作者:张宴]
★ MySQL数据库
● [文章] 快捷启动、停止、重启、杀死指定端口MySQL进程的脚本 [作者:张宴]
● [文章] MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档 [作者:张宴]
● [文章] 使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能 [作者:张宴]
● [文章] MySQL数据库服务器在Flickr、Fotolog、Wkipedia、Facebook等国际知名网站中的使用数量 [作者:张宴]
● [文章] 命令行方式管理MySQL数据库实例 [作者:张宴]
● [文章] MySQL中将字符串aaa批量替换为bbb的SQL语句 [作者:张宴]
● [文章] phpMyAdmin之一:可管理多台远程MySQL服务器的phpMyAdmin 2.10.2 [作者:张宴]
● [文章] phpMyAdmin之二:修改phpMyAdmin使其能够管理多台远程MySQL服务器 [作者:张宴]
● [文章] MySQL数据库故障解决──修复损坏的表 [作者:张宴]
★ Squid、Varnish、Memcached及其他缓存服务器
● [文章] 百度、新浪、Mixi、Apache社区赞助的开源key-value分布式存储系统 [作者:张宴]
● [文章] Memcached的代理服务器软件:magent使用小记 [作者:张宴]
● [文章] 利用shell命令操作Memcached [作者:张宴]
● [文章] 利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统 [作者:张宴]
● [文章] MySQL Memcache_engine的安装与使用 [作者:张宴]
● [源码] dbcached──“分布式 key-value 数据库内存缓存系统” [作者:张宴]
● [文章] 减少Linux下Squid服务器的TIME_WAIT套接字数量 [作者:张宴]
● [文章] 使用Varnish代替Squid做网站缓存加速器的详细解决方案 [作者:张宴]
● [文章] 找到一款批量清除Squid缓存的小工具 [作者:张宴]
● [文章] 初步试用Squid的替代产品──Varnish Cache网站加速器 [作者:张宴]
● [书籍] Squid中文权威指南 (在线版) (PDF下载) [作者:彭勇华]
● [文章] 清除指定squid缓存文件的脚本 [作者:张宴]
★ 其他
● [文章] 我的开源PHP中文分词扩展:PHPCWS 1.0.0 [作者:张宴]
● [文章] 一款不错的Linux命令行下的FTP客户端软件 [作者:张宴]
● [文章] 亿级数据的高并发通用搜索引擎架构设计 [作者:张宴]
● [文章] Linux下简单限制网卡的带宽 [作者:张宴]
● [文章] 基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计 [作者:张宴]
● [文章] Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现 [作者:张宴]
● [文章] IE浏览器下同一网页多图片显示的瓶颈与优化 [作者:张宴]
● [文章] 又一个新浪UNIX开源软件项目──xbayDNS [项目团队:新浪研发中心──系统研发]
● [文章] 新浪发起的UNIX开源软件项目 [项目团队:新浪互动社区事业部──博客产品]
● [文章] YouTube 系统架构 [作者:Cuong Do & Kyle Cordes]
● [文章] 我所熟悉的网站负载均衡技术 [作者:张宴]
● [文章] Linux索引节点(inode)用满导致的一次故障 [作者:张宴]
● [文章] 一款不错的网站压力测试工具webbench [作者:张宴]
● [文章] IP别名+TCP转发+端口映射实现跨网络访问 [作者:张宴]
● [文章] Linux下快速搭建ntp时间同步服务器 [作者:张宴]
● [文章] Linux服务器监控系统 ServMon V1.1 [作者:张宴]
● [文章] Linux服务器监控系统 ServMon V1.0 [作者:张宴]
● [书籍] 针对服务器运行环境安装CentOS 4.X Linux [作者:张宴]
● [文章] 使用Linux的rsync命令实现:多服务器镜像同步 [作者:张宴]
● [文章] 用rsync实现网站镜像和备份
● [文章] Fedora Core 4.0 简体中文语言包的安装 [作者:张宴]
★ Linux命令与shell脚本
● [文章] PHPSH:Facebook开发的PHP Shell的安装与使用 [作者:张宴]
● [文章] PHP多进程并发控制的测试用例 [作者:张宴]
硬件设备
★ 负载均衡交换机
● [文章] 利用NetScaler和自行编写的健康检查脚本,完美解决多台MySQL Slave数据库的负载均衡 [作者:张宴]
● [文章] F5 BIG-IP负载均衡器配置实例与Web管理界面体验 [作者:张宴]
编程语言
★ PHP/JavaScript编程
● [文章] AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求 [作者:张宴]
● [文章] 支持MSNP15协议与离线消息的PHP MSN Class,可实现MSN机器人 [作者:张宴]
● [文章] 同一域名对应多个IP时,PHP获取远程网页内容的函数 [作者:张宴]
● [文章] 通过浏览器从SVN更新代码到Linux服务器的指定目录 [作者:张宴]
● [文章] 一个发送HTML邮件的PHP函数 [作者:张宴]
● [文章] 采用curl库在PHP程序之间传递数组 [作者:张宴]
● [文章] PHP截取中文字符串不出现?号的解决方法 [作者:张宴]
● [文章] PHP XML Library:一个不错的PHP XML操作类
● [文章] PHP中常用的字符串函数
● [文章] 钢笔手写体生成工具(PHP)V1.0 [作者:张宴]
● [文章] PHP实现http与https转化 [作者:张宴]
● [文章] 用GD库生成高质量的缩略图片
● [文章] 部分PHP问题总结
★ HTML/JS
● [文章] dp.SyntaxHighlighter介绍:在网页中加亮显示源代码的工具 [作者:张宴]
● [文章] IE浏览器flash控件的激活方式介绍 [作者:张宴]
● [文章] 防止电子邮件地址被搜索到的新方法 [作者:张宴]
● [文章] 网页制作:带有滚动条的表格 [作者:张宴]
Windows 2000/XP/2003/Vista
★ 软件分享
● [下载] PHPChina.com旗下的开源技术杂志《PHPer》第12期
● [网站] UnixSNS──Linux/Unix技术工程师社交网络
● [网站] 一个分类搜集了众多开源软件官方网址的站点
● [下载] 一款不错的开源密码管理软件──KeePass
● [下载] PHP编程的好工具:《PHP Designer 2007 专业版》
● [下载] 可以上传、下载文件的SSH客户端软件--SecureCRT绿色版
★ 其他
● [文章] 再谈Dr.COM宽带认证客户端共享上网破解V3.46(d13) [作者:张宴]
● [文章] 软件测试用例(Test Case)设计 [作者:Vince]
● [文章] IE7浏览器简体中文版的安装、设置和使用方法(并介绍了非正版Windows用户如何安装IE7) [作者:张宴]
● [文章] 如何寻找联想电脑驱动程序 [作者:张宴]
● [文章] Microsoft SQL Server数据库的备份与恢复 [作者:张宴]
● [文章] 解决IE浏览器打不开的办法 [作者:张宴]
个人计算机作品
★ 可下载或开放源代码的作品
● [软件] APMServ 拥有图形界面的快速搭建Apache、PHP、MySQL、ASP、Perl网站服务器平台的绿色软件
[作者:张宴]
● [软件] 《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件 [作者:张宴]
● [插件] MySQL中文全文索引插件 mysqlcft 1.0.0 [作者:张宴]
● [源码] dbcached──“分布式 key-value 数据库内存缓存系统” [作者:张宴]
● [源码] Linux服务器监控系统 ServMon V1.1 [作者:张宴]
● [源码] Linux服务器监控系统 ServMon V1.0 [作者:张宴]
● [书籍] 针对服务器运行环境安装CentOS 4.X Linux 图文幻灯电子书 [作者:张宴]
● [源码] 钢笔手写体生成工具(PHP)V1.0 [作者:张宴]
● 更多>>>
★ 只提供部分源代码和信息的作品
● [架构] 基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计 [作者:张宴]
● [作品] Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现 [作者:张宴]
● [架构] 以最少的Web服务器达到最大的性能──“互联星空播客” [作者:张宴]
● [演示] 大学期间开发的中南民族大学学生管理信息系统 [作者:张宴]
● [演示] 大学期间为北京博卡先锋软件开发有限公司定制开发的SAPM软件 [作者:张宴]
● [硬件] 自行打造的袖珍电脑主机 [作者:张宴]
● 更多>>>
本页内容将陆续增加修改。最后修改时间:2009年03月11日
dp.SyntaxHighlighter介绍:在网页中加亮显示源代码的工具[原创]
[ 2007-4-19 14:56 | by 张宴 ]
这两天发现一个老外用JavaScript编写的好东西:dp.SyntaxHighlighter。它可以在网页中对各种程序源代码语法进行加亮显示。支持当前流行的各种编程语言:C#、CSS、C++、Delphi、Java、JavaScript、PHP、Python、Ruby、SQL、Visual Basic、XML / HTML
下载地址:http://www.dreamprojections.com/syntaxhighlighter/
演示地址:http://www.dreamprojections.com/syntaxhighlighter/Tests/PHP.html
使用方法:
1、假设网页文件test.htm存放在一个目录,则将dp.SyntaxHighlighter解压缩到该目录下的子目录,假设为images
2、在网页的<head></head>之间插入以下代码:
下载地址:http://www.dreamprojections.com/syntaxhighlighter/
演示地址:http://www.dreamprojections.com/syntaxhighlighter/Tests/PHP.html
使用方法:
1、假设网页文件test.htm存放在一个目录,则将dp.SyntaxHighlighter解压缩到该目录下的子目录,假设为images
2、在网页的<head></head>之间插入以下代码: