如何用Squid来实现Ajax跨域代理

简介:  什么是Ajax跨域代理?玩Ajax的应该知道我在说什么:) 简单说就是因为浏览器的安全限制,你不能直接获取你站点以外的xml文档。
 

什么是Ajax跨域代理?

玩Ajax的应该知道我在说什么:) 简单说就是因为浏览器的安全限制,你不能直接获取你站点以外的xml文档。

为什么用Squid来做?

你完全可以自己写一个代理小程序,比如用php,这方面的资料网上很多。
Squid是一个应用非常广泛、功能强大的代理服务器软件,用它自然是为了获得高效。

需要哪些软件?

Lighttpd(Apache)、Squid、squirm。 我这里以lighttpd为例,你完全可以用apache来代替。
这里介绍一下squirm,这是一款为squid量身定做的redirector程序,支持 正规表达式 ,至于什么是redirector下面的工作原理你会知道它的作用。
系统平台:理论上支持上述软件的应该都可以(比如选择常见的linux),我这里以freebsd为例。

工作原理

用Lighttpd(Apache)的proxy模块作前端代理,把特定url的请求发送到squid,比如把 /service/proxy/*/http://othersite.com/abc.xml 这样的请求发送给squid来处理。

squid通过squirm这个redirector对url进行修正(相当于url rewrite),通过squirm的配置文件我们可以把上述url地址重定向为 http://othersite.com/abc.xml ,这个过程对浏览器是透明的完全由squid完成。squid获取 http://othersite.com/abc.xml 后返回给浏览器,这样我们就实现了跨域,在Ajax应用中你如果要获取其他站点的内容就在url前加上 /service/proxy/*/ 即可。

关键配置

相关软件的基本配置网上很容易找到参考,我就不罗嗦了,下面给出关键的配置。

Lighttpd - lighttpd.conf,比如我们的squid将工作在6666端口,就作如下配置

        $HTTP["url"] =~ "^/service/proxy/" {
               proxy.server = (
                       "" => (
                               (
                               "host" => "127.0.0.1",
                               "port" => 6666
                               )
                       )
               )
       }

Squid - squid.conf

http_port 6666
redirect_program /usr/local/bin/squirm
redirect_children 5
redirect_rewrites_host_header on
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

squirm
- squirm.conf 主要指定redirector的匹配规则文件的位置

begin
network 0.0.0.0/0
log /var/squid/logs/squirm-private-match.log
abort-log /var/squid/logs/squirm-private-abort.log
pattern common.patterns all
end

- common.patterns 这里的匹配规则文件是 common.patterns

regex ^.*/service/proxy/\*/(.*)$        \1

...
ok,that's all.

目录
相关文章
|
8月前
|
JSON 前端开发 JavaScript
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(三)
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(三)
|
3月前
|
JSON 前端开发 安全
浏览器跨域限制:为什么浏览器不能跨域发送Ajax请求?
浏览器跨域限制:为什么浏览器不能跨域发送Ajax请求?
37 0
|
7月前
|
缓存 JSON 前端开发
Ajax:跨域与JSONP
Ajax:跨域与JSONP
41 1
|
8月前
|
缓存 JSON 前端开发
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(二)
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(二)
|
8月前
|
XML 数据采集 Web App开发
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(一)
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)
|
9月前
|
前端开发 API PHP
漏刻有时开放平台数据接口php允许ajax跨域的解决方案
漏刻有时开放平台数据接口php允许ajax跨域的解决方案
35 0
|
前端开发 JavaScript Java
spring boot jquery ajax ie8解决跨域
spring boot jquery ajax ie8解决跨域
137 0
|
前端开发
$.ajax()的实现方式
$.ajax()的实现方式
|
前端开发 JavaScript
【jquery ajax】实现文件上传提交
【jquery ajax】实现文件上传提交
231 0
【jquery ajax】实现文件上传提交
|
前端开发 JavaScript 安全
【Ajax进阶】跨域和JSONP的学习
跨域和JSONP的学习
146 0
【Ajax进阶】跨域和JSONP的学习