1. 程式人生 > >HTTP的GET和POST的區別

HTTP的GET和POST的區別

前言

前面的一張我們提到了http協議,介紹了URL,請求報文,響應報文,以及http的特點,相信大家現在對於http一定有所瞭解了,今天我們主要從http的兩種基本方法GET和POST來帶大家瞭解下

## HTTP-GET方法
要提到方法我們首先就需要回顧一下HTTP的報文格式。

<request line>
<headers>
<blank line>
[<request-body>]

我們都知道HTTP的方法位於http報文的請求行中的第一個欄位
例如:

eg:GET /form.html HTTP/1.1 (CRLF)

瀏覽器主要採用GET方法向伺服器獲取資源,例如上面的例子中,瀏覽器採用GET方法獲取伺服器中的根目錄下的/form.html資源。

GET方法有以下特點:
1.HTTP-GET使用url向http傳遞引數。
2.GET是從伺服器上獲取資料.
3.GET方式中,伺服器端用Request.QueryString來獲取所要查詢的值
4.由於HTTP-GET方式採用url進行傳參,而url的長度是有限的,GET方式提交的資料只能有1024個位元組。
5.採用GET方法訪問伺服器,引數會顯示在位址列上,任何人都可以看到,這樣很不安全。
6.如果GET資源請求的是文字,那麼保持原樣返回;如果是像CGI那樣的程式,則返回執行好的輸出結構。

下面我們可以通過一個栗子來了解一下:
(HTTP-GET.png)

當我們請求文字時,伺服器直接將文字內容傳遞回來。

下面這張圖片反映了GET方法的傳參方式,即通過url傳參。
這裡寫圖片描述

HTTP-POST方法

POST方法是用來向伺服器傳輸實體的。

相比於GER,POST方法具有下面的特點:
1.HTTP-POST的引數雖然也被url編碼,然而通過post傳遞的變數或者變數名不作為url的一部分傳送,而是放在http請求訊息的內部傳送。
2.POST方式在,伺服器用Request.Form獲取提交的資料。
3.POST方法提交的資料沒有大小的限制。
4.POST方法的引數不會顯示在位址列上,這樣會更安全些。

下面我們還是以剛才的伺服器來看看POST和GET的傳參方式有什麼不同:
(HTTP-POST.png)

HTTP報文的訊息體

訊息體是由:

域名: 域值

這三部分組成,其中,域名是大小寫無關的,域值前面可以新增任何數量的空格符。
這裡寫圖片描述

下面我們來說一下比較常見的訊息內容吧:
1.host: 指定了請求資源的internet主機和埠號。
2.Referer:表示允許客戶端指定請求url的資源地址。
3.User-Agent:這個訊息的內容包含發出請求的使用者資訊,例如瀏覽器的相關配置。
4.Cache-Control:表示指定請求和相應遵循的快取機制。