我如何在nginx中允许标题“Accept-Ranges”?

时间:2013-05-18 17:27:11

标签: javascript nginx tornado

我有一个使用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上的app: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" 

我试图在看到之后添加上面的所有标题 issue有关的op给出了他的解决方案,使静态pdf服务器返回标题

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

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

1 个答案:

答案 0 :(得分:2)

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

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

tornado server.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()

的index.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>