摘要:本文主要介紹HTTP的最基本的知識声滥,包括request請求呜叫、response響應、常見的響應狀態(tài)碼怠李、GET請求與POST請求的區(qū)別圾叼。
一、HTTP 請求
1. http請求操作/curl命令
-
curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"http://GET獲取操作
請求內容
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx
-
curl -X POST -s -v -H "Frank: xxx" -- "https://www.baidu.com"http://POST上傳操作
請求內容
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx
-
curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"http://POST上傳帶數據
請求內容
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
yyy: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
1234567890
注:第二部分中捺癞,至少需要有Host
夷蚊、Content-Length
、Content-Type
2. 綜上所得髓介,請求一共包含以下部分
1 動詞 路徑 協議/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上傳的數據-
其中需要注意的是:
- 請求最多包含四部分惕鼓,最少包含三部分,即第四部分數據可以為空唐础。
- 第三部分永遠都是一個回車箱歧,用來分隔第二矾飞、第四部分。
- 第一部分的動詞包括
GET
(獲妊叫稀)/POST
(上傳洒沦,新增)/PUT
(整體更新)/PATCH
(局部更新)/DELETE
(刪除)/HEAD
(獲取資源的元數據)/OPTIONS
(獲取信息,關于資源的哪些屬性是客戶端可以改變的)等价淌。 - 如果沒有寫路徑申眼,則默認為根目錄(即
/
) - 第二部分中的的 Content-Type 標注了第 4 部分的格式
- 第一部分的路徑,包含查詢參數蝉衣,但不包括錨點
3. 使用Chrome瀏覽器查看http請求
- 打開 控制臺中的Network面板
- 地址欄輸入網址
- 在 Network 點擊括尸,查看 request,點擊「view source」
- 如果有請求的第四部分买乃,那么在 FormData 或 Payload 里面可以看到
舉例說明(百度首頁請求):
百度首頁請求
二姻氨、HTTP 響應
1.http響應出現在請求結束后
如curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"http://GET獲取操作
獲得的響應代碼為:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:14:05 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<!DOCTYPE html>
<html lang="en">
………………以下為網頁html代碼,略…………
</html>
2. http響應包含以下部分
- 1 協議/版本號 狀態(tài)碼 狀態(tài)解釋
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下載的內容 -
其中需要注意的是
第 2 部分中的 Content-Type 標注了第 4 部分的格式
第 2 部分中的 Content-Type 遵循 MIME 規(guī)范
第一部分的狀態(tài)解釋沒什么用
3. 關于響應的狀態(tài)碼
1xx消息:代表請求已被接受剪验,需要繼續(xù)處理肴焊。這類響應是臨時響應,只包含狀態(tài)行和某些可選的響應頭信息功戚,并以空行結束娶眷。(不常用,大致知道即可)
-
2XX:表示成功
- 200 OK:請求已成功啸臀,請求所希望的響應頭或數據體將隨此響應返回届宠。
- 204 No Content:表示請求已成功處理,但是沒有內容返回乘粒,意思等同于請求執(zhí)行成功豌注,但是沒有數據,瀏覽器不用刷新頁面灯萍,也不用導向新的頁面轧铁。
- 206 Partial Content:服務器已經成功處理了部分GET請求。(客戶端進行了范圍請求) 響應報文中包含Content-Range指定范圍的實體內容旦棉。
-
3XX:重定向
- 301 Moved Permanently:表示訪問的資源被永久移除齿风,即請求的資源已經永久的搬到了其他位置 。
- 302 Found :表示所訪問的資源臨時被移除绑洛,以后還會回來救斑,即臨時重定向,表示請求的資源臨時搬到了其他位置 真屯。
- 303 See Other :表示請求資源存在另一個URI脸候,應使用GET定向獲取請求資源 。
- 304 Not Modified :表示資源未被修改,即客戶端仍然具有以前下載的副本纪他,不需要重新傳輸資源鄙煤。
- 307 Temporary Redirect:臨時重定向,和302有著相同含義 茶袒,盡管302標準禁止POST變?yōu)镚ET梯刚,但沒人聽他的 ,而307就會遵照標準薪寓,不會從POST變?yōu)镚ET
但處理響應行為亡资,各個瀏覽器可能不同。
-
4XX:客戶端錯誤
- 400 Bad Request:表示請求報文存在語法錯誤或參數錯誤向叉,服務器不理解 锥腻,服務器不應該重復提交這個請求 ,需要修改請求內容后再次發(fā)送母谎。
- 401 Unauthorized:表示發(fā)送的請求需要有HTTP認證信息或者是認證失敗了 瘦黑,返回401的響應必須包含一個適用于被請求資源的WWW-Authenticate首部以質詢用戶信息 ,瀏覽器初次接受401時奇唤,會彈出認證窗口幸斥。
- 403 Forbidden :表示對請求資源的訪問被服務器拒絕了 ,服務器可以對此作出解釋咬扇,也可以不解釋 甲葬,想說明的話可以在響應實體的主體部分描述原因 。比如說你可能沒有訪問權限懈贺。
- 404 Not Found:表示服務器找不到你請求的資源 经窖,但允許用戶的后續(xù)請求。
-
5XX:服務器錯誤
- 500 Internal Server Error:通用錯誤消息梭灿,服務器遇到了一個未曾預料的狀況画侣,導致了它無法完成對請求的處理。沒有給出具體錯誤信息堡妒。
- 502 Bad Gateway:作為網關或者代理工作的服務器嘗試執(zhí)行請求時棉钧,從上游服務器接收到無效的響應。
- 503 Service Unavailable:表示服務器超負載或正停機維護涕蚤,無法處理請求 ,如果服務器知道還需要多長時間的诵,就寫入Retry-After首部字段返回万栅。
4. 使用Chrome瀏覽器查看http響應
- 打開 Network
- 輸入網址
- 選中第一個響應
- 查看 Response Headers,點擊「view source」
- 你會看到響應的前兩部分
- 查看 Response 或者 Preview西疤,你會看到響應的第 4 部分
舉個例子:百度首頁響應代碼
百度首頁響應代碼
三烦粒、GET 和 POST 的區(qū)別是什么
這是一個很常見的面試題,我這里總結的答案是:
- 參數。GET 的參數放在 url 的查詢參數里扰她,POST 的參數(數據)放在請求消息體里兽掰。
-
安全。GET 沒有 POST 安全(當然實際上二者都沒有那么的安全)徒役。因為GET請求很容易偽造(比如
<a>
孽尽、<img>
、<link>
忧勿、<script>
杉女、<form>
標簽都可以發(fā)送GET請求)。 - 數據長度鸳吸。GET 的參數(url查詢參數)有長度限制熏挎,一般是 1024 個字符。POST 的參數(數據)沒有長度限制(話雖這么說晌砾,但實際POST還是有4~10Mb 的限制坎拐,但是相對于GET已經大多了)
- 包。GET 請求只需要發(fā)一個包养匈,POST 請求需要發(fā)兩個以上包(因為 POST 有消息體)(雖然GET 也可以用消息體但是不常用)
- 作用哼勇。GET 用來讀數據,POST 用來寫數據乖寒,POST 不冪等(冪等的意思就是不管發(fā)多少次請求猴蹂,結果都一樣。)