

Pythonのhttp.serverで下のようにサーバーを実装し、そのサーバーにブラウザからfetch
APIを使ってPOSTしようとしているのですがブラウザが`応答を待っています`という状態のままになってしまいます。  
なぜでしょうか?

ブラウザの開発ツールでネットワークの状況を見てみるとhtmlとjavascriptのファイルはGETできているようなのですがPOSTにとても時間がかかっているようです

python server.py:

[code]

    import http.server
    
    class MyHandler(http.server.BaseHTTPRequestHandler):
        protocol_version = "HTTP/1.1"
        def do_POST(self):
            # Now this method just print path and content-type.
            print("POSTED")
            content_type = self.headers["Content-Type"]
            print(content_type)
            print(self.path)
            if "multipart/form-data" in content_type:
                raw_data = self.rfile.read()
            self.send_response(200, self.responses[200][0])
            self.send_header("access-control-allow-origin", "*")
            self.end_headers()
            # WIP: do something...
    
        def do_GET(self):
            if self.path[0] == "/":
                self.path = self.path[1:]
            try:
                with open(self.path, "rb") as f:
                    file_data = f.read()
            except FileNotFoundError:
                self.send_response(404, self.responses[404][0])
                self.end_headers()
                return
            print(file_data)
            content_length = len(file_data)
            self.send_response(200, self.responses[200][0])
            self.send_header("content-length", content_length)
            self.end_headers()
            self.wfile.write(file_data)
    
        def parse_post():
            # WIP
            pass
    
    httpd = http.server.HTTPServer(("", 6788), MyHandler)
    print("Address:", "", "Port:", 6788)
    httpd.serve_forever()
    
[/code]

js code:

[code]

    let myheaders = new Headers();
    myheaders.append("content-type", "multipart/form-data");
    let formdata = new FormData();
    formdata.append("Hello", "World");
    fetch("http://localhost:6788/nk", {
        method: "POST",
        mode: "cors",
        body: formdata,
        header: myheaders
    }).then((response)=> response.text()).then((text) => console.log(text));
    
[/code]


CC BY-SA 3.0
2017-10-21T08:36:57.870
38929
2018-09-27T14:00:10.657
2017-10-23T15:00:18.613
5246
5246
question
javascript python python3
fetch apiを使って自作のWebサーバーにPOSTリクエストを送ると時間がかかる


`mode: "cors"` の場合、ブラウザー側は`CORS-preflight
request`を送信するため、サーバー側は`POST`、`GET`リクエストの他に`OPTIONS`リクエストを処理する必要があります。


CC BY-SA 3.0
2017-10-23T22:54:56.400
38985
2017-10-23T22:54:56.400
4236
38929
answer