HTTP協議規定,客戶端的編寫
HTTP協議是網絡應用層協議,建立在TCP/IP協議基礎上。
HTTP協議基於客戶/服務器模式,客戶端主動發出HTTP請求,服務器接收HTTP請求,返回HTTP響應結果。HTTP協議對HTTP請求,以及響應的格式作了明確的規定。
HTTP客戶程序和HTTP服務器分別由不同的軟件開發商提供,它們都可以用任意的編程語言編寫。用VC編寫的HTTP客戶程序能否與用java編寫的HTTP服務器順利通信呢?答案是肯定的。HTTP協議嚴格規定了HTTP請求和HTTP響應的數據格式,只要HTTP服務器與客戶程序都遵守HTTP協議。
-------
HTTP請求格式:
HTTP協議規定,HTTP請求由3部分,分別是
1、請求方式、URI、HTTP協議的版本
3、請求正文(Reuqest Content)
如:
POST/hello.htm HTTP/1.1
Accept:image/gif,image/jpeg,*/*
Referer:http://locallost/login.htm
Accept-Language:en,zh-cn;q=0.5
Content-Type:application/x-www-form-rulencoded
Accept-Encoding:gzip,deflate
User-Agent:Mozila/4.0(compatible;MSIE6.0;Windows NT 5.0)
Host:localhost
Content-Length:43
Cache-Control:no-cache
空行
username=weiqin&password=123&submit=submit
-----
1、請求方式、URI、HTTP協議的版本
POST /hello.html HTTP/1.1
HEAD:客戶程序和服務器之間交流一些顳部數據,服務器不會返回具體的文檔。當使用GET和POST方法時,服務器最後都將特定的文檔返回給客戶程序。
2、請求頭
請求頭包含許多有關客戶端環境和請求正文的有用信息。例如,請求頭可以聲明瀏覽器的類型、所用的語言、請求正文,以及請求正文的長度等。
3、請求正文
HTTP協議規定,請求頭和請求正文之間必須以空行分隔(z只有CRLF符號的行),
註:CRLF是指回車符和行結束符"\r\n"
/** * 使用Socket創建一個Htpp客戶端 * */ public class SimpleHttpClient { public void sendReuqest(){ Socket socket = null; try { //連接HTTP服務器 socket = new Socket("127.0.0.1", 8088); //拼接HTTP請求協議規格 StringBuffer sb = new StringBuffer( "GET"+"/index.jsp"+"HTTP/1.1\r\n"); sb.append("Host:127.0.0.1\r\n"); sb.append("Accept:*/*\r\n"); sb.append("Accept-Language:zh-cn\r\n"); sb.append("Accept-Encoding:gzip,deflate\r\n"); sb.append("User-Agent:Mozila/4.0(" + "compatible;MSIE 6.0;Windows NT 5.0)\r\n"); sb.append("Contenction:Keep-Alive\r\n\r\n"); //發送HTTP請求 OutputStream out = socket.getOutputStream(); out.write(sb.toString().getBytes()); socket.shutdownInput(); //接收HTTP響應結果 InputStream in = socket.getInputStream(); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); byte[] buff = new byte[1024]; int len =-1; while((len = in.read(buff)) != -1){ buffer.write(buff, 0, len); } System.out.println(new String(buffer.toByteArray())); } catch (Exception e) { // TODO: handle exception } } }
-------------
HTTP響應格式
與HTTP請求相似,HTTP響應也由3部分構成,分別是:
1、HTTP協議的版本、狀態代碼、描述
2、響應頭
3、響應正文
如:
HTTP/1.1 200 OK
Server:nio/1.1
Content-Type:text/html;charset=GBK
Content-length:102
<html>
<head>
<title>helloapp</title>
</head>
<body>
<h1>hello</h1>
</body>
</html>
------
1、HTTP協議的版本、狀態代碼、描述
狀態碼:是一個3位整數,以1/2/3/4或5開頭
1xx:信息提示,表示臨時響應。
2xx:響應成功,表名服務器成功地接收了客戶端請求
3xx:重定向
4xx:客戶端錯誤,
5xx:服務器錯誤
2、響應頭
響應頭也和請求頭一樣包含許多有用的信息。例如:服務器類型、正文類型、正文長度等:
Server:nio/1.1
Content-Type:text/html;charset=GBK
Content-length:102
3、響應正文:
常見的是HTML網頁
註:HTTP請求頭與請求正文之間必須用空行分隔,同樣,HTTP響應頭與響應正文之間也必須空行分隔。
HTTP協議規定,客戶端的編寫