Linux項目:基於HTTP協議的自主web服務器

前言

在學習了網絡基礎方面的知識後,想要將自己所學習的網絡知識應用到實踐中,因此,模擬實現一個基於http協議的小型web服務器

項目描述

採用B/S模型或者C/S模型(瀏覽器/服務器模型),編寫支持中小型應用的http,理解常見互聯網應用行爲(從上網到關閉瀏覽器的所有操作)模擬實現了使用瀏覽器上網背後的一系列技術細節;

技術特點

網絡編程(TCP/IP協議,socket流式套接字、http協議)、多線程技術、cgi技術、shell腳本、線程池技術引入

開發環境

centos 7、 vim/gcc/gdb +c(語言爲C++);

具體實現
  • http協議的特點
    首先我們必須知道http協議的特點:
    (1)快速,簡單,由於http服務器程序規模比較小,速度比較快;
    (2)靈活:http協議允許傳輸任意類型的數據對象,正在傳輸的資源類型統一使用Content-Type來標識;
    (3)無連接:每次連接只處理一個請求,服務器對請求響應之後,斷開連接,採用這種方式可以節省傳輸時間;
    (4)無狀態:每次只有新的請求來臨纔會產生新的響應,協議不會保留之前的請求和響應,這是爲了更快的處理大量的事務,確保協議的可伸縮性;
  • URI、URL、URN
    URI指統一資源標識符,是用來唯一標識一個資源;URL指統一資源定位符,是一種具體的URI,不僅標識一個資源,還指明瞭如何定位這個資源;URN指統一資源命名,是通過名字來標識資源;URL和URN都是一種URI;
  • http請求與響應
    如圖:
    在這裏插入圖片描述
    但是一般的請求和響應是這樣的:
    請求:
    在這裏插入圖片描述
    響應:
    在這裏插入圖片描述
    一般請求和響應有很多種,一般我們主要使用到的請求方法是GET與POST方法,接下來介紹一下GET方法和POST方法的不同:
    GET是獲取被URI標識的資源,POST是傳輸實體主體;
    而響應一般根據響應狀態碼(http返回給瀏覽器的狀態碼)來進行劃分,響應狀態碼錶示服務器HTTP響應狀態的3位數字代碼。通過狀態碼,就可以知道服務器端是否正確的處理的請求,如果不正確,是因爲什麼原因導致的(404)如圖:
    在這裏插入圖片描述
    基本上我們的web服務器可以理解成一個通過http協議進行限制的TCP通信socket套接字編程時所做的服務器程序,給這個服務器程序加上http協議,讓它發送的報文都是http封裝的,因爲有了http協議,這個服務器就可以解析瀏覽器發來的請求,並響應,爲了使這個服務器程序更加的好用,我們會引入CGI模式,也就是cgi程序與web服務器之間的接口標準,是在cgi程序與web服務器之間傳遞信息的過程,爲了理解cgi,我們先要理解GET方法和POST方法的區別,GET方法從瀏覽器傳入參數時,是需要將參數跟在URI後面的,POST方法從瀏覽器傳參數給http服務器時,是需要將參數放的請求正文的;
    GET方法:如果沒有傳參,http按照一般的方式進行,返回資源即可
    GET方法:如果有參數傳入,http就需要按照CGI方式處理參數,並將執行結果(期望資源)返回給瀏覽器
    POST方法:一般都需要使用CGI方式來進行處理
HTTP CGI

爲了讓我們的服務器程序更加地方便和實用,我們採取了CGI技術,它是外部應用程序與web服務器之間的接口標準,是在CGI程序和web服務器之間傳遞信息的過程
注意:
一般服務器可能會同時被多個用戶訪問,大量的鏈接可能會讓服務器的線程突然增加,因此,我們可以通過線程池來解決這個問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章