2016-04-22 64 views
1

我有一个nginx服务器,我想建立一个服务,接收一个字符串并返回结果。我打算使用Python进行处理,并将CherryPy作为接口。我测试了CherryPy的一部分,并且知道它正确接收。当我尝试使用网页连接到CherryPy服务时,出现CORS错误。我怎样才能让他们沟通?CherryPy和CORS

这里的Python代码:

import cherrypy 
import random 
import urllib 

class DataView(object): 
    exposed = True 

    @cherrypy.tools.accept(media='application/json') 

    def GET(self): 
     rawData = cherrypy.request.body.read(int(cherrypy.request.headers['Content-Length'])) 
     b = json.loads(rawData) 
     return json.dumps({'x': 4, 'c': b}) 

    def CORS(): 
     cherrypy.response.headers["Access-Control-Allow-Origin"] = "*" 

if __name__ == '__main__': 
    conf = { 
     '/': { 
      'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 
      'tools.CORS.on': True, 
     } 
    } 
    cherrypy.tools.CORS = cherrypy.Tool('before_handler', CORS) 
    cherrypy.config.update({'server.socket_port': 3000}) 
    cherrypy.quickstart(DataView(), '', conf) 

这里是我的网页:

<html lang="en"> 
<head> 
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> 
    <link href="http://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel="stylesheet"> 
    <script type="text/javascript"> 

     $(document).on('click', "#submitButton", function(){ 
      $.ajax({ 

       type: 'GET', 

       url: 'http://localhost:3000', 

       contentType: 'text/plain', 

       xhrFields: { 
        // The 'xhrFields' property sets additional fields on the XMLHttpRequest. 
        // This can be used to set the 'withCredentials' property. 
        // Set the value to 'true' if you'd like to pass cookies to the server. 
        // If this is enabled, your server must respond with the header 
        // 'Access-Control-Allow-Credentials: true'. 
        withCredentials: false 
       }, 

       headers: { 
       }, 

       success: function() { 
        console.log("Success"); 
       }, 

       error: function() { 
        console.log("Fail"); 
       } 
      }); 
     }); 
</script> 

</head> 

<body> 

    <div id="header"> 
     <h2>PDE Grammar Engine</h2> 
     <form> 
      Input Sentence:<br> 
      <input type="text" name="query" id="query"><br> 

      <input type="submit" id="submitButton" value="Submit"> 

     </form> 
    </div> 
    </div id="results"> 
    </div> 
</body> 
</html> 
+0

你见过这个吗? http://enable-cors.org/server_nginx.html – bpursley

+0

是的,没有帮助。在这一点上,我无法确定问题来自哪里。我不知道这是我的服务器配置还是我的javascript。 – user1209675

回答

0

原来,这CherryPy的服务器实际上并没有听正确的地址。它允许来自本地主机的连接,但不允许外部连接。我不得不添加以下条目到cherrypy.config.update

cherrypy.config.update({'server.socket_host': '0.0.0.0', 
         'server.socket_port': 3000})