2013-05-18 58 views
1

我有一個應用程序從本地主機的工作:使用龍捲風8888,這是頭心中已經設置:如何在nginx中允許標題「Accept-Ranges」?

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上的nginx服務器:80看起來是這樣的:

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後,其中有關運給了他的解決方案使得靜態的PDF服務器nginx的和龍捲風返回頭

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

我如何做到這一點?

回答

2

要使用GET方法獲取靜態文件,只需將Access-Control-Allow-Origin頭添加到nginx。我創建了以下內容來展示如何從跨源訪問靜態文件。

我創建了一個託管html文件的龍捲風服務器()。我試圖訪問使用JavaScript靜態文件nginx的託管

龍捲風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>