Linux C編程第二十一章Linux高并發WEB服務器開發

      網友投稿 912 2025-04-01

      一、HTML

      1. HTML簡介

      (1)HTML簡介

      HTML,Hyper Texture Markup Language,超文本標記語言。

      在計算機中以.html、.htm作為擴展名。

      可以被瀏覽器訪問, 就是經常見到的網頁。

      (2)HTML特點

      語法非常簡潔、比較松散,以相應的英語單詞關鍵字進行組合

      html標簽不區分大小寫

      大多數標簽是成對出現的, 有開始, 有結束,比如

      不成對出現的稱之為短標簽,比如


      (3)標簽中的屬性和屬性值

      屬性="屬性值"

      hello, world

      屬性值建議加引號, (雙, 單引號, 不加都可以)

      (4)html組成部分

      聲明文檔類型

      文檔的頭部好和主體內容 根標記

      文檔的頭部信息 頭部標記 只能有一對

      顯示在瀏覽器窗口的標題欄中“網頁名稱” 位于標記之內

      主體標記位于之內,標記之后

      示例:

      這是一個標題 hello, world

      5)注釋

      2.?文字和標題標簽

      (1)標題標簽

      // 最大

      只有一個

      搜索引擎優化:seo

      ...

      // 最小

      1-6依次變小, 自動換行

      (2)文本標簽

      屬性:

      color: 文字顏色

      表示方式:

      英文單詞: red green blue......

      使用16進制的形式表示顏色: #ffffff -- (rgb)

      使用rgb(255, 255, 0)

      size: 文字大小

      范圍 1 -- 7

      7最大

      1最小

      (3)文本格式化標簽

      文本加粗標簽

      工作里盡量使用strong

      文本傾斜標簽

      工作里盡量使用em

      刪除線標簽

      工作里盡量使用del

      下劃線標簽(插入文本)

      工作里盡量ins

      (4)段落

      xxx

      特點:

      上下自動生成空白行

      (5)塊容器

      This is a div element.

      用于沒有語義含義的內容的塊級容器(或網頁的"劃分")。

      屬性:對齊方式

      align:

      left

      center

      right

      (6)換行


      (7)水平線


      屬性:

      color: 3種表示方法

      size: 1-7

      例如:


      3.?列表標簽

      (1)無序列表

      標簽:

      • 列表項

      屬性:type

      實心圓圈: disc -- 默認

      空心圓圈: circle

      小方塊: square

      (2)有序列表

      標簽:

      1. 列表項

      屬性:

      type -- 序號

      1 -- 默認

      a

      A

      i -- 羅馬數字(小)

      I -- 羅馬數字(大)

      start

      從序號的什么位置開始表示

      (3)自定義列表

      標簽

      小標題
      解釋標題
      解釋標題

      4. 圖片標簽

      屬性:

      src: 圖片的來源 必寫屬性

      alt: 替換文本 圖片不顯示的時候顯示的文字

      title: 提示文本 鼠標放到圖片上顯示的文字

      width: 圖片寬度

      height: 圖片高度

      注意:

      圖片沒有定義寬高的時候,圖片按照百分之百比例顯示

      如果只更改圖片的寬度或者高度,圖片等比例縮放。

      示例:

      小岳岳

      5. 超鏈接標簽

      (1)超鏈接標簽

      超鏈接

      屬性:

      href: 去往的路徑(跳轉的頁面)必寫屬性

      title: 提示文本, 鼠標放到鏈接上顯示的文字

      target:

      _self:默認值 在自身頁面打開(關閉自身頁面,打開鏈接頁面)

      _blank: 打開新頁面 (自身頁面不關閉,打開一個新的鏈接頁面)

      示例:

      百度一下

      (2)錨鏈接

      先定義一個錨點:

      超鏈接到錨點: 回到頂點

      (6)表格標簽

      屬性:

      border -- 表格線, 寬度1-7

      bordercolor -- 表格線顏色

      width

      height

      -- 行

      屬性:

      align -- 對齊方式:

      center

      left

      right

      -- 單元格(列)

      對其屬性設置同tr

      示例:

      第一列 第二列

      二、http協議 - 應用層

      1. 請求消息(Request) - 瀏覽器給服務器發

      四部分: 請求行, 請求頭, 空行, 請求數據

      請求行: 說明請求類型, 要訪問的資源, 以及使用的http版本

      請求頭: 說明服務器要使用的附加信息

      空行: 空行是必須要有的, 即使沒有請求數據

      請求數據: 也叫主體, 可以添加任意的其他數據

      示例:

      GET /3.txt HTTP/1.1 /: 資源目錄的根目錄 三部分內容由空格間隔 Host: localhost:2222 User-Agent: Mozilla/5.0 (X11; Ubuntu; linux i686; rv:24.0) Gecko/201001 01 Firefox/24.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive If-Modified-Since: Fri, 18 Jul 2014 08:36:36 GMT 請求頭:由鍵值對構成的 請求數據 換行:\r\n

      2. 響應消息(Response) - 服務器給瀏覽器發

      四部分: 狀態行, 消息報頭, 空行, 響應正文

      狀態行: 包括http協議版本號, 狀態碼, 狀態信息

      消息報頭: 說明客戶端要使用的一些附加信息

      空行: 空行是必須要有的

      響應正文: 服務器返回給客戶端的文本信息

      示例:

      HTTP/1.1 200 Ok Server: micro_httpd Date: Fri, 18 Jul 2014 14:34:26 GMT Content-Type: text/plain; charset=iso-8859-1 (必選項) 告訴瀏覽器發送的數據是什么類型 Content-Length: 32 發送的數據的長度 Content-Language: zh-CN Last-Modified: Fri, 18 Jul 2014 08:36:36 GMT Connection: close #include int main(void) { printf("hello world!\n"); return 0; }

      3. HTTP1.1的五種請求方法

      1)GET

      請求指定的頁面信息,并返回實體主體。

      2)POST

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

      3)HEAD

      類似于get請求,只不過返回的響應中沒有具體的內容,用于獲取報頭。

      4)PUT

      從客戶端向服務器傳送的數據取代指定的文檔的內容。

      5)DELETE

      請求服務器刪除指定的頁面。

      6)CONNECT

      HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。

      7)OPTIONS

      允許客戶端查看服務器的性能。

      8)TRACE

      回顯服務器收到的請求,主要用于測試或診斷。

      示例:http使用get和post請求數據

      使用get方法請求數據:

      GET /3.txt HTTP/1.1 Host: localhost:2222 User-Agent: Mozilla/5.0 (X11; Ubuntu; linux i686; rv:24.0) Gecko/201001 01 Firefox/24.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive If-Modified-Since: Fri, 18 Jul 2014 08:36:36 GMT\r\n 空行 請求數據(可以為空)

      使用post方法請求數據:

      POST HTTP/1.1 Host: localhost:2222 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:24.0) Gecko/201001 01 Firefox/24.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive If-Modified-Since: Fri, 18 Jul 2014 08:36:36 GMT 空行 username=jack&pwd=123456&sex=男

      瀏覽器地址欄:

      192.168.30.131/hello.c 瀏覽器封裝一個http請求協議 get /hello.c http/1.1 key:value key:value key:value key:value \r\n

      4. HTTP常用狀態碼

      狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:

      1xx:指示信息--表示請求已接收,繼續處理

      2xx:成功--表示請求已被成功接收、理解、接受

      3xx:重定向--要完成請求必須進行更進一步的操作

      4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

      5xx:服務器端錯誤--服務器未能實現合法的請求

      常見狀態碼:

      200 OK 客戶端請求成功 400 Bad Request 客戶端請求有語法錯誤,不能被服務器所理解 401 Unauthorized 請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用 403 Forbidden 服務器收到請求,但是拒絕提供服務 404 Not Found 請求資源不存在,eg:輸入了錯誤的URL 500 Internal Server Error 服務器發生不可預期的錯誤 503 Server Unavailable 服務器當前不能處理客戶端的請求,一段時間后可能恢復正常

      5. http中的文件類型

      普通文件: text/plain; charset=utf-8 *.html : text/html; charset=utf-8 *.jpg : image/jpeg *.gif : image/gif *.png : image/png *.wav : audio/wav *.avi : video/x-msvideo *.mov : video/quicktime *.mp3 : audio/mpeg charset=iso-8859-1 西歐的編碼,說明網站采用的編碼是英文; charset=gb2312 說明網站采用的編碼是簡體中文; charset=utf-8 代表世界通用的語言編碼; 可以用到中文、韓文、日文等世界上所有語言編碼上 charset=euc-kr 說明網站采用的編碼是韓文; charset=big5 說明網站采用的編碼是繁體中文;

      6. 重定向

      三、web服務器實現

      1. 實現思路

      (1)編寫函數解析http請求

      GET /hello.html HTTP/1.1\r\n

      將上述字符串分為三部分解析出來

      (2)編寫函數根據文件后綴,返回對應的文件類型

      (3)sscanf - 讀取格式化的字符串中的數據

      使用正則表達式拆分

      [^ ]的用法

      (4)通過瀏覽器請求目錄數據

      讀指定目錄內容

      opendir readdir closedir

      scandir - 掃描dir目錄下(不包括子目錄)內容

      #include int scandir(const char *dirp, struct dirent ***namelist, int (*filter)(const struct dirent *), int (*compar)(const struct dirent **, const struct dirent **) ); dirp - 當前要掃描的目錄 namelist - struct dirent** ptr; - struct dirent* ptr[]; - &ptr; filter - NULL compar 文件名顯示的時候, 指定排序規則 - alphasort - versionsort

      5)http中數據特殊字符編碼解碼問題

      編碼

      解碼

      服務器端偽代碼:

      1 void http_respond_head(int cfd, char* type) 2 { 3 char buf[1024]; 4 // 狀態行 5 sprintf(buf, "http/1.1 200 OK\r\n"); 6 write(cfd, buf, strlen(buf)); 7 // 消息報頭 8 sprintf(buf, "Content-Type: %s\r\n", type); 9 write(cfd, buf, strlen(buf)); 10 11 // 空行 12 write(cfd, "\r\n", 2); 13 } 14 15 void main() 16 { 17 // 修改進程的工作目錄 18 chdir(path); 19 // 創建監聽的套接字 20 int lfd = socket(af_inet, sock_stream, 0); 21 // 綁定 22 struct sockaddr_in serv; 23 serv.family = af_inet; 24 serv.port = htons(8989); 25 bind(lfd, &serv, len); 26 // 監聽 27 listen(); 28 29 int cfd = accept(); 30 // 讀數據 31 read(cfd, buf, sizeof(buf)); 32 // 先將buf中的請求行拿出來 33 // GET /hello.c http/1.1 34 char method[12], path[1024], protocol[12]; 35 // 得到文件名 36 char* file = path+1; 37 // 打開文件 38 int fdd = open(file, O_RDONLY); 39 int len = 0; 40 http_respond_head(cfd, "text/plain"); 41 // 循環讀數據 42 while( (len=read(fdd, buf, sizeof(buf))) > 0) 43 { 44 // 數據發送給瀏覽器 45 write(fdd, buf, len)); 46 } 47 }

      【Linux C編程】第二十一章Linux高并發WEB服務器開發之版本1

      Linux web前端

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:倉庫系統管理軟件: 現代物流的智能助手
      下一篇:在線工作流設計系統-提高效率與協作的利器
      相關文章
      亚洲三级电影网站| 亚洲精品岛国片在线观看| 亚洲精品国产电影| 亚洲AV无码资源在线观看| 亚洲中文字幕精品久久| 亚洲第一区二区快射影院| 亚洲av午夜精品无码专区| 91亚洲精品麻豆| 91亚洲精品麻豆| 亚洲av无码国产综合专区| 亚洲娇小性xxxx色| 亚洲一本到无码av中文字幕| 亚洲日本成本人观看| 亚洲国产精品久久久久秋霞小| 亚洲国产午夜精品理论片在线播放| 中日韩亚洲人成无码网站| 久久亚洲精品国产亚洲老地址| 中文字幕亚洲男人的天堂网络 | 亚洲精品成人在线| 亚洲国产综合无码一区二区二三区 | 亚洲日韩中文无码久久| 久久亚洲精品中文字幕三区| 黑人精品videos亚洲人| 亚洲AV人无码激艳猛片| 亚洲电影免费观看| 亚洲va乱码一区二区三区| 亚洲综合激情五月色一区| 亚洲精品9999久久久久无码| 亚洲AⅤ永久无码精品AA| 亚洲精品456播放| 国产亚洲一区二区精品| 久久久久久a亚洲欧洲AV| 亚洲黄色一级毛片| 亚洲人成网站看在线播放| 亚洲人成网亚洲欧洲无码| 亚洲AV伊人久久青青草原| 中文字幕久久亚洲一区| 亚洲AV美女一区二区三区| 亚洲中文久久精品无码1| 亚洲高清毛片一区二区| 亚洲男人第一无码aⅴ网站|