前言:
現(xiàn)在正在從事Android開發(fā),一直以來對(duì)網(wǎng)絡(luò)模塊的認(rèn)識(shí)都非常的模糊。
對(duì)于HTTP這方便的知識(shí)一竅不懂,有時(shí)候看別人整理的資料太多理論知識(shí)根本看不懂,于是整理了這篇文章方便自己回顧,也希望能幫助像我一樣不太懂后臺(tái)的人。
URI和URL
URI (Uniform Resource Identifiers) 統(tǒng)一資源標(biāo)示符
URL(Uniform Resource Locator) 統(tǒng)一資源定位符,是一種特殊類型的URI。
URI和URL一直都經(jīng)?;靵y,不過細(xì)看了URL是怎么組成的,就不怕混亂了。
URL一般由三部組成:
- 協(xié)議(或稱為服務(wù)方式)
- 存有該資源的主機(jī)IP地址(有時(shí)也包括端口號(hào))
- 主機(jī)資源的具體地址。如目錄和文件名等
于是我理解成是一個(gè)地址
Request和Response
Request請(qǐng)求:
由請(qǐng)求行、請(qǐng)求頭部、空行、請(qǐng)求數(shù)據(jù)四個(gè)部分組成
請(qǐng)求行:
GET /[要訪問的資源] HTTP/1.1
POST / HTTP/1.1
Response響應(yīng):
由狀態(tài)行、消息報(bào)頭、空行、響應(yīng)正文四個(gè)部分組成
狀態(tài)行:
HTTP/1.1 200 OK
HTTP狀態(tài)碼:
狀態(tài)碼由三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類型,共分為五類:
1xx:指示信息--表示請(qǐng)求已接收,繼續(xù)處理
2xx:成功--表示請(qǐng)求已被成功接收、理解、接受
3xx:重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤--請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
常見狀態(tài)碼:
200 OK //客戶端請(qǐng)求成功
400 Bad Request //客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器所理解
403 Forbidden //服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
404 Not Found //請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常
GET提交:
GET提交的數(shù)據(jù)會(huì)放在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連。
HTTP協(xié)議
原理:
HTTP 是基于TCP/IP協(xié)議的應(yīng)用層協(xié)議。
它不涉及數(shù)據(jù)包(packet)傳輸,主要規(guī)定了客戶端和服務(wù)器之間的通信格式,默認(rèn)使用80端口。
Content-Type:
HTTP允許傳輸任意類型的數(shù)據(jù)對(duì)象,傳輸?shù)念愋陀蒀ontent-Type標(biāo)記。
瀏覽器是依靠Content-Type來判斷響應(yīng)的內(nèi)容是網(wǎng)頁還是圖片,是視頻還是音樂。
常用的Content-Type屬性:
| 屬性 | 內(nèi)容 |
|---|---|
| text/html | .html 網(wǎng)頁 |
| image/jpeg | .jpeg和.jpg 圖片文件 |
| image/png | .png 圖片文件 |
| application/json | json語句(接口的時(shí)候經(jīng)常用) |
| application/octet-stream | .* (二進(jìn)制流,不知道文件類型) |
| application/x-www-form-urlencoded | Form數(shù)據(jù)被編碼為名稱/值對(duì) |
| multipart/form-data | Form數(shù)據(jù)被編碼為一條信息,頁面上的每個(gè)空間對(duì)應(yīng)消息中的一個(gè)部分。 |
application/x-www-form-urlencoded和multipart/form-data在Form中的用法:(大神總結(jié)的)
- form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認(rèn)為application/x-www-form-urlencoded。
- 當(dāng)action為get時(shí)候,瀏覽器用x-www-form-urlencoded的編碼方式把form數(shù)據(jù)轉(zhuǎn)換成一個(gè)字串(name1=value1&name2=value2...),然后把這個(gè)字串a(chǎn)ppend到url后面,用?分割,加載這個(gè)新的url。
- 當(dāng)action為post時(shí)候,瀏覽器把form數(shù)據(jù)封裝到http body中,然后發(fā)送到server。
- 如果沒有type=file的控件,用默認(rèn)的application/x-www-form-urlencoded就可以了。 但是如果有type=file的話,就要用到multipart/form-data了。
application/x-www-form-urlencoded的請(qǐng)求例子:
POST /app/user/login HTTP/1.1
Host: 10.240.131.7:8080
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 05234002-4223-66fb-34f8-9be70557a745
username=potato&password=112233
好好學(xué)習(xí),天天向上。<( ̄oo, ̄)/
