8536


python3でhttp.server.BaseHTTPRequestHandlerを継承してWebサーバのクラスを作っているのですが、下記のように、do_POSTでデータを受け取り、処理した後、303でリダイレクトさせたいのですがブラウザの画面が変わりません。なぜなのでしょうか?

[code]

    
    class handler(http.server.BaseHTTPRequestHandler):
        def do_POST(self):
            # データの処理 ...
            self.send_response(303, self.responses[303][0])
            self.send_header("Location", "/")
            self.send_header("Content-Length", len(data))
            self.send_header("Content-Type", mimetypes.guess_type("views/list_view.html", False)[0])
            self.send_header("Access-Control-Allow-Origin", "*")
            self.send_header("Server", self.server_version)
            self.end_headers()
    
    
    
[/code]


CC BY-SA 3.0
2015-03-28T12:49:14.477
8510
2015-03-29T14:11:37.320
2015-03-29T06:23:35.320
5246
5246
question
python
PythonのWebサーバでのリダイレクトができない


Python-3.4.1とFirefox-36.0.4で、以下のコードで期待する動作を得られました。

[code]

    import http.server
    
    class handler(http.server.BaseHTTPRequestHandler):
    
        def do_GET(self):
            self.send_response(200)
            self.send_header("Content-Type", 'text/html')
            self.end_headers()
            self.wfile.write(b'<html><body>hello!<form method="POST"><input type="submit"></form></body></html>')
    
        def do_POST(self):
            self.send_response(303, self.responses[303][0])
            self.send_header("Location", "/")
            self.end_headers()
    
    
    def run(server_class=http.server.HTTPServer, handler_class=handler):
        server_address = ('', 8000)
        httpd = server_class(server_address, handler_class)
        httpd.serve_forever()
    
    
    if __name__ == '__main__':
        run()
    
[/code]

ブラウザのデバッガ等でサーバーからの通信を見てみると原因が分かるのではないかと思います。


CC BY-SA 3.0
2015-03-29T14:11:37.320
8536
2015-03-29T14:11:37.320
806
8510
answer