http協議

##socket套接字
– 套接字,進程間通信IPC的一種實現,允許位于不同主機(或同一主機)上不同進程之間進行通信和數據交換。
– socketAPI:封裝了內核中所提供的socket通信相關的系統調用
– socketDomain:根據其所使用的地址
– AF_INET:Address Family,Ipv4
– AF_INET6:IPv6
– AF_UNIX:同一主機上不同進程之間通信時使用(在同一機器上完成,不需要解封裝)
– socket Type:根據使用的傳輸層協議
– SOCK_STREAM:流,tcp套接字,可靠地傳遞、面向連接
– SOCK_DGRAM:數據報,udp套接字,不可靠地傳遞、無連接
– SOCK_RAM:裸套接字,無須tcp或tdp,APP直接通過IP包通信

###套接字相關的系統調用:
– socket():創建一個套接字
– bind():綁定ip和端口
– listen():監聽
– accept():接收請求
– connect():請求連接建立
– write():發送
– read():接收
– close():關閉連接

##**http協議介紹**
– http/0.9:原型版本,功能簡陋,服務器只能回應html格式字符串,不能回應別的格式
– http/1/0:支持cache,MIME,method;引入POST命令和HEAD命令。頭信息是ASCII碼,后面是任何格式。服務器回應時告訴客戶端,數據是什么格式,即Content-Type字段的作用。這些數據類型總稱為MIME多用途互聯網郵件擴展,每個值包括一級類型和二級類型,預定義類型。
– http/1.1
– 引入持久連接,即TCP連接默認不關閉,可以被多個請求復用,不用聲明keep-alive,對于同一域名,大多數瀏覽器允許同時建立6個持久連接
– 引入管道機制,即在同一個tcp連接里,客戶端可以同時發送多個請求。
– 新增put patch options delete
– 同一個tcp連接里面,所有的數據通信是按次序進行的。前面的回應慢,會有許多請求排隊,造成‘隊頭堵塞’
– 為避免上述問題,兩種方法:一是減少請求數,二是同時多開持久連接。
– http協議不帶有狀態,每次請求都必須附上所有信息。請求的很多字段都是重復的,浪費帶寬,影響速度。
– spdy:谷歌開發,解決http/1.1效率不高的問題
– http:/2.0
– 頭信息和數據體都是二進制,稱為頭信息幀和數據幀
– 復用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發送多個請求或回應,且不用按順序一一對應,避免了“隊頭堵塞”,此雙向的實時通信稱為多工
– 頭信息壓縮機制,頭信息使用gzip或compress壓縮后再發送;客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,生成一個索引號,不發送同樣字段,只發送索引號,提高速度。
– http/2.0允許服務器未經請求,主動向客戶端發送資源,即服務器推送

##**http工作機制**
– 工作機制:
– http請求:http request
– http響應:http response
– 一次http事務:請求 <–> 響應
– web資源:web resource
– 通常web頁面不是單個資源,而是一組資源的集合
– 靜態文件:.jpg .html .txt .js .css .mp3 .avi
– 動態文件:.asp .php .jsp
– 提高http連接性能
– 并行連接:通過多條TCP連接發起并發的HTTP請求
– 持久連接:keep-alive,長連接,重用TCP連接,以消除連接和關閉的時延。
– 管道化連接:通過共享TCP連接發起并發的HTTP請求
– 復用連接:交替傳送請求和響應報文

##**URI**
– uri稱為統一資源標標識,分為URL和URN
– URN:統一資源命名,示例P2P,僅用于命名,而不指定地址
– URL:統一資源定位符,用于描述某服務器某特定資源位置

##**網站訪問量**
– IP,一天內來自相同IP地址只計算一次。
– PV,頁面瀏覽量或點擊量,用戶每刷新一次即被計算一次。
– UV(獨立訪問),一天內相同客戶端只被計算一次。判斷電腦的身份是通過來訪電腦的cookies實現的。如果更換了IP后但不清除cookies,UV不變

##**web服務請求處理**
– (1)建立連接:接收或拒絕連接請求
– (2)接收請求:接收客戶端請求報文中對某資源的一次請求的過程
– (3)處理請求:服務器對請求報文進行解析,并獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理
– http常用請求方式,Method:GET POST HEAD PUT DELETE TRACE OPTIONS
– (4)訪問資源:服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行后生成的資源
– (5)構建響應報文:一旦web服務器識別除了資源,就執行請求方法中描述的動作,并返回響應報文。響應報文中包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體。
– (6)發送響應報文
– (7)記錄日志

– web訪問響應模型(I/O)
– 單進程io模型:啟動一個進程處理請求,而且一次只處理一個,多個請求被串行響應
– 多進程io模型:并行啟動多個進程,每個進程響應一個連接請求
– 復用io結構:啟動一個進程,同時響應N個連接請求
– 實現方法:多線程模型和事件驅動
– 多線程模型:一個進程生成N個線程,每個線程響應一個連接請求
– 事件驅動:一個進程處理N個請求
– 復用的多進程io模型:啟動M個進程,每個進程響應N個連接請求,同時接受M*N個請求

