使用原始 Socket 發送 HTTP 請求獲取網頁源碼,代碼如下:
Socket s = new Socket("127.0.0.1", 8084);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
pw.println("GET / HTTTP/1.1");
pw.println("Host:PC2014040911DWA");
pw.println("Content-Type:text/html");
pw.println();
pw.flush();
// 讀取響應...
Tomcat 8084 端口正常運行,瀏覽器訪問無誤,但程序返回 HTTP 505 錯誤:

HTTP 505 表示「HTTP 版本不受支持」。仔細檢查請求行:
GET / HTTTP/1.1
發現拼寫錯誤:HTTTP 多了一個 T,導致服務器無法識別協議版本。此外,HTTP/1.1 要求必须包含 Host 頭,但格式應為 Host: hostname(冒號後有空格),且請求行結尾應為 HTTP/1.1 而非自定義字符串。
簡化請求至 HTTP/1.0 風格(不強制要求 Host 頭),或修正 HTTP/1.1 請求格式。經測試,移除版本號直接發送 GET / 即可成功:
Socket s = new Socket("127.0.0.1", 8080);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
pw.println("GET /");
pw.println("Host: PC2014040911DWA");
pw.println("Content-Type: text/html");
pw.println();
pw.flush();
// 讀取響應...
響應正常返回:


METHOD PATH HTTP/VERSION,版本號拼寫必須準確Host 頭,格式 Host: <hostname>\r\n 規範,PrintWriter 默認 \n 可能導致部分服務器解析異常,建議手動發送 \r\n