Was ist der Unterschied zwischen den beiden Schreibweisen?
Das "println" hängt nur ein Linefeed Steuerzeichen "\n" an den String dran.
Das ist zwar legal, um die Zeilen im HTTP-Header zu trennen und auch und die Zeilen in der HTTP-Message zu trennen, aber es ist gemäss HTTP-Standard nicht legal, um die Header-Response von Body der Message zu trennen.
Siehe HTTP-Normung beim W3C:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.htmlHeader und Body werden mit zweimal hintereinander CRLF ("\r\n") voneinander getrennt, wenn es HTTP-standardkonform sein soll.
Deine erste Version sendet das Steuerzeichen CR ("\r") aber überhaupt nicht, weil println das nicht als Zeilenende-Zeichen mitsendet.
Der wesentliche Unterschied auf den es ankommt ist das "\r\n\r\n" am Ende der Zeile:
> ... WWW-Authenticate: Basic realm=\"Test\"\r\n\r\n");
Das ist der standardkonforme Trenner zwischen HTTP-Header und HTTP-Message.