<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
超文字傳輸協定 (HTTP) 是分散式、共同作業、超媒體資訊系統的應用層協定。 這是自 1990 年以來全球資訊網資料通訊的基礎。HTTP 是一種通用且無狀態的協定,它可以用於其他目的,也可以使用其請求方法、錯誤程式碼和檔頭的擴充套件。
基本上,HTTP 是一種基於 TCP/IP 的通訊協定,用於通過 Web 傳遞 HTML 檔案、影象檔案、查詢結果等資料。 它為計算機之間的通訊提供了一種標準化的方式。 HTTP 規範指定了使用者端請求的資料如何傳送到伺服器,以及伺服器如何響應這些請求。
HTTP使用者端和伺服器通訊
使用者端和伺服器通過交換單獨的訊息(而不是資料流)進行通訊。 使用者端(通常是 Web 瀏覽器)傳送的訊息稱為請求,伺服器傳送的作為應答的訊息稱為響應。
HTTP通過 TCP 或 TLS 加密的 TCP 連線傳送的應用層協定,儘管理論上可以使用任何可靠的傳輸協定。 由於其可延伸性,它不僅用於獲取超文字檔案,還用於獲取影象和視訊或將內容釋出到伺服器,例如 HTML 表單結果。 HTTP 還可用於獲取部分檔案以按需更新網頁。
HTTP和連線
連線是在傳輸層控制的,因此基本上超出了 HTTP 的範圍。 HTTP 不要求底層傳輸協定是基於連線的;
它只要求它是可靠的,或者不丟失訊息。在 Internet 上最常見的兩種傳輸協定中,TCP 是可靠的,而 UDP 則不是。因此,HTTP 依賴於基於連線的 TCP 標準。
在使用者端和伺服器可以交換 HTTP 請求/響應對之前,它們必須建立 TCP 連線,這個過程需要多次往返。
HTTP/1.0 的預設行為是為每個 HTTP 請求/響應對開啟一個單獨的 TCP 連線。當多個請求連續傳送時,這比共用單個 TCP 連線效率低。
HTTP 訊息
HTTP/1.1 及更早版本中定義的 HTTP 訊息是人類可讀的。 在 HTTP/2 中,這些訊息被嵌入到二進位制結構中,即一個幀,允許像壓縮頭和多路複用這樣的優化。 即使在這個版本的 HTTP 中只傳送原始 HTTP 訊息的一部分,每個訊息的語意都不會改變,使用者端會(實際上)重構原始 HTTP/1.1 請求。 因此,理解 HTTP/1.1 格式的對 HTTP/2 訊息很有用。
HTTP 訊息有兩種型別,請求和響應,每種都有自己的格式。
HTTP請求訊息
請求由以下元素組成:
HTTP 方法,通常是 GET、POST 之類的動詞或 OPTIONS 或 HEAD 之類的名詞,用於定義使用者端想要執行的操作。 通常,使用者端想要獲取資源(使用 GET)或釋出 HTML 表單的值(使用 POST),但在其他情況下可能需要更多操作。
要獲取的資源的路徑; 從上下文中明顯的元素中剝離的資源的 URL。
HTTP響應訊息
響應由以下元素組成:
他們遵循的 HTTP 協定的版本。
狀態碼,指示請求是否成功以及原因。
狀態訊息,狀態程式碼的非權威簡短描述。
HTTP 檔頭,例如用於請求的檔頭。
可選地,包含獲取的資源的主體。
HTTP 狀態
一些常見的 HTTP 狀態程式碼包括:
200 - 請求成功(網頁存在)
301 - 永久移動(通常轉發到新 URL)
401 - 未經授權的請求(需要授權)
403 - 禁止(不允許存取頁面或目錄)
500 - 內部伺服器錯誤(通常由不正確的伺服器設定引起)
HTTP協定解析及C/C++程式碼實現
... void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) { ... /* print source and destination IP addresses */ printf(" From: %sn", inet_ntoa(ip->ip_src)); printf(" To: %sn", inet_ntoa(ip->ip_dst)); /* determine protocol */ switch(ip->ip_p) { case IPPROTO_TCP: printf(" Protocol: TCPn"); break; case IPPROTO_UDP: printf(" Protocol: UDPn"); break; case IPPROTO_ICMP: printf(" Protocol: ICMPn"); return; case IPPROTO_IP: printf(" Protocol: IPn"); return; default: printf(" Protocol: unknownn"); return; } /* * OK, this packet is TCP. */ /* define/compute tcp header offset */ if(ip->ip_p == IPPROTO_TCP) { ... printf(" Src port: %dn", ntohs(tcp->th_sport)); printf(" Dst port: %dn", ntohs(tcp->th_dport)); int sport = ntohs(tcp->th_sport); int dport = ntohs(tcp->th_dport); ... if (size_payload > 0) { printf(" Payload (%d bytes):n", size_payload); //print_payload(payload, size_payload); if ((sport == 80) || (dport == 80)) { printf(" HTTP prase:n"); prase_http(payload, size_payload); } else if(sport == 443 || dport == 443) { printf(" SSL/TLS prase:n"); prase_ssl_tls(payload, size_payload); } } } ... } int main(int argc, char *argv[]) { char errbuf[100]; pcap_t *desc = 0; char *filename = argv[1]; if (argc != 2) { printf("usage: ./dissect_http [pcap file]n"); return -1; } printf("ProcessFile: process file: %sn", filename); if ((desc = pcap_open_offline(filename, errbuf)) == NULL) { printf("pcap_open_offline: %s error!n", filename); return -1; } pcap_loop(desc, -1, got_packet, NULL); pcap_close(desc); return 0; }
執行結果:
總結
HTTP 是一種易於使用的可延伸協定。 使用者端-伺服器結構與新增檔頭的能力相結合,允許 HTTP 與 Web 的擴充套件功能一起發展。
儘管 HTTP/2 通過在幀中嵌入 HTTP 訊息來提高效能增加了一些複雜性,但訊息的基本結構自 HTTP/1.0 以來一直保持不變。 對談流保持簡單,允許使用簡單的 HTTP 訊息監視器對其進行調查和偵錯。
以“http://”開頭的 URL 通過標準超文字傳輸協定存取,預設使用埠 80。以“https://”開頭的 URL 通過安全的 HTTPS 連線存取,通常使用埠 443。
以上就是C/C++程式碼實現HTTP協定解析的範例程式碼的詳細內容,更多關於C++解析HTTP協定的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45