協議是指電腦通信網路中兩台電腦之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,也就是說一個客戶端和伺服器端請求和應答的標準(基於TCP/IP)。http協議是無狀態的! 目前我們使用的HTTP/1.1版本。 當在瀏覽器地址欄輸入一個url網址(或者IP地址)訪問
原文地址:http://www.tianyouduo.com/Article/Detail/6
一、http協議是什麼
協議是指電腦通信網路中兩台電腦之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,也就是說一個客戶端和伺服器端請求和應答的標準(基於TCP/IP)。http協議是無狀態的!
目前我們使用的HTTP/1.1版本。
二、http協議請求響應運行流程圖原理
當在瀏覽器地址欄輸入一個url網址(或者IP地址)訪問網頁,瀏覽器(Client)會向伺服器(Server)發送一個請求(Request)(請求報文遵守http協議標準),伺服器接收到請求按照http協議標準解析請求報文,並做出應答(Response)(響應報文遵守http協議標準),瀏覽器接收到響應解析內容呈現頁面並繼續發送請求(如遇到js,css,img等引用資源)。
整個過程如下圖所示:
有時,我們所發起的請求有可能經過代理伺服器,代理伺服器轉發到目標伺服器,目標伺服器響應到代理伺服器,代理伺服器再將響應內容返回到客戶端,此時代理伺服器充當一個信息中轉站的角色。
三、http協議報文消息內容格式結構
http報文分3部分:請求行/響應行(line)、請求頭/響應頭(header)、請求體/響應體(body----如果method為get請求體非必須),如下圖所示:
post報文:
<!--請求行-->
POST /AdminCategory/Update HTTP/1.1
<!--請求頭-->
Host: tianyouduo.com
Connection: keep-alive
Content-Length: 107
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://tianyouduo.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://tianyouduo.com/AdminCategory/Modify
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: ASP.NET_SessionId=j3i3cec4ezl1k33zw44ueibn
<!--請求體-->
title=%E5%88%86%E7%B1%BB%E6%A0%87%E9%A2%98&description=%E5%88%86%E7%B1%BB%E6%8F%8F%E8%BF%B0
&sequence=5&id=0
get報文:
GET /AdminCategory/List?pageNow=5&pageSize=20 HTTP/1.1
<!--請求頭-->
Host: tianyouduo.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/45.0.2454.101 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: ASP.NET_SessionId=j3i3cec4ezl1k33zw44ueibn
響應報文:
HTTP/1.1 200 OK
<!--響應頭-->
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 16 Mar 2016 02:57:51 GMT
Content-Length: 1932
<!--響應體-->
……
報文內容中每一行結尾包含一個“\r\n”換行符,header和body之間包含兩個“\r\n”換行符。
1、請求行(request line)格式:method /path-to-resource http/version-number
method表示請求方法,如“get"、“post"、“put"、“delete"、“options"等;path-to-resource表示資源的路徑,可能帶有url參數;version-number表示http版本號,目前使用的是1.1版本。
2、響應行/狀態行(response line)格式:http/version-number StatusCode Message
常見狀態碼(Status Code):狀態碼大全
-
200 OK:請求的資源已成功返回
-
302 Move temporarily:重定向
-
403 Forbidden:資源禁止訪問
-
404 Not Found:請求資源未找到
-
500 Internal Server Error:內部伺服器錯誤
-
……
3、常見報文頭(header)
-
Accept:聲明瀏覽器支持的響應內容類型,如:text/html,application/json等,*/*代表支持任何類型
-
Accept-Encoding:聲明瀏覽器支持的響應內容編碼類型,如:gzip, compress
-
Accept-Language:聲明瀏覽器支持的語言類型,如:zh-CN,根據此參數可以判斷當前瀏覽器訪問所在地方區域,以此來跳轉到對應地方區域web程式頁面
-
Host:請求資源的功能變數名稱或者IP:PORT(例:127.0.0.1:3000)
-
User-Agent:瀏覽器(客戶端)的標識,根據此參數可判斷當前瀏覽器的類型(如chrome,ie,firefox等),甚至可以以此來判斷是移動端訪問還是pc端訪問,並跳轉到相應頁面
-
Referer:指示訪問來源地址,根據此參數可實現防盜鏈
-
Cookie:header中最重要的部分,由於http是無狀態訪問連接的,對於任何一次訪問,服務端是無法識別客戶端的身份,因而引入cookie機制,通過客戶端每次訪問攜帶cookie參數來驗證身份
-
Content-Length:body數據內容的長度,通常用於post方式請求或響應
-
Connection:可選值keep-alive,close。目前http/1.1版本中支持客戶端和服務端長連接,Connection值設置為keep-alive可重用tcp連接,減少資源消耗,當然keep-alive也僅是保持一段有效時間內的,這個時間可在伺服器軟體(如:iis,tomact)上設置
-
header支持自定義參數,我們可在請求或者響應添加需要的頭部參數,例:Custome-Header:Custom-Value
四、Post方式和Get方式區別
Get方式的參數傳遞以queryString形式附加在url地址後面(?pageNow=5&pageSize=20),參數值大小限製為255個字元長度,由於Get提交數據時參數出現在url地址後面,容易讓惡意人員利用,安全性低。
Post方式的參數傳遞是放在請求體(body)中,參數值無大小限制,可加密,安全性高。
請求方式 | 參數位置 | 參數長度限制 | 安全性 | 應用場景 |
Get | url地址後,以?分割 | 255 | 低 | 查詢數據 |
Post | 請求體(body)中 | 無限制 | 高 | 創建/更新數據 |
上一篇: .Net(C#)版微信公眾號開發視頻教程之xml格式消息內容字元串序列化和反序列化-XElement
下一篇: asp.net(c#)模擬post和get方式Http請求之HttWebRequest類用法封裝詳解-模擬登錄