日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络基础 2-1(应用层,HTTP三点注意,HTTP协议格式, 最简单的HTTP服务器)

發(fā)布時間:2023/11/30 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络基础 2-1(应用层,HTTP三点注意,HTTP协议格式, 最简单的HTTP服务器) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

應(yīng)用層

應(yīng)用層

負(fù)責(zé)應(yīng)用程序之間的數(shù)據(jù)溝通-----協(xié)議都是用戶自己定的

自定制協(xié)議:

結(jié)構(gòu)化數(shù)據(jù)傳輸

序列化:

將數(shù)據(jù)對象以指定的協(xié)議(數(shù)據(jù)格式)進行可用于持久化存儲或者數(shù)據(jù)傳輸時的數(shù)據(jù)組織
例如在分布式的系統(tǒng)中,需要把對象從網(wǎng)絡(luò)的一端傳輸?shù)搅硗庖欢?#xff1b;而網(wǎng)絡(luò)中數(shù)據(jù)是以二進制流的方式來傳遞的 ;此時對象的序列化就是完成把對象轉(zhuǎn)化成對應(yīng)二進制流的方式;反序列化則是把二進制流轉(zhuǎn)化為對象數(shù)據(jù)的方式。

反序列化:

將二進制數(shù)據(jù)串按照指定的協(xié)議進行解析獲取到各個數(shù)據(jù)對象

序列化的方式:
  • Json:JavaScript Object Notation, 是一種輕量級的數(shù)據(jù)交換格式,把對象的狀態(tài)序列化成為字符串 {屬性名:值}格式的字符串,移動端通訊常用數(shù)據(jù)格式。
  • protobuf是Google開發(fā)的開源項目。protobuf是一種串行化的數(shù)據(jù)結(jié)構(gòu)信息,類似xml。主要用于消息傳輸中消息格式規(guī)范,數(shù)據(jù)存儲。與xml相比,protobuf更小、更快、更簡單、更少歧義、方便生成消息存取類。
  • 知名協(xié)議

    HTTP-----超文本傳輸協(xié)議

    URL:統(tǒng)一資源定位符(網(wǎng)址)

    URL格式:

    協(xié)議名稱://用戶名:密碼@服務(wù)器地址:端口/資源路徑?查詢字符串#片段標(biāo)識符

    查詢字符串(用戶提交的數(shù)據(jù))中若包含特殊字符則需要進行URL編碼,因為在URL中特殊字符具有特殊含義。用戶提交的數(shù)據(jù)中若有特殊字符要避免這種二義性
    urlencode:將特殊字符每一個字節(jié)轉(zhuǎn)換成為16進制數(shù)字的字符串,并且在前邊加上%


    urldecode:%2 -('2'-'0')<<4+b-'0'

    HTTP協(xié)議

    HTTP三點注意事項

  • HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
  • HTTP是媒體獨立的:這意味著,只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過HTTP發(fā)送。客戶端以及服務(wù)器指定使用適合的MIME-type內(nèi)容類型。
  • HTTP是無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。
  • HTTP協(xié)議格式

    1.首行:

    以空格進行間隔,分了三個部分

    1-1請求首行:

  • 請求方法
  • URL
  • 協(xié)議版本
    請求方法
    HTTP1.0定義了三種請求方法:GET: 獲取資源,提交數(shù)據(jù)在URL中存放,沒有正,POST:傳輸實體主體,提交數(shù)據(jù)在正文中出現(xiàn),有正文,HEAD(獲得報文頭部,文件有多長)等其他方法。
    協(xié)議版本
    0.9/1.0/1.1/1.2-------各個版本之間的新特性
  • 1-2響應(yīng)首行
  • 協(xié)議版本
  • 響應(yīng)狀態(tài)碼
  • 狀態(tài)碼描述信息
    常見的狀態(tài)碼, 比如 200(OK), 404(Not Found), 403(Forbidden,認(rèn)證失敗), 302(Redirect, 重定向), 502(Bad Gateway,壞的網(wǎng)關(guān))


  • 2. 頭部

    都是一個個以冒號空格形式組成的鍵值對,這些鍵值對之間以\r\n進行間隔
    Conter-Length(標(biāo)志正文有多長,解決粘包問題)/Content-Type(正文類型)/Referer(跳轉(zhuǎn)位置)/Cookie/Set-Cookie/Location(重定向位置)/Transfer-Encoding(是否進行分塊傳輸)

    HTTP響應(yīng)頭消息


    3. 空行

    \r\n間隔頭部與正文

    4. 正文

    http協(xié)議是一個在傳輸層基于tcp協(xié)議實現(xiàn)的應(yīng)用層協(xié)議,在傳輸層默認(rèn)使用80端口,使用字符串明文傳輸

    HTTP 協(xié)議的 8 種請求類型介紹

    HTTP 協(xié)議中共定義了八種方法或者叫“動作”來表明對 Request-URI 指定的資源的不同操作方式,具體介紹如下:

  • OPTIONS:返回服務(wù)器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務(wù)器發(fā)送’*'的請求來測試服務(wù)器的功能性。
  • HEAD:向服務(wù)器索要與GET請求相一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以在不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。
  • GET:向特定的資源發(fā)出請求。
  • POST:向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的創(chuàng)建和/或已有資源的修改。
  • PUT:向指定資源位置上傳其最新內(nèi)容。
  • DELETE:請求服務(wù)器刪除 Request-URI 所標(biāo)識的資源。
  • TRACE:回顯服務(wù)器收到的請求,主要用于測試或診斷。
  • CONNECT:HTTP/1.1 協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
    雖然 HTTP 的請求方式有 8 種,但是我們在實際應(yīng)用中常用的也就是 get 和 post,其他請求方式也都可以通過這兩種方式間接的來實現(xiàn)。
  • 最簡單的HTTP服務(wù)器

    /* *實現(xiàn)最簡單的http服務(wù)器1.http實際是一個tcp服務(wù)器,不過應(yīng)用數(shù)據(jù)的處理是http協(xié)議格式2.處理數(shù)據(jù)的時候:1. 獲取http頭部(首行+頭部)2.獲取數(shù)據(jù)3.根據(jù)頭部中的請求處理數(shù)據(jù)3.接受到瀏覽器的請求之后,打印一下請求的數(shù)據(jù),并且響應(yīng)<html><body><h1>Hello World</h1></body></html>*/ #include<sstream> #include"tcpsocket.hpp" int main() {TcpSocket sock;CHECK_RET(sock.Socket());CHECK_RET(sock.Bind("0.0.0.0",2502));CHECK_RET(sock.Listen());while(1){TcpSocket clisock;std::string cliip;uint16_t cliport;bool ret =sock.Accept(clisock,cliip,cliport);if(ret == false){continue;}std::string buf;clisock.Recv(buf);std::cout<<"req:["<<buf<<"]\n";std::string body;body = "<html><body><h1>Hello World</h1></body></html>";//正文std::string first_line = "HTTP/1.1 200 OK \r\n";//頭部std::stringstream header;header << "Content-Length:" << body.size() << "\r\n";//正文長度header << "Content-Type:" << "text/html\r\n";//正文類型std::string blank ="\r\n";//空行clisock.Send(first_line);clisock.Send(header.str());clisock.Send(blank);clisock.Send(body);clisock.Send(body);clisock.Close();}return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的网络基础 2-1(应用层,HTTP三点注意,HTTP协议格式, 最简单的HTTP服务器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。