41746


python3でCGIサーバーを試しているのですがエラーが出てしまいます。

CGIサーバーは下記で起動しています。

[code]

    python -m http.server --bind localhost --cgi 8000
    
[/code]

そして、以下のファイルをlocalhostから呼び出すと添付画像のような表示がなされます。  
11 とか 0 というどこにもないはずの数字が紛れ込んでいます。

[code]

    import sys,os
    import io
    
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
    
    print('Content-type: text/html; charset=UTF-8\r\n')
    print('Hello, World!')
    
[/code]

[![表示結果](https://i.stack.imgur.com/Biice.png)](https://i.stack.imgur.com/Biice.png)

更にプリント部分を以下の様にして実行したところ、表示が真っ白で何も表示されなくなりました。

[code]

    print("""<!doctype html>
    <html>
    <HEAD>
    <Content-Type:'text/html; charset=UTF-8'>
    </HEAD>
    <body>
    test
    test2
    </body>
    </html>""")
    
[/code]

そんなに複雑なものではないはずなのにうまく動かず、  
何がおかしいのか分からず困り果てています。

どうかよろしくお願いいたします。


CC BY-SA 3.0
2018-02-15T09:24:00.427
41734
2018-02-15T15:23:36.603
27385
question
python3
python3でCGIを動かしているのですが、ゴミ文字が入るエラーが出ます


> 添付画像のような表示がなされます。  
>  11 とか 0 というどこにもないはずの数字が紛れ込んでいます。

質問文に確認手段が記載されていないため当てずっぽうですが[`Transfer-Encoding:
chunked`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-
Encoding)になっているのではないでしょうか。この場合、リンク先Exampleに書かれているような結果になるため、`11`や`0`が観測されるのは正常な動作です。  
（改行が消えているのはHTMLとして解釈されているから？ なんにしても確認手段が不明なことにはよくわかりません。）

現行のHTTP/1.1では信頼性とコネクションの再利用のために`Content-Length`が不明なレスポンスでは`Transfer-Encoding:
chunked`を使用してレスポンスの終端を検出できるようになっています。

> 更にプリント部分を以下の様にして実行したところ、表示が真っ白で何も表示されなくなりました。

こちらはこちらで完全な手順が提示されていないため当てずっぽうですがHTTPヘッダーが出力されていないから受信側でコンテンツを検出できていないのではないでしょうか。


CC BY-SA 3.0
2018-02-15T11:10:34.297
41736
2018-02-15T11:10:34.297
4236
41734
answer


当て推量ですが、

[code]

    print('Content-type: text/html; charset=UTF-8\r\n')
    
[/code]

を

[code]

    print('Content-type: text/html; charset=UTF-8\r\n\r\n')
    
[/code]

に変更すると直ったりしませんでしょうか。レスポンスヘッダとレスポンスボディの間に空行が1つ必要です。


CC BY-SA 3.0
2018-02-15T15:23:36.603
41746
2018-02-15T15:23:36.603
3475
41734
answer