最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的HTTP協議問題

 更新時間:2022年12月28日 09:32:08   作者:king_weng  
這篇文章主要介紹了C++中的HTTP協議問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1、HTTP

Hyper Text Transfer Protocol(超文本傳輸協議)。

是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。

在Internet中所有的傳輸都是通過TCP/IP進行的。HTTP協議作為TCP/IP模型中應用層的協議也不例外。

HTTP協議通常承載于TCP協議之上,有時也承載于TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS。HTTP默認的端口號為80,HTTPS的端口號為443。

如下圖所示:

2、http請求-響應模型

HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。

HTTP協議永遠都是客戶端發(fā)起請求,服務器回送響應。這樣就限制了使用HTTP協議,無法實現在客戶端沒有發(fā)起請求的時候,服務器將消息推送給客戶端。

HTTP同時支持支持B/S及C/S模式。支持基本認證和安全認證。

3、主要特點

(1)簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶與服務器聯系的類型不同。由于HTTP協議簡單,使得HTTP服務器的程序規(guī)模小,因而通信速度很快。

(2)靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

(3)HTTP 0.9和1.0使用非持續(xù)連接:限制每次連接只處理一個請求,服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。HTTP 1.1使用持續(xù)連接:不必為每個web對象創(chuàng)建一個新的連接,一個連接可以傳送多個對象,采用這種方式可以節(jié)省傳輸時間。

(4)無狀態(tài):HTTP協議是無狀態(tài)協議。無狀態(tài)是指協議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

4、工作流程

HTTP完整流程包括四部分:

(1)客戶機與服務器建立連接。

(2)客戶機發(fā)送請求給服務器。

(3)服務器接收到客戶端的請求,給予相應的響應信息。

(4)客戶端收到請求并處理。

5、http請求的組成

http請求由三部分組成:請求行,首部,請求正文。

  • 請求報文格式為:請求行+首部+空行+實體組成
  • 響應報文格式為:狀態(tài)行+首部+空行+實體組成

(1)請求行:

以方法開頭,以空格分開,緊隨其后的是路徑和版本(包括http請求的種類,請求資源的路徑,協議的版本號)。

格式:

Method  Request-URL  HTTP-Version  CLRF

注:

  • Method:請求方法(get,post等)
  • Request-URL:統一的資源標識符
  • HTTP-Version:HTTP協議的版本
  • CRL:為回車和換行(回車和換行只能出現在結尾,不能再其他地方出現)。

請求方法:

  • GET請求服務器的文檔;POST向服務器發(fā)送信息;
  • PUT從服務器向客戶端發(fā)送文檔;DELETE為刪除web網頁;
  • TRACE為把到達的請求回送;HEAD為請求關于文檔的信息,但不是文檔本身; OPTIONS詢問關于可用的選項;

(2)請求首部

http的頭部信息,每一個用\r\n分割;

常用的首部有:

  • Connection:允許客戶端和服務器指定與請求/響應連接有關的選項(長連接,短連接等)
  • Data:提供日期和時間標志
  • MIME-Version:給出了發(fā)送端使用的MIME版本
  • Client-IP:描述客戶端機器的IP
  • From:提供了客戶端用戶的E-mail地址
  • Host:給出請求的主機名和端口號
  • Referer:提供了包含當前請求的URL的文檔的URL
  • cookie:向服務器傳送一個令牌

(3)請求正文

為發(fā)送給服務器的查詢信息(使用get時,body是空的,get只能讀取,而post可以寫入信息);

(4)響應報文也包括請求行,請求首部,空行,實體

請求行格式為:http版本+狀態(tài)碼+短語+\r\n  短語與狀態(tài)碼相對應

請求首部格式為:一系列首部名稱:值\r\n的組合

請求實體為:服務端真正返回的信息

狀態(tài)編碼為:

  • 100-199指定客戶端響應的一些動作,請求已被服務接收 200-299表示請求被接受,處理成功 
  • 300-399表示已經移動的文件,重定向,需進一步處理
  • 400-499指定客戶端的錯誤,有語法錯誤無法實現 500-599指定服務端的錯誤,服務器未能實現合法的請求

6、短連接和長連接

HTTP1.1之后使用了長連接,長連接使數據傳輸完成后繼續(xù)保持TCP連接不間斷,等待相同域名繼續(xù)使用這個通道進行數據傳輸。

