深入理解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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...