#やっていること
pythonのhttp.serverでCGIを動かしてブラウザになにかを表示させる
その時にChromeとMicrosoftEdgeの両方でアクセスすると後にアクセスした方のブラウザで表示されない
また、その時にログもサーバーにはない
#最終目標
ChromeとMicrosoftEdgeの両方でアクセスした場合でも正常にページを表示させられる
おかしくなる操作
- サーバーを起動
- ブラウザでlocalhost:8000/cgi-bun/hello.pyにアクセス(chrome)
- ページが表示される
- 別のブラウザでlocalhost:8000/cgi-bun/hello.pyにアクセス(MicrosoftEdge)
- ページが表示されない
#コード・ディレクトリ構成
python
1# hello.py 2# 表示させるページ 3import sys 4from io import TextIOWrapper 5 6sys.stdout = TextIOWrapper(sys.stdout.buffer, encoding="utf-8") 7print("Content-Type: text/html;charset=UTF-8\n") 8print() 9 10print("<!DOCTYPE html>" 11 "<html lang=\"ja\">" 12 "<head>" 13 "<meta charset=\"UTF-8\">" 14 "<title>Hello</title>" 15 "</head>" 16 "<body>" 17 "haro-!" 18 "</body>" 19 "</html>") 20
/hello_web ├── cgi-bin └── hello.py
log
1serving at port 8000 2127.0.0.1 - - [18/Nov/2021 13:43:12] "GET /cgi-bin/hello.py HTTP/1.1" 200 - 3127.0.0.1 - - [18/Nov/2021 13:43:12] command: D:\program\hello_web\venv\Scripts\python.exe -u D:\program\hello_web\cgi-bin\hello.py "" 4127.0.0.1 - - [18/Nov/2021 13:43:12] CGI script exited OK
ChromeでアクセスしたログだけがあってEdgeでアクセスできていない...
補足
- リストChromeでアクセスした後にEdgeでURLをたたいても読み込みが続いてページの更新がされない状態になってしまうが、
読み込み中にChromeの方を再読み込みするとEdgeも表示される
- リスト読み込みが続いているときはサーバーのログに何もないことからそもそもローカルサーバーにアクセスできていない気がする
- アクセスする順番がChrome→Edgeの場合はEdgeはが、Edge→Chromeの場合はChromeが表示できなくなる
- 読み込みの途中で正常な方のブラウザで再読み込みすると以下のエラーがサーバーログに流れた後に両方のブラウザでページが表示される
log
1---------------------------------------- 2Exception happened during processing of request from ('127.0.0.1', 58386) 3Traceback (most recent call last): 4 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 316, in _handle_request_noblock 5 self.process_request(request, client_address) 6 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 347, in process_request 7 self.finish_request(request, client_address) 8 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 360, in finish_request 9 self.RequestHandlerClass(request, client_address, self) 10 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\http\server.py", line 647, in __init__ 11 super().__init__(*args, **kwargs) 12 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\socketserver.py", line 720, in __init__ 13 self.handle() 14 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\http\server.py", line 427, in handle 15 self.handle_one_request() 16 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\http\server.py", line 415, in handle_one_request 17 method() 18 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\http\server.py", line 651, in do_GET 19 f = self.send_head() 20 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\http\server.py", line 997, in send_head 21 return self.run_cgi() 22 File "C:\Users***\AppData\Local\Programs\Python\Python38\lib\http\server.py", line 1213, in run_cgi 23 if not self.rfile._sock.recv(1): 24ConnectionAbortedError: [WinError 10053] 確立された接続がホスト コンピューターのソウトウェアによって中止されました。 25----------------------------------------