HTTP1.0使用首部Connection:Keep-alive進行長連接的試驗,HTTP1.1之后使用Connection:Close來告訴服務端不使用長連接。但是使用了Connection:Keep-alive這個首部并不代表采用長連接。

  • 在短連接中:每一個請求/響應都需要建立一次TCP連接(三次握手),
  • 長連接模式下:判斷數據接收完成的方法有 --1--服務器關閉連接;--2--首部Content-Length判斷是否傳輸完畢,指定了實體正文的長度。

7、http中的操作

HTTP/1.1協議中共定義了八種方法(有時也叫“動作”)來表明Request-URI指定的資源的不同操作方式,最基本的有4種,分別是GET,POST,PUT,DELETE對應著對這個資源的查,改,增,刪4個操作。最常見的就是GET和POST了。GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息。具體方法:

(1)GET:向特定的資源發(fā)出請求

(2)POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。

(3)PUT:向指定資源位置上傳其最新內容。

(4)DELETE:請求服務器刪除Request-URI所標識的資源。

(5)HEAD:向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息。該方法常用于測試超鏈接的有效性,是否可以訪問,以及最近是否更新。

(6)TRACE:請求服務器會送收到的請求信息,主要用于測試或診斷。

(7)OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求

(8)CONNECT:HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。(即留為將來使用)

8、GET與POST的區(qū)別

(1)GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?postid=6810130&update=1 ;POST方法是把提交的數據放在HTTP包的Body中。

(2)GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制。

(3)GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。

(4)GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C++超詳細梳理IO流操作

    C++超詳細梳理IO流操作

    當程序與外界進行信息交換時,存在兩個對象,一個是程序中的對象,另一個是文件對象。流是信息流動的一種抽象,它負責在數據的生產者和數據的消費者之間建立聯系,并管理數據的流動
    2022-07-07
  • C++異常處理入門(try和catch)

    C++異常處理入門(try和catch)

    C++ 提供了異常機制,讓我們能夠捕獲運行時錯誤,本文就詳細的介紹了C++異常處理入門,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言小項目實戰(zhàn)之通訊錄功能

    C語言小項目實戰(zhàn)之通訊錄功能

    這篇文章主要介紹了如何設計和實現一個簡單的通訊錄管理系統,包括聯系人信息的存儲、增加、刪除、查找、修改和排序等功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-01-01
  • C++基類指針和派生類指針之間的轉換方法講解

    C++基類指針和派生類指針之間的轉換方法講解

    今天小編就為大家分享一篇關于C++基類指針和派生類指針之間的轉換方法講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 基于Matlab實現數字音頻分析處理系統

    基于Matlab實現數字音頻分析處理系統

    這篇文章主要為大家介紹了如何利用Matlab制作一個帶GUI的數字音頻分析與處理系統。文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2022-02-02
  • 詳解C語言初階之數組

    詳解C語言初階之數組

    這篇文章主要介紹了C語言中的數組基礎,介紹了其相關概念,具有一定參考價值。需要的朋友可以了解下,希望能夠給你帶來幫助
    2021-11-11
  • C++ 中的INT_MAX,INT_MIN數值大小操作

    C++ 中的INT_MAX,INT_MIN數值大小操作

    這篇文章主要介紹了C++ 中的INT_MAX,INT_MIN數值大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 用C語言實現猜數字游戲

    用C語言實現猜數字游戲

    這篇文章主要為大家詳細介紹了用C語言實現猜數字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 純c語言優(yōu)雅地實現矩陣運算庫的方法

    純c語言優(yōu)雅地實現矩陣運算庫的方法

    本文主要介紹了純c語言優(yōu)雅地實現矩陣運算庫,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言實現一個多線程委托模型的示例詳解

    C語言實現一個多線程委托模型的示例詳解

    這篇文章主要介紹了C語言實現一個多線程委托模型,這就是一個使用C語言實現多線程委托模型的例子,其中包含boss線程和worker線程,可以處理工作線程的異常情況,需要的朋友可以參考下
    2023-06-06

最新評論

丹凤县| 博野县| 高安市| 奉贤区| 句容市| 建平县| 宁城县| 宣城市| 开化县| 柳江县| 射阳县| 兰州市| 河南省| 永泰县| 张掖市| 沁阳市| 马公市| 札达县| 临邑县| 台湾省| 上蔡县| 历史| 吉木乃县| 金昌市| 涟水县| 威远县| 庆元县| 易门县| 呼玛县| 湘潭县| 工布江达县| 涟水县| 巴青县| 西乌珠穆沁旗| 渭南市| 张北县| 霞浦县| 中山市| 芷江| 莱州市| 卓尼县|