1. 程式人生 > >GET請求和POST請求有什麼區別?GET請求的引數在URL的問號後面顯示,而POST引數不在URL上;POST可以比GET請求更大的資料…一般的回答都是這樣。 但是作為一個高階大氣上檔次的程式

GET請求和POST請求有什麼區別?GET請求的引數在URL的問號後面顯示,而POST引數不在URL上;POST可以比GET請求更大的資料…一般的回答都是這樣。 但是作為一個高階大氣上檔次的程式

GET請求和POST請求有什麼區別?GET請求的引數在URL的問號後面顯示,而POST引數不在URL上;POST可以比GET請求更大的資料…一般的回答都是這樣。

但是作為一個高階大氣上檔次的程式設計師,這樣回答就弱爆了。 為了搞清楚GET和POST的區別,下面寫了一個Java程式來接收HTTP請求。 HTTP是基於TCP協議的,所以可以使用Java最底層的Socket實現。下面的程式僅僅不到10行程式碼,捨去了異常處理、資源關閉的程式碼,所以它跟真正的HTTP伺服器的差距還略遙遠,這裡有點標題黨了。當然,不要在意這些細節。 [java]   複製程式碼
public static void
main(String[] args) throws IOException { // 伺服器監聽埠號8081 ServerSocket serverSocket = new ServerSocket(8081); // 等待接收請求,這是一個阻塞的方法,當請求到來的時候才會繼續向下執行 Socket socket = serverSocket.accept(); // 獲取請求內容 InputStream is = socket.getInputStream(); InputStreamReader reader
= new InputStreamReader(is); // 輸出請求內容 while (true) { System.out.print((char)reader.read()); } }
複製程式碼 HTTP伺服器寫好了,下面是客戶端。瀏覽器就是HTTP客戶端,不用自己去實現了,只需要寫HTML就行。 [html]  
<form method="get" action="http://localhost:8081">  
    name:<input type="text" name="name" /><
br> age:<input type="text" name="age" /><br> <input type="submit" /> </form>
GET請求: 設定form的method="get",啟動Java程式,用瀏覽器開啟HTML輸入。 提交後看Java程式輸出: 複製程式碼
GET /?name=XXG&age=23 HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
複製程式碼 POST請求: 設定form的method="post",啟動Java程式,用瀏覽器開啟HTML輸入提交。 Java程式輸出: 複製程式碼
POST / HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Content-Length: 15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
 
name=XXG&age=23
複製程式碼 兩個實驗可以看出,GET和POST引數所在請求資料中的位置不同,這才是GET和POST最基本的區別。 這裡科普一下HTTP協議,HTTP請求一般包含三個部分: Request-Line Header <空行> Message-Body[GET請求不包含Message-Body] 其中Request-Line,就是請求的第一行,例如上面兩個請求: GET /?name=XXG&age=23 HTTP/1.1 POST / HTTP/1.1 它由三部分組成,請求Method(GET/POST/其他)、Request-URI、HTTP-Version,三個部分中間空格隔開。 Header就是傳說中的請求頭,鍵值對的形式,每一條佔一行。使用不同瀏覽器這部分的內容也不同。 Message-Body是請求主體,POST請求引數就在這一部分,它與Header之間必須要用空行隔開,這樣伺服器才能分清楚Header和Body。Message-Body的長度就是Header中的Content-Length。一般GET請求中是沒有這一部分的。 上面POST請求中的引數就是Message-Body: name=XXG&age=23 所以,如果再有人問GET請求和POST請求的區別,可以回答:

GET請求的引數在URL中,在請求的第一行Request-Line中,而POST請求的引數在請求主體Message-Body中。

轉載至:http://www.cnblogs.com/549294286/p/4665842.html