2012-04-13 1 views
3

私は、FirefoxとChromeの両方が、それがうまく理解し、HTMLコンテンツを表示するように見える特にHTTPレスポンスを理解するには、ブラウザ、Safari、Operaには何が必要ですか?しかし、SafariとOperaはちょうど私に平文ですべてのものを表示 -

HTTP/1.0 200 OK\r\n\r\n 
<!DOCTYPE html>... 

のHTTPレスポンスを持っています。 「Content-Type」フィールドを追加すると、すべてのブラウザのすべてが上書きされます。

キャッチは何ですか?私はソケットを作成

、その後、すべての関連:何が起こるか私が問題に関連していない任意のプログラミングロジックがたくさんあるので、しかし、完全なコードを投稿するつもりはない

は、このようなものですソケット操作が発生します。これはすべて魔法のように動作し、すべての処理後に私は( 'ここに応答する')何らかの理由でFirefoxとChromeにしか表示されません。

は、応答文字列は次のようになります。しかし

''' 
HTTP/1.1 200 OK\r\n 
<!DOCTYPE html> 
... 
''' 

http://cl.ly/0y0U1s0G3X2v1C11282S

+0

「Content-Type」の追加方法を正確に表示できますか? –

+0

文字列 '\ r \ n 'を送信しているのか、キャリッジリターン(バイト値13)と改行(バイト値10)を送信していますか? –

+0

上記の内容は、socket.send()を使用して送信しているものです。そうはい\ r \ n。 @gnibbler "Content-Type:text/html" – antonpug

答えて

5

はあなたが好きリテラル文字列を送信していると述べている:

''' 
HTTP/1.1 200 OK\r\n 
<!DOCTYPE html> 
... 
... 
</html> 
''' 

これは私が見ていますものですPythonは、三重引用符で囲まれた文字列内の改行に対応する単一の文字を\nに追加するだけです。だから、あなたが見ることができるように

HTTP/1.1 200 OK\r\n\n<!DOCTYPE html>... 

いる最後まで送信されたバイトは、行方不明\rがあります。 、あなたはContent-typeヘッダを追加することもできます上記で

sock.send("HTTP/1.1 200 OK\r\n\r\n") 

:私はあなたが以下のようなコードを使用することをお勧めヘッダを送信した後、次に

sock.send("HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n") 

を、文書ペイロードを送信します。

sock.send(''' 
<!DOCTYPE html> 
... 
''') 

これは、プロトコルレベルのヘッダーとデータペイロードを分離し、コードをわかりやすくします。また、ヘッダーには\r\nを入手する方が簡単です。なぜなら、それは重要なところですからです。

+0

ありがとう!私は三重引用符がそれをしていたことに気付かなかった!私はPythonの初心者です。 – antonpug

関連する問題