深入理解http協議請求報文內容格式詳解原理介紹說明

来源:http://www.cnblogs.com/GodX/archive/2016/03/18/5293329.html
-Advertisement-
Play Games

協議是指電腦通信網路中兩台電腦之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(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協議報文消息內容格式結構

    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類用法封裝詳解-模擬登錄


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 防火牆配置後執行service iptables save 出現"Failed to restart iptables.service: Unit iptables.service failed to load: No such file or directory."錯誤,在CentOS 7或RHE
  • 一、基本命令 1、立即關機並重啟動,執行如下命令: shutdown -r now 或者reboot 2、立即關機,執行如下命令: shutdown -h now 或者poweroff 3、等待2分鐘關機並重啟動,執行如下命令: shutdown -r 2 4、等待2分鐘關機,執行如下命令: shu
  • 因為總要切換ip,所以百度了一下腳本 如下http://jingyan.baidu.com/article/d2b1d1029d21b95c7e37d4fa.html 動態ip netsh interface ip set address name="本地連接" source=dhcpnetsh i
  • VS2005代碼編輯器的展開和摺疊代碼確實很方便和實用。以下是展開代碼和摺疊代碼所用到的快捷鍵,很常用: Ctrl + M + O: 摺疊所有方法 Ctrl + M + M: 摺疊或者展開當前方法 Ctrl + M + L: 展開所有方法 解決VS2010中工具箱的的不見的問題: 按快捷鍵Ctrl+
  • 先上代碼:
  • 1、MVC的前臺頁面編譯完之後,也會生成一個前臺頁面類。在前天頁面中加入這段代碼this.GetType().Assembly.GetLocation()得到當前類所在的程式集,可以查看其所在的程式,會發現,如果是若類型視圖其繼承的是WebViewPage<object>,而強類型則是機車WebVi
  • 對於一個企業級項目開發,模塊化是非常重要的。 預設Mvc框架的AreaRegistration對模塊化開發已經支持比較好了,還有必要擴展嗎?還能擴展嗎? 本文中的慄子是使用.net4.0、Mvc4.0及Unity2.0(企業庫4.0)的,提供完整源碼。 本分區擴展集成了IoC和分區DI(依賴註入)及
  • NuGet的入門實用教程
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...