什么是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
