2017-05-01 8 views
0

私は単純なWebサーバーを構築するためにpython tornadoを使用しています。私は、単純な正規表現を使用して
竜巻:なぜhttp 500エラーが出るのですか?

import json 
import tornado.httpserver 
import tornado.ioloop 
import tornado.options 
import tornado.web 

from tornado.options import define, options 
define("port", default=80, help="run on the given port", type=int) 

class IndexHandler(tornado.web.RequestHandler): 
     def get(self, param): 
      print("\n\nthis is a get request from indexhandler:") 
      if param: 
       print("param is NOT null") 
       self.render(r"frontend/" + param) 
      else: 
       print("param is null") 
       self.render(r"frontend/index.html") 

if __name__ == "__main__": 
    tornado.options.parse_command_line() 
    app = tornado.web.Application(handlers=[(r"/(.*)", IndexHandler)]) 
    http_server = tornado.httpserver.HTTPServer(app) 
    http_server.listen(options.port) 
    tornado.ioloop.IOLoop.instance().start() 

すべてのフロントエンドコードのディレクトリ/フロントエンドであるような、/フロントエンドでのすべてのリソースへのアクセスをユーザーに許可する(*。):ここでは竜巻のコードがありますjsファイルとcssファイル。

[I 170501午後02時31分59秒ウェブ::2063] 200 GET /html/country.html私は私のウェブサイトを訪問しようとすると、

しかし、私は、サーバーでいくつかの304のエラーを取得します
[I 170501午前14時31分59秒ウェブ:2063] 304 GETの/css/bootstrap.min.css
[私は170501午前14時31分59秒ウェブ:2063] 304 GETの/css/reset.css
[I 170501 14:31:59ウェブ:2063] 304 GET /css/icon/iconfont.css
[I 170501 14:31:59 web:2063] 304 GET /css/country.css
[I 17 0501午前14時31分59秒ウェブ:2063] 304 GETの/css/common.css

UPDATE
私は別の問題があります。エラー500

言葉では、私はいくつかの304を持っていますそして、いくつかの500 500のすべてがこのようなものです:304は "変更なし" さ

[E 170501 22:53:19 web:1590] Uncaught exception GET /images/main-img1.jpg (X.X.X.X) 
    HTTPServerRequest(protocol='http', host='X.X.X.X', method='GET', uri='/images/main-img1.jpg', version='HTTP/1.1', remote_ip='X.X.X.X', headers={'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4', 'Accept': 'image/webp,image/*,*/*;q=0.8', 'Host': 'X.X.X.X', 'Referer': 'http://X.X.X.X/html/country.html', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}) 
    Traceback (most recent call last): 
     File "/usr/local/lib/python3.5/site-packages/tornado/web.py", line 1509, in _execute 
     result = method(*self.path_args, **self.path_kwargs) 
     File "tmp.py", line 20, in get 
     self.render("frontend/" + param) 
     File "/usr/local/lib/python3.5/site-packages/tornado/web.py", line 724, in render 
     html = self.render_string(template_name, **kwargs) 
     File "/usr/local/lib/python3.5/site-packages/tornado/web.py", line 862, in render_string 
     t = loader.load(template_name) 
     File "/usr/local/lib/python3.5/site-packages/tornado/template.py", line 427, in load 
     self.templates[name] = self._create_template(name) 
     File "/usr/local/lib/python3.5/site-packages/tornado/template.py", line 455, in _create_template 
     template = Template(f.read(), name=name, loader=self) 
     File "/usr/local/lib/python3.5/site-packages/tornado/template.py", line 304, in __init__ 
     reader = _TemplateReader(name, escape.native_str(template_string), 
     File "/usr/local/lib/python3.5/site-packages/tornado/escape.py", line 218, in to_unicode 
     return value.decode("utf-8") 
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte 
[E 170501 22:53:19 web:2063] 500 GET /images/main-img1.jpg (X.X.X.X) 2.07ms 

答えて

1

HTTP。それはエラーではなく、最適化です。 Tornado(ほとんどのWebサーバー同様)は、ブラウザに各静的ファイルの最終更新日とその内容のチェックサム(HTTP用語での "ETag")を通知します。ブラウザがファイルを再度要求すると、ブラウザはTornadoに最後に変更された日付とそれがブラウザのキャッシュに保存されているETagを通知します。トルネードはそれらを独自のものと比較し、変更されていなければブラウザに「304 Not Modified」と指示するだけです。したがって、ブラウザはキャッシュされたコピーを使用できることを認識し、元のファイルを再ダウンロードする必要はありません。

HTTP 500が実際の問題です。テンプレートファイルに、有効なUTF-8ではない文字があります。明らかに、最初の文字は、エラーメッセージの「位置0」に基づいて有効なUTF-8ではありません。

+0

これはエラーではない場合、なぜ私は予想されるページを取得できませんか?実際に私は2つの問題があります:1つは304で、もう1つは500です。私は私の質問を更新します。 – Yves

関連する問題