最近在做公司业务时,需要在线浏览pdf。在现代浏览器中, 均可直接浏览pdf文件,无兼容性问题。但公司的业务线需要支持到ie8。

经过自己的搜索调研, pdf.js比较适合。pdf.js兼容到ie9, 我和领导讨论后决定ie9及以上浏览器可在线预览, ie9以下直接下载, 不提供预览。

开始把pdf.js的demo搭好, 感觉很好用啊。因为我们的存储是在七牛云,动态存储域名与业务域名不一致,就会遭遇跨域问题。查看pdf.js的faq发现, pdf.js默认不支持跨域。

但官方给出了两个方案。

  1. 使用cors。
  2. 将业务服务器作为代理,可查看此issue

我个人想到的最简单的方案是我后端拿到pdf后, 存在本地服务器, 这样就不会有烦人的跨域问题了,之前也写过类似的代码, 但不是本文重点, 就不贴代码了。此方案有两个问题

  1. 增加后端压力
  2. 占用业务服务器存储

我想到的第二个方案, 存储服务器增加跨域的头Access-Control-Allow-Origin,允许业务服务器直接读取, 但在ie9上会出现安全提示, 好烦恼啊。

本文的重点来了,这里主要用到了nginx的proxy_pass, 主要用法可以查看官方文档proxy_pass, 最简单就是从一个服务器代理到另一个服务器。

location /name/ {
proxy_pass http://127.0.0.1/remote/;
}

而我的存储域名为动态的, 我先定义好我的url, 如/Index/viewer?file=http://hd4.xwg.cc/2017-04-10_1491805971_FlNoJrXvyicG7SRDg4Y6E3tA8-7G.pdf?bucket=qxt-2017,对应的存储域名由bucket来决定为qxt-2017.cdn.xwg.cc。下面是我的nginx配置

location ~ .*\.pdf
{
resolver 100.100.2.138;
proxy_pass http://$arg_bucket.cdn.xwg.cc;
}

我最开始并未加上resolver指令, nginx一直报错,而静态的存储域名没事, 查看官方文档可知

Parameter value can contain variables. In this case, if an address is specified as a domain name, the name is searched among the described server groups, and, if not found, is determined using a resolver.

好了, 跨域问题完美解决。

最新文章

  1. JavaScript进阶之路(一)初学者的开始
  2. Python学习实践------正向最大匹配中文分词
  3. TCP 状态详解 -转载
  4. 用UEFI安装ArchLinux 20140105
  5. 给groupBox添加滚动条
  6. debug与release
  7. Exit函数
  8. opencv写视频
  9. scala言语基础学习八
  10. poj2406 Power Strings(kmp失配函数)
  11. 关于tcc、tlink的编译链接机制的研究
  12. 文本阴影:text-shadow
  13. Excel01-不同的单元格输入同一数据
  14. [Android]BaseExpandableListAdapter实现可折叠列表
  15. PHP7.1 报错 Warning Illegal string offset
  16. SSH 之 Spring的源码(一)——Bean加载过程
  17. jquery 实现tab切换
  18. excel导出的时候从程序后台写到excel里的是文本,所以无法在excel中计算怎么办?
  19. Scapy:局域网MAC地址扫描脚本
  20. DevExpress01:Bar Manager,bar 、Toolbars

热门文章

  1. 迭代器 Iterator
  2. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
  3. 最短路径之Dijkstra算法和Floyd-Warshall算法
  4. (转)目前比较全的CSS重设(reset)方法总结
  5. Python学习记录----语法学习
  6. 构建 MariaDB Galera Cluster 分布式数据库集群(一)
  7. HDU1124 Factorial
  8. Redis数据类型之ZSet(五)
  9. 性能测试——jmeter环境搭建,录制脚本,jmeter参数化CSV
  10. Java中的24种设计模式与7大原则 (转)