2

我们的 SVG 文件存在跨域问题,这些文件由 CDN(内容交付网络)提供服务,因此来自与我们的主要域(Python/Django 应用程序)不同的域名。我们想设置一个特殊的视图,可以作为这些 SVG 文件的服务器端代理,以掩盖域名并解决跨域问题。问题是如何对 SVG 或什至其他类型(.jpg、.js、.png、.mp4 等)等静态文件的 url 发出快速 http 请求,并以分块的流式 http 响应尽快为它们提供服务我们从请求流中接收块。

我们意识到在 Django 和 WSGI 之外这样做当然可能更快,也许扭曲的服务器会更好,所以最终我们正在寻找完成我们需要的最快/最好的 Python 方法。真正寻找推荐解决方案的示例代码。

非常感谢!

4

2 回答 2

2

您可以将 nginx 放在 Apache 前面,这将具有各种好处,例如更好的静态文件服务(IOW 让它处理静态文件而不是 Apache)以及将 Apache/mod_wsgi 与慢速客户端隔离。完成后,您可以让您的 Django 应用程序生成 X-Accel-Redirect 标头,nginx 将解释并发出新的子请求。该子请求的目标 URL 可以是 nginx 中的代理定义设置,用于从 CDN 获取文件并返回它们,就好像它们是对原始请求的响应一样。

于 2012-11-08T07:36:12.950 回答
1

所以我有几个可能的解决方案给你。第一个是 python,但这可能不是您的最佳选择。

1 ) Twisted在twisted.web.proxy. 在他们的网站上有一个非常简单(但有效)的例子

2) 根据应用程序(例如现代浏览器),在您的 CDN 配置中添加 CORS 响应标头可能对您有用。要检查,您的应用程序(浏览器?)是否尝试对 SVG 资源(带有“Origin:”http 标头)发出 GET 请求,但随后拒绝呈现它?

如果是这样,您可能会触发浏览器的同源要求。源可以通过返回Cross-Domain-Allow-Origin: *或类似的标头以及对带有Origin:标头的 HTTP 请求的响应来放宽此要求。

根据 CDN,我可能会澄清/提供示例元数据以启用跨域请求的 CORS 响应标头

3)你绝对需要使用python作为反向代理吗?apachenginx都有经过很好测试的模块,可以在不使用 Python 的情况下实现流式反向代理。尝试用 python 来做这件事可能很有趣和/或令人钦佩,但它不会像直接在 HTTP 服务器中那样扩展到几乎相同的性能水平

于 2012-11-08T07:28:21.500 回答