Django/Python将URL中的文件作为http代理快速流提供

2024-03-29 13:41:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

非常感谢!在


Tags: 文件djangosvg网络视图应用程序http代理
2条回答

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

所以我有几个可能的解决办法。第一种是python,但这可能不是您的最佳选择。在

{1}扭曲的船。有一个非常简单(但很有效)的例子on their site

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

如果是这样的话,您可能会绊倒浏览器的同源需求。源代码可以通过返回Cross-Domain-Allow-Origin: *或类似的头,以及对带有Origin:报头的HTTP请求的响应来放宽这一要求。在

根据CDN,我可以澄清/提供示例元数据,以便为跨源请求启用CORS响应头

3)您是否绝对需要使用python作为反向代理?apache和{a4}都有非常好的测试模块,可以在不使用Python的情况下实现流式反向代理。尝试使用python来实现这一点可能很有趣和/或令人钦佩,但它的性能水平远不如直接在HTTP服务器中实现的那样好

相关问题 更多 >