網路基礎 應用層HTTP協議

2021-10-04 06:37:44 字數 3801 閱讀 8649

目錄

應用層(tcp/ip協議中的應用層/http協議)

http協議

url -- 統一資源定位符

urlencode / urldecode

http協議格式

概述 http 請求訊息request / 響應訊息response 首行

請求(request)首行

響應(response)首行

頭部 正文 

實現乙個簡單的http伺服器

應用層 :程式設計師自己編寫程式, 應用程式之間如何進行資料溝通(資料傳送的格式, 以及接收到資料之後如何解析)的約定, 也稱之為應用層協議.  它由程式設計師自己制定,  程式設計師可以自定義協議, 稱為私有協議, 也可以選擇一些現成的非常好用的知名協議.

序列化 :將資料物件按照指定的協議, 即按約定的格式持久化儲存或格式化資料傳輸

反序列化 :持久化儲存的資料或網路資料傳輸的資料按照指定協議解析出資料物件化得過程

來看個私有協議的例子

網路計算器的例子 :客戶端將要計算的兩個數字以及運算子傳送給服務端, 有服務端進行計算, 最終返回結果.

方案一 :

這種方式相對來說是非常麻煩的, 因為將一串字元解析成我們想要的結果並不是那麼的簡潔, 所以我們來看下面的結構化傳輸

方案二 :

核心**

#定義格式化資料

typedef structdata;

#服務端

data buf;

recv(ser_fd, &buf, sizeof(buf), 0);

if(buf.c == '+')

class tcpsocket

bool socket();

int getfd();

bool bind(const string& ip, const uint16_t port) const;

bool listen(int backlog = backlog) const;

bool connect(const string ip, const uint16_t port) const;

bool accept(tcpsocket* sock, string* ip = nullptr, uint16_t* port = nullptr) const;

bool recv(string* buf) const;

bool send(const string& data) const;

bool close() const;

};bool tcpsocket::socket()

return true;

}int tcpsocket::getfd()

void tcpsocket::addr(struct sockaddr_in* addr, const string& ip, const uint16_t port) const

bool tcpsocket::bind(const string& ip, const uint16_t port) const

return true;

}bool tcpsocket::listen(int backlog) const

return true;

}bool tcpsocket::connect(const string ip, const uint16_t port) const

return true;

}bool tcpsocket::accept(tcpsocket* sock, string* ip, uint16_t* port) const

sock->m_sockfd = newsockfd;

char str[inet_addrstrlen];//ipv6用inet6_addrstrlen

while(1)//服務端並不會因為一次失敗而退出, 而是繼續獲取下乙個連線

printf("new connection[ip: %s][port: %d]\n", ip.c_str(), port);

pthread_t tid;

if(pthread_create(&tid, null, thr_start, (void*)newsock))

}return 0;

}

瀏覽器要想能訪問我們虛擬機器中的伺服器程式, 就需要關閉linux防火牆, 命令如下 : 

sudo systemctl stop firewalld

sudo systemctl disable firewalld

還需要將虛擬機器的網路設定為橋接模式, 在區域網下其他的主機也能訪問到 .

電腦瀏覽器 :

手機瀏覽器 :

可以看到, 作業系統 是android 9, 手機型號是 honor hlk-al00, 瀏覽器是uc. 感情啥都給我傳過去了.....

網路基礎 應用層(HTTP協議)

我們寫的解決我們實際問題的網路程式都是在應用層。今天我們詳細來了解一下應用層的http協議。協議就是一種約定,socket apide 介面,在讀寫資料時,都是按字串的方式來傳送接收的。如果我們要傳輸一些結構化的資料怎麼辦呢?我們可以約定 定義乙個結構體來標識我們需要互動的資訊,傳送資料時將這個結構...

應用層(HTTP協議)

應用層 負責應用程式之間的溝通 結構化傳輸協議 方便資料式的組織與解析 1.作用 傳輸檔案,網頁 採用tcp協議 tcp協議詳解 2.url 統一資源定位符 相對路徑是根目錄下的相對路徑 3.urlencode 編碼 和urldecode 解碼 乙個字元8位,前4位 編成1位,後4位 編成1位,再加...

應用層 HTTP協議

應用層 應用層和應用程式直接相關,這是和程式設計師打交道最多的地方。自定製協議 不重要 1 約定好客戶端請求 request 包含什麼資訊,伺服器響應 response 包含什麼資訊 2 約定好資料按照什麼格式來組織,本質上網際網路傳輸的都是 二進位制 字串 序列化 反序列化 已有協議 重要 htt...