一、前言部分(概念)
-
URL(統一資源定位符 )的作用:使用 URL 可以確定一個資源所在的位置
-
HTTP(超文本傳輸協議)
-
基於
TCP/IP
的定義數據在萬維網中如何通信的協議 -
設計目的是保證客戶端與服務器之間的通信
-
-
在客戶端向服務器發起請求時,兩種最常用的 HTTP 方法是:GET 和 POST
-
在 html 頁面的 form 表單中,如果不指定 method 提交方式,默認是以 GET 方式提交
二、對比 GET 與 POST
二者最大的差異
請求參數所在的位置不同
-
GET 方式把參數包含在URL,即請求行中,參數會顯示在瀏覽器地址欄上
-
POST 方式的參數包含在請求體中
正是因為請求參數所在的位置不同,從而造成了:
-
GET 請求時 URL 長度受限(理論上get請求只能攜帶2k大小的數據)
-
POST 請求提交參數的相對安全
這里的相對安全只是單純地因為 post 請求參數包含在請求體中,不會顯示在地址欄上被看到
GET 與 POST 請求本質上並無區別
因為 GET 和 POST兩種請求方式都是基於 TCP 協議
差異的產生就如第一點所說,請求參數所在的位置不同。而瀏覽器和web服務器又限制了 URL 的長度,
為什么限制URL的長度?
服務器是因為處理長 URL 要消耗比較多的資源,為了性能和安全(防止惡意構
造長 URL 來攻擊)考慮,會給 URL 長度加限制。
深層了解:POST 請求產生兩個數據包?
GET 產生一個 TCP 數據包,POST 產生兩個 TCP 數據包
其實並不是所有瀏覽器都會在 POST 請求中發送兩次包,Firefox 就只發送一次
兩次發包並不是 POST 的必然性,只是因瀏覽器軟件而異
三、兩種請求方式如何靈活使用?
GET - 從指定的資源請求獲取數據。
POST - 向指定的資源提交要被處理的數據
當數據量較大的請求(提交表單、上傳文件)時,傳遞密碼及隱私內容時采用POST;
其余情況可用get。
使用 GET 請求如果需要傳遞參數,那么參數只能通過以下方式傳遞:
url?參數名=參數值&參數名=參數值
add.do?name=value&name=value
四、常見的狀態碼
在 HTTP 請求中,通過狀態碼可以清晰的看到請求的結果,如果請求出錯,可以通過狀態碼來鎖定問題所在
HTTP協議中提供了許多的狀態碼,列舉我們常見的:
200 OK 返回正常
302 Found 重定向,讓瀏覽器跳轉到其它地址
304 Not Modified 服務端資源無變化,可使用緩存資源
400 Bad Request 請求參數不合法
401 Unauthorized 請求需要用戶的身份認證
403 Forbidden 服務端禁止訪問該資源
404 Not Found 服務端未找到該資源
408 Request Time-out 服務器等待客戶端發送的請求時間過長,超時
415 Unsupported Media Type 服務器無法處理請求附帶的媒體格式
500 Internal Server Error 服務端異常
五、RESTful 風格補充
RESTful風格中,常用的方法有4種,分別是GET,POST,PUT,DELETE。URL 定位了這個資源,HTTP中的GET,POST,PUT,DELETE就是對應着對這個資源的查,増,改,刪4個操作。