1. 程式人生 > >HTTP協議介紹(POST、GET、Content-Type)

HTTP協議介紹(POST、GET、Content-Type)

什麼是HTTP? 超文字傳輸協議(HyperText Transfer Protocol -- HTTP)是一個設計來使客戶端和伺服器順利進行通訊的協議。 HTTP/1.1 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。

GET 請求響應

GET請求會顯示請求指定的資源。一般來說GET方法應該只用於資料的讀取。
GET會方法請求指定的頁面資訊,並返回響應主體,GET被認為是不安全的方法,因為GET方法會被網路蜘蛛等任意的訪問。
使用GET方法時,查詢字串(鍵值對)被附加在URL地址後面一起傳送到伺服器:
/test/demoform.html?name1=value1&name2=value2
特點:
GET請求能夠被快取
GET請求會儲存在瀏覽器的瀏覽記錄中
以GET請求的URL能夠儲存為瀏覽器書籤
GET請求有長度限制
GET請求主要用以獲取資料

POST 傳送資料給伺服器處理

POST 傳送資料給伺服器處理,資料包含在HTTP資訊正文中
POST請求會向指定資源提交資料,請求伺服器進行處理,如:表單資料提交、檔案上傳等,請求資料會被包含在請求體中。
POST方法可能會建立新的資源或/和修改現有資源。
使用POST方法時,查詢字串在POST資訊中單獨存在,和HTTP請求一起傳送到伺服器:
POST /test/demoform.html HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
特點:
POST請求不能被快取下來
POST請求不會儲存在瀏覽器瀏覽記錄中
以POST請求的URL無法儲存為瀏覽器書籤
POST請求沒有長度限制

HEAD 與GET相同的響應,只要求響應表頭

HEAD 與GET相同的響應,只要求響應表頭
HEAD方法與GET方法一樣,都是向伺服器發出指定資源的請求。但是,伺服器在響應HEAD請求時不會回傳資源的內容部分,即:響應主體。
這樣,我們可以不傳輸全部內容的情況下,就可以獲取伺服器的響應頭資訊。HEAD方法常被用於客戶端檢視伺服器的效能。

PUT 上傳檔案。

PUT請求會身向指定資源位置上傳其最新內容,PUT方法是冪等的方法。通過該方法客戶端可以將指定資源的最新資料傳送給伺服器取代指定的資源的內容。

DELETE 刪除檔案

DELETE請求用於請求伺服器刪除所請求URI(統一資源識別符號,Uniform Resource Identifier)所標識的資源。
DELETE請求後指定資源會被刪除,DELETE方法也是冪等的。

CONNECT 將HTTP請求的連線轉換成透明的TCP/IP通道

CONNECT方法是HTTP/1.1協議預留的,能夠將連線改為管道方式的代理伺服器。通常用於SSL加密伺服器的連結與非加密的HTTP代理伺服器的通訊。

TRACE 追蹤收到的請求

TRACE請求伺服器回顯其收到的請求資訊,該方法主要用於HTTP請求的測試或診斷。

OPTIONS 返回伺服器所支援的HTTP請求的方法

OPTIONS請求與HEAD類似,一般也是用於客戶端檢視伺服器的效能。 
這個方法會請求伺服器返回該資源所支援的所有HTTP請求方法,該方法會用'*'來代替資源名稱,向伺服器傳送OPTIONS請求,可以測試伺服器功能是否正常。
JavaScript的XMLHttpRequest物件進行CORS跨域資源共享時,就是使用OPTIONS方法傳送嗅探請求,以判斷是否有對指定資源的訪問許可權。 

這裡還有一種架構風格:RESTful。REST(英文:Representational State Transfer,簡稱REST)描述了一個架構樣式的網路系統,比如 web 應用程式。 REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是 RESTful。

HTTP 協議是以 ASCII 碼傳輸,建立在 TCP/IP 協議之上的應用層規範。
規範把 HTTP 請求分為三個部分:狀態行、請求頭、訊息主體。類似於下面這樣:
<method> <request-URL> <version>
<headers>
<entity-body>
資料使用什麼編碼方式,開發者完全可以自己決定訊息主體的格式,只要最後傳送的 HTTP 請求滿足上面的格式就可以。
但是,資料傳送出去,還要服務端解析成功才有意義。
服務端通常是根據請求頭(headers)中的 Content-Type 欄位來獲知請求中的訊息主體是用何種方式編碼,再對主體進行解析。

Form中常見的enctype 屬性

application/x-www-form-urlencoded
瀏覽器的原生 <form> 表單,如果不設定 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交資料。
提交的資料按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼。

multipart/form-data
瀏覽器的原生 <form> 表單,需要設定 enctype 屬性,表單上傳檔案時,必須讓 <form> 表單的 enctyped 等於 multipart/form-data。

Ajax中常見的Content-Type

application/json
用來告訴服務端訊息主體是序列化後的 JSON 字串。
JSON.stringify(str);//將JSON物件轉化為JSON字元
JSON.parse(str); //由JSON字串轉換為JSON物件
JSON 物件 
var user = { "firstName":"Jason" , "lastName":"Hua" }
user.firstName //訪問資料
JSON 陣列 
var department = {
    "employees": [
        { "firstName":"Jason" , "lastName":"Hua" },
        { "firstName":"Jason" , "lastName":"Hua" }
        ],
    "department": "Dev"
}
department.employees[0].firstName //訪問資料

Http  Content-Type對照表:http://tool.oschina.net/commons