1

我有一个使用龙卷风从 localhost:8888 运行的应用程序,这是我设置的标题:

 def set_default_headers(self):
    self.add_header("Access-Control-Allow-Origin", "*")
    self.add_header("Access-Control-Expose-Headers","Accept-Ranges")
    self.add_header("Access-Control-Expose-Headers","Content-Encoding")
    self.add_header("Access-Control-Expose-Headers"," Content-Length")
    self.add_header("Access-Control-Expose-Headers","Content-Range")

localhot:8888 上的应用需要从 locahost:80 获取静态文件,localhost:80 上的 nginx 服务器如下所示:

server {
  listen 80;
  server_name localhost;
  root /var/www/statics;
  passenger_enabled on;
  passenger_use_global_queue on;
  add_header Access-Control-Allow-Origin *;
  add_header Access-Control-Allow-Origin [http://localhost:8888;]
  add_header Access-Control-Expose-Headers Accept-Ranges;
  add_header Access-Control-Expose-Headers Content-Encoding;
  add_header Access-Control-Expose-Headers Content-Length;
  add_header Access-Control-Expose-Headers Content-Range;
  add_header accept_ranges bytes;
  client_max_body_size 512M;
}

但浏览器中的错误是持久的:

Refused to get unsafe header "Accept-Ranges" 

在看到这个问题后,我尝试在上面添加所有这些标题, 其中相关操作给出了他的解决方案,使静态 pdf 服务器返回标题

Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length,

我如何在 nginx 和龙卷风中实现这一点?

4

1 回答 1

2

要使用 GET 方法获取静态文件,您只需将 Access-Control-Allow-Origin 标头添加到 nginx。我创建了以下内容来展示如何从跨源访问静态文件。

我创建了一个托管 html 文件的龙卷风服务器 ()。我正在尝试使用 nginx 托管的 javascript 访问静态文件

龙卷风服务器.py

import tornado.web
import tornado.ioloop


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('index.html')


if __name__ == '__main__':
    app = tornado.web.Application([
            (r'/', MainHandler)
        ])
    app.listen(12303)
    tornado.ioloop.IOLoop.instance().start()

索引.html

<!DOCTYPE html>
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
    </head>
    <body>
    <p> Hi </p>
    <button id="btn">click</button>
    <div id="content"></div>
    </body>
    <script>
        $(document).ready(function(){
            $('#btn').click(function(){
                $.get('http://localhost:12300/stacktest/abc.html', function(data){
                    $('#content').append(data);
                });
            });
        });        
    </script>
</htm>

nginx配置

server{
        listen          12300;
        server_name     localhost;

        location /stacktest {
            alias D:/stackof_test;
            index index.html;
            add_header Access-Control-Allow-Origin http://localhost:12303;            
        }
    }

请注意,我在 Windows 上,位置“D:/stackof_test”包含一个名为“abc.html”的文件,内容如下

<p>Got the file</p>
于 2013-06-17T08:13:50.587 回答