##**HTTP服務器應用**
– http服務器程序:apache Nginx lighttpd
– 應用程序服務器
– IIs .asp
– tomcat .jsp
– jetty 開源的servlet容器
– Resin 支持servlets和jsp的引擎

##**HTTP功能特性**
– 虛擬主機:IP、Port、FQDN
– CGI:通用網關(相當于翻譯,兩端是不同的協議)接口(不僅可以執行靜態頁面,還可以編譯動態程序)
– 反向代理:外部客戶端訪問專有網絡時,會訪問代理服務器,充當調度員,通過內部系列算法,指向一臺web服務其中
– 負載均衡:同上,調度到負載較小的web服務器中去,實現均衡負載。
– 路徑別名
– 豐富的用戶認證機制:basic digest
– 支持第三方模塊

##HTTP安裝
– 版本:CentOS 6:2.2 CentOS 7:2.4
– 安裝方式
– rpm:centos發行版
– 編譯:定制或特殊需求
– Centos 6程序環境:httpd-2.2
– 配置文件:
– /etc/httpd/conf/httpd.conf
– /etc/httpd/conf.d/*.conf
– 檢查配置語法:httpd -t service httpd configtest
– 服務腳本:/etc/rc.d/init.d/httpd
– 腳本配置文件:/etc/sysconfig/httpd
– 服務控制和啟動:
– chkconfig httpd on|off
– service {start | stop | restart | status | configtest | reload} httpd
– 站點網頁文檔根目錄:/var/www/html
– 模塊文件路徑:/etc/httpd/modules /usr/lib64/httpd/modules
– 主程序文件:
– /usr/sbin/httpd
– /usr/sbin/httpd.worker
– /usr/sbin/httpd.event
– 主進程文件:/etc/httpd/run/httpd.pid
– 日志文件目錄:
– /var/log/httpd
– access_log:訪問日志
– Error_log:錯誤日志
– 幫助文檔包:
– httpd-manual

##**httpd 2.2常見配置**
– 1.grep “Section” /etc/httpd/conf/httpd.conf
– 配置格式:directive value
– directive:不區分字符大小寫
– value:為路徑時,是否區分大小寫,取決于文件系統
– 不想顯示apache版本信息,需要設置ServerTokens Prod #(配置第45行),完成后service httpd reload
– 2.修改監聽的IP和Port
– Listen [IP:]PORT 省略IP表示本機所有IP
– Listen指令至少一個,可重復出現多次
– 例如:Listen 80 Listen 192.168.1.100:8080
– 3.持久連接
– Persistent Connection:連接建立,每個資源獲取完成后不會斷開連接,而是繼續等待其它的請求完成,默認關閉持久連接
– 設置方法: (1) KeepAlive On | Off (2) KeepAliveTimeout 15
– 測試方法: (1) telnet WEB_SERVER_IP PROT (2) GET /URL HTTP/1.1
– 4.加載動態模塊配置DSO:Dynamic Shared Object
– /etc/httpd/conf/httpd.conf
– 配置指定實現模塊加載格式:
– LoadModule <mod_name> <mod_path>
– 相對于ServerRoot的默認路徑(可使用的相對路徑)是/etc/httpd
– 示例
– LoadModule auth_basic_module modules/mod_auth_basic.so
– 5.定義’Main’server的文檔頁面路徑
– DocumentRoot “/path”
– 文檔路徑映射:DocumentRoot指向的路徑為URL路徑的起始位置
– 示例:
– DocumentRoot “/app/data”
– http://HOST:POST/test/index.html –> /app/data/test/index.html
– 同時要注意SELinux和iptables狀態
– 6.定義站點主頁面
– DirectoryIndex index.html index.html.var
– 7.站點訪問控制常見機制
– 訪問控制機制有兩種:客戶端來源地址、用戶賬號
– 文件系統路徑
– <Directory “/path”>…</Directory>
– <File “/path/file”>…</File>
– <FileMatch “PATTERN”>…</FileMatch>
– URL路徑:
– <Location “”>…</Location>
– <LocationMatch “”>…</LocationMatch>
– 8.<Directory>中“基于源地址”實現訪問控制
– 9.日志設定
– 訪問日志:LogFormat format strings LogFormat “%h %l %u %t \”%r\” %>s %b\”%{Referer}i\” \”%{User-Agent}i\”” combined
– 使用日志格式:CustomLog logs/access_log combined
– %h:客戶端ip %l:遠程用戶 %u:驗證 %t:服務器收到請求時間 %r:請求報文首行 %>s:響應狀態碼 %b:響應報文大小 %{Referer}i:請求報文中首部referer的值 %{User-Agent}i:請求報文中“user-Agent”的值;

##**設置三個虛擬主機網站**
– 1.在一個目錄里中創建三個目錄,每個目錄分別建3個站
– 2.方法1:可以設置臨時的ip地址給這三個網站,ip add a 192.168.183.11/24 dev eth0 方法2:端口訪問, 方法3(常用):配置DNS,用域名訪問
– 3.配置vim /etc/httpd/conf.d/*.conf *名字可以任意取。格式仿照tail /etc/httpd/conf/httpd.conf中<virtual…:80>內容

##**常見的httpd程序**
– 默認為Prefork
– MaxClients 256 最大并發
– ServerLimit 256 最多進程數
– MaxRequestPerChild 4000
– 當MaxRequestPerChild個請求之后,子進程將會被父進程終止,這時候內存會被釋放
– 更換使用的httpd程序(worker):
– /etc/sysconfig/httpd
– HTTPD = /usr/sbin/httpd.worker
– 重啟服務生效
– pstree -p | grep httpd 查看進程和線程

##HTTP狀態碼分類
– 100-101 信息提示
– 200-206 成功
– 300-305 重定向
– 400-415 錯誤類信息,客戶端錯誤
– 500-505 錯誤類信息,服務器錯誤

##**COOKIE**
– HTTP是一種無狀態協議。協議自身不對請求和響應之間的通信狀態進行保存。隨著web的發展,很多業務都需要對通信狀態進行保存。于是引進了cookie技術。
– 過程:(1)客戶端向服務器發送請求 (2)服務器響應,并攜帶有set-cookie首部字段信息,通知客戶端保存Cookie。(3)當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報文中加入Cookie值 (4)服務端發現客戶端發送過來的Cookie后,會去檢查從哪個客戶端發來的連接請求,最后得到 之前的狀態信息。
– session:比如購買商品的這些信息,會伴隨cookie標識信息,被保存在web服務器中。
– 如何實現session的共享?
– (1) 代理服務器做Ip記錄,下次調度時,還向原web服務器調度。
– (2) web服務器間進行session復制
– (3) 專門搭建一個session服務器(redis服務器)

##**HTTPS**
– 對稱加密:A和B之間溝通需要一個共同的key來做加密解密
– 非對稱加密:A(A的公鑰,A的私鑰),B(B的公鑰,B的私鑰)。共4把。
– (1) 2把公鑰之間相互知道,A發送東西給B時,將文件用B的公鑰加密,B才能解密。
– (2) A把文件用自己的私鑰加密的時候,廣播出去,別人(A公鑰)解密后,就知道這是A發送的文件。
– 數字簽名:CA認證機構,A和B不認識的時候,確認對方信息正確,A的公鑰通過CA機構的私鑰加密,加上A的認證信息,再加上過期時間,一起發送給B,B通過CA的公鑰,解密,就能夠得到A的公鑰等信息。完成信息安全傳輸。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89583

(0)
miraclermiracler
上一篇 2017-12-06 16:51
下一篇 2017-12-06 22:21

相關推薦

  • 馬哥教育20期面授2班第一周課程練習1

    計算機基礎   1,計算機系統           硬件系統            主機部分:中央處理器CPU(運算器ALU、控制器CU);  &nb…

    Linux干貨 2016-07-29
  • 基于Python和MoviePy庫實現數據的動態展示

    基于Python和MoviePy庫實現數據的動態展示 (翻譯:以馬內利)  原文鏈接:Data Animations With Python and MoviePy   Python擁有很多實現數據可視化的庫,但是很少可以展示GIFs的動態視圖。 這篇博客主要介紹怎樣使用MoviePy庫作為一個其他可視化庫的通用插件。 Movi…

    2015-03-26
  • LVS的工作原理

    LB Load Balancing:解決方案 硬件: F5 BIG-IP 思杰 Citrix Netscaler A10 A10 Array  Redware 軟件:lvs  linux Virtual Server 作者章文嵩博士 ipvs相當于netfilter,工作在內核中,將用戶轉發    框架,需要依賴以規則…

    Linux干貨 2016-12-07
  • Linux發展史

    Linux發展史 本篇文章主要介紹Linux是什么,Linux是怎么來的,Linux能干些什么等 Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它之所以如此受到人們的歡迎,是因為它開源,是因為它簡潔,更因為它穩定。作為一個普通用戶,或許你沒接觸過電腦的Linux系統,但…

    Linux干貨 2016-10-14
  • 馬哥網絡班21期,第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。     who | cut -d " " -f1 | sort -u     who:查看當前系統所有用戶的會話     cut:剪切命令       cut…

    Linux干貨 2016-07-26
  • 文件權限

     本篇博客是對文件權限的簡單介紹,將會簡述下權限的數字表現形式,還有字母表現形式,還有一些特殊的suid、sgid、sticky的權限介紹,還有對ACL權限的簡述。  一、權限的定義     關于權限,百度百科的解釋如下:權限(privilege)是指某個特定的用戶具有特定的系統資源使用權力,像是文…

    Linux干貨 2017-07-29
欧美性久久久久