Web Service
傳輸層:提供進程地址
Port Number:
tcp:傳輸控制協議,面向鏈接的協議:通訊錢須要創建虛擬鏈路,結束後拆除鏈路
0-65535
udp:User Datagram Protocol,無鏈接的協議
0-65535
IANA:
0-1023:特權端口,這些端口永久分配給固定的應用使用,22/tcp(ssh),80/tcp(http),443/tcp(https)
1024-41951:亦爲註冊端口,但要求並非特別嚴格,分配給程序註冊的某應用使用,11211/tcp,11211/udp(memcache),3306/tcp(mysql)
41952+:客戶端程序隨機使用的端口:動態端口或私有端口,其範圍的定義: /proc/sys/net/ipv4/ip_local_port_rangejavascript
Socket:IPC的一種實現,運行位於不一樣主機(甚至同一主機)上不一樣進程之間進行通訊:數據交換,Socket API SOCK_STREAM:tcp套接字 SOCK_DGRAM:UDP套接字 SOCK_RAW:裸套接字 Socket Domain(根據其所使用的地址) AF_INET:Address Family,ipv4 AF_INET:Address Family,ipv6 AF_UNIX:同一主機不一樣進程之間通訊時使用 每類套接字都至少提供了兩種socket;流,數據報 流:可靠地傳遞、面向鏈接、無邊界 數據包:不可靠地傳遞、有邊界、無鏈接 套接字相關的系統調用: socket():建立一個套接字 bind():綁定 listen():監聽 accept():接收請求 connect():請求鏈接創建 write():發送 read():接收數據 send(),recv(),sendto(),recvfrom() IPV4: 分類: A:1-127 B:128-191 C:192-223 D:224-239 E:240-254 私有地址: A:10.0.0.0/8 B:127.16.0.0/16-172.31.0.0/16 C:192.168.0.0/24-192.168.255.0/24 TCP協議的特性: 創建鏈接:三次握手 將數據打包成端:校驗和(CRC-32) 確認、重傳以及超時; 排序、邏輯序號 流量控制、滑動窗口算法 擁塞控制:慢啓動和擁塞避免算法 http:hyper text transfer protocol html:編程語言,超文本標記語言 <html> <head> <title> TITLE </titlet> </head> <body> <h1></h1> <p>test..<a href="http://www.sjie.com/logo.jpg">sjie</a></p> <h2></h2> </body> </html> CSS:層疊樣式表(cascading Style Sheet) JS:JavaScript MIME:Multipurpose Internet Mail Extesion 工做機制: http請求 http響應 web資源:web resource 靜態文件:.jpg .gif .html .txt .css .js .mp3 .avi 動態文件:.php .jsp 媒體: 媒體類型(MIME類型):major/minor text/html text/plain image/jepg image/gif URI:Uniform Resource Identifier URL:uniform Resource Locator,用來描述某服務器某特定資源的位置 Scheme://Server:Port/path/to/resource http://www.sjie.com/images/logo.jpg URN:Uniform Resource Naming Http協議版本: HTTP/0.9:原型版本 HTTP/1.0: 第一個普遍使用的版本,支持MIME HTTP/1.1:加強了緩存功能 spdy:Google研發的 HTTP/2.0: 一次完整的HTTP請求: (1)創建或處理請求:接收請求或拒絕請求 (2)接收請求: 接收來自於網絡的請求報文中對某資源的一次請求的過程 併發訪問響應模式(web I/O): 單進程I/O結構:啓動一個進程處理用戶請求,並且一次只處理一個,多個請求被串行響應 多進程I/O結構:並行啓動多個進程,每一個進程響應一個請求 複用I/O結構:一個進程響應n個請求: 多線程模型:一個進程生成N個線程,每一個線程響應一個用戶請求 事件驅動:event-driver 複用的多進程I/O結構:啓動多個進程,每一個進程響應N個請求 (3)處理請求:對請求報文進行解析,並獲取請求的資源及請求方法等相關信息 元數據:請求報文首部 <method> <URL> <VERSION> Host:www.sjie.com 請求的主機名稱 Connection: (4)訪問資源:獲取報文中請求的資源 web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行後生成的資源,這些資源放置於本地文件系統某路徑下,此路徑一般稱爲DocRoot web服務器資源路徑映射方式: (a) docroot (b) alias (c) 虛擬主機docroot (d) 用戶家目錄docroot (5)構建響應報文: 資源的MIME類型: 顯式分類 魔法分類 協商分類 URL重定向: web構建的響應併發客戶端請求的資源,而是資源另一個訪問路徑 (6)發送響應報文 (7)記錄日誌 HTTP服務器程序: httpd(apache) nginx lighttpd 應用程序服務器: IIS tomcat,jetty,jboss,resin webshpere,weblogic,oc4j HTTPD的安裝配置和使用 httpd:apache httpd的特性: 高度模塊化:core + modules DSO:Dynamic Shared Object MPM:Multipath Processing Modules perfork:多進程模型,每一個進程響應一個請求: 一個主進程,負責生產n個子進程,子進程也稱爲工做進程,每一個子進程處理一個用戶請求,即便沒有用戶請求,也會預先生成多個空閒進程,隨時等待請求到達,最大不會超過1024個 worker:多線程模式(多進程生成的,一個進程生成多個線程),一個線程響應一個請求 event:事件驅動模型,一個線程響應多個請求 HTTPD安裝: 安裝方式: rpm 編譯 程序環境: 配置文件: /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf 服務腳本: /etc/rc.d/init.d/httpd 配置文件:/etc/sysconfig/http 主程序文件: /usr/sbin/httpd /usr/sbin/httpd.event /usr/sbin/httpd.worker 日誌文件目錄: /var/log/httpd access_log:訪問日誌 error_log:錯誤日誌 站點文檔目錄: /var/www/html 模塊文件路徑: /usr/lib64/httpd/modules 配置文件的組成: grep "Section" /etc/httpd/conf/httpd.conf ##Section 1: Global Environment ##Section 2: 'Main' server configuration ##Section 3: Virtual Hosts 配置格式: directive value directive:不區分字符大小寫 value:爲路徑時,取決於文件系統 經常使用配置: 1,修改監聽的IP和Port Listen [IP:]PORT 省略IP表示監聽本機全部IP;Listen可重複出現屢次 2,持久鏈接 Persistent Connection:鏈接創建,每一個資源獲取完成後不會斷開鏈接,而是繼續等待其餘的請求完成 若是斷開? 數量限制:100 時間限制:可配置 反作用:對併發訪問量較大的服務器,持久鏈接功能會使用有些請求得不到響應 折中:使用較短的持久鏈接時間 httpd-2.4 支持毫秒級持久時間 非持久鏈接 KeepAlive On|Off MaxKeepAliveRequests KeepAliveTimeout 3,MPM Multipath Process Module:多信道處理模塊 prefork,worker,event httpd-2.2不支持同時編譯多個模塊,因此只能編譯時選定一個;rpm安裝的包提供三個二進制程序文件,分別用於實現對不一樣MPM機制的支持,默認爲prefork httpd -l : 查看編譯的模塊 更換httpd啓動程序 修改/etc/sysconfig/httpd中的HTTPD= prefork的配置 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> worker的配置 <IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> 4,DSO 配置指令實現模塊加載 LoadModule <mod_name> <mod_path> 模塊路徑可以使用相對地址 相對於ServerRoot指向的路徑而言: /etc/httpd/module 5,定義'Main' server的文檔頁面路徑 DocumentRoot 文檔路徑映射: DocumentRoot指向的路徑爲URL路徑的起始位置: DocumentRoot "/var/www/html" test/index.html -->http://HOST:PORT/test/index.html 6,站點訪問控制 可基於兩種類型的路徑指明對哪些資源進行訪問控制 文件系統路徑: <Directory ""></Directory> <File ""></File> <FileMatch ""></FileMatch> URL路徑: <Location ""></Location> 訪問控制機制 基於來源IP: 基於帳號: 7,Directory中基於來源地址實現訪問控制 (1)Options 全部可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews Indexes:索引; FollowSymlinks:容許跟蹤符號連接文件 (2)基於來源地址的訪問控制機制 Order:檢查次序 Allow from Deny from 來源地址: IP NetAddr: 172.16 172.16.0.0 172.16.0.0/16 172.16.0.0/255.255.0.0 8,定義默認主頁面 DirectoryIndex index.html index.html.var 9,日誌設定 錯誤日誌: ErrorLog logs/error.log LogLevel warn 級別:debug info notice warn error crit alert emerg CustomLog logs/access_log combined LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined %h:客戶端IP地址; %l:Remote logname(from identd,if supplied) -表示爲空; %u:Remote user (from auth) -表示爲空; %t:服務器收到請求的時間; %r:請求報文的首行信息(method url version); %>s:響應狀態碼 %b:響應報文的大小,單位是字節,不包括響應報文的首部 %{Referer}i:請求報文當中的"referer"首部的值,當前資源的訪問人口,即從哪一個頁面中的超連接跳轉而來; %{User-Agent}i:請求報文當中"User-Agent"首部的值:即發出請求用到的應用程序 10,路徑別名 Alias /URL/ "/PATH/TO/SOMEDIR/" Alias /bbs/ "/forum/htdocs" http://www.sjie.com/bbs/index.html --> /forum/htdocs/bbs/ 11,設定默認字符集 AddDefaultCharset UTF-8 12,基於用戶的訪問控制 認證質詢: WWW-Authenticate:響應碼是401,拒絕客戶端請求,並說明要求客戶提供帳號和密碼 認證: Authentization:客戶端用戶填入帳號和密碼後再次發送請求報文,認證經過,則服務器發送響應的資源 認證類型: basic:明文 digest:消息摘要 安全域:須要用戶認證後方能訪問的路徑: 應該經過名稱對其進行標識,並用戶告知用戶認證的緣由 用戶帳號和密碼存儲於何處 虛擬帳號:僅用於訪問某服務時用到的認證標識 存儲: 文本文件 SQL數據庫 ldap nis basic認證: (1)定義安全域 <Directory ""> Options None AllowOverride None AuthType Basic AuthName "STRING" AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" Require user username1 username2 #容許文件中的全部用戶 Require valid-user </Directory> (2)提供帳號和密碼存儲(文本文件) 使用htpasswd命令進行管理 htpasswd [options] passwordfile username -c:自動建立passwordfile,所以僅在建立第一個用戶時使用 -m:使用MD5加密用戶密碼文件 -s:sha1加密用戶密碼 -D:刪除指定用戶 (3)實現基於組認證 <Directory ""> Options None AllowOverride None AuthType Basic AuthName "STRING" AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE" Require group GROUP1 GROUP2 </Directory> 須要用戶帳號文件和組文件: 組文件:每一行定義一個組 GROUP_NAME:user1 user2 user3 ... 13,虛擬主機 有三種實現方案: 基於IP: 爲每一個虛擬主機只是一個IP地址; 基於port: 爲每一個虛擬主機準備至少一個專用port;實踐中不多使用; 基於hostname: 爲每一個虛擬主機準備只是一個專用的hostname; 注意:通常虛擬主機莫與中心主機混用,要使用虛擬主機,先禁用中心主機: 禁用中心主機:註釋DocumentRoot 每一個虛擬主機都有專用配置: <VirtualHost "IP:PORT"> ServerName DocumentRoot "" </VirtualHost> SeverAlias:虛擬主機的別名 ErrorLog CustomLog <Directory> </Directory> 基於IP地址的虛擬主機: <VirtualHost 192.168.1.1:80> ServerName web1.sjie.com DocumentRoot "/vhosts/web1/htdocs" </VirtualHost> <VirtualHost 192.168.1.2:80> ServerName web2.sjie.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost> 基於端口的虛擬主機: <VirtualHost 192.168.1.1:80> ServerName web1.sjie.com DocumentRoot "/vhosts/web1/htdocs" </VirtualHost> <VirtualHost 192.168.1.1:8080> ServerName web2.sjie.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost> 基於主機名的虛擬主機: <VirtualHost 192.168.1.1:80> ServerName web1.sjie.com DocumentRoot "/vhosts/web1/htdocs" </VirtualHost> <VirtualHost 192.168.1.1:80> ServerName web2.sjie.com DocumentRoot "/vhosts/web2/htdocs" </VirtualHost> 14,內置的status頁面 <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 192.168.1.1 </Location> 15,使用mod_deflate模塊壓縮頁面優化傳輸速度 適用場景: (1) 節約帶寬,額外消耗CPU,同事有些老的瀏覽器不支持 (2) 壓縮適於壓縮的資源,例如文件 SetOutputFilter DEFLATE #壓縮的資源類型 AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css DeflateCompressionLevel 9 BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 16,https http over ssl = https 443/tcp ssl:v3 tls:v1 ssl會話簡化: (1)客戶端發送可供選擇的加密方式,並向服務器請求證書 (2)服務器端發送整數以及選定的加密方式給客戶端 (3)客戶端取得整數並進行證書驗證 若是信任給其發證書的CA (a)驗證證書來源的合法性:用CA的公鑰解密證書上數字簽名 (b)驗證證書的內容的合法性 (c)檢查證書的有效期限 (d)檢查整數是否被吊銷 (e)證書中擁有者的名字,與訪問的目標主機要一致 (4)客戶端生成臨時會話密鑰(對稱密鑰),並使用服務器端的公鑰加密此數據發送給服務器,完成密鑰交換 (5)服務用此密鑰加密用戶請求的資源,響應給客戶端 注意:SSL會話是基於IP地址建立,因此單IP僅可使用一個HTTPS擬主機 配置httpd支持https (1)爲服務器申請數字證書 測試:經過私有CA發證書 建立私有CA 在服務器建立證書籤署請求 CA簽證 (2) yum install -y mod_ssl 配置文件:/etc/httpd/conf.d/ssl.conf DocumentRoot ServerName SSLCertificateFile SSLCertificateKeyFile 17,httpd自帶的工具程序 htpasswd:basic認證基於文件實現時,用到的帳號密碼文件生成工具 apachectl:httpd 自帶的服務控制腳本,支持start,stop apxs:由httpd-devel包提供,擴展httpd使用第三方模塊的工具 rotatelogs:日誌滾動工具 suexec:訪問某些有特殊權限配置的資源時,臨時切換至指定用戶運行 ab:Apache Benchmark ab [options] URL -n:總的請求數 -c:模擬的併發數 -k:以持久鏈接模式測試 Http協議和HTTPD的配置 URL:Uniform Resource Locator URL方案:scheme 服務器地址:ip:port 資源路徑: 基本語法: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag> params:參數 http://www.sjie.com/bbs/hello;gender=f query:查詢 http://www.sjie.com/bbs/item.php?username=tom&title=abc frag:錨定 http://www.sjie.com/doc/install/index.html#rpm HTTP協議: HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2.0 HTTP協議,stateless 服務器沒法持續追蹤訪問者來源 cookie,session 報文語法格式: request報文 <method><request-url><version> <headers> <entity-body> response報文: <vsersion><status><reason-phrase> <headers> <entitiy-body> method:請求方法,標明客戶端但願服務器對資源執行的動做 GET,HEAD,POST version: HTTP/<major>.<minor> status: 三位數字,如200,301,302,404,502;標記請求處理過程當中發生的狀況 reason-phrase: 狀態碼所標記的狀態的簡要描述 headers: 每一個請求或響應報文可包含任意個首部,每一個首部都有首部名稱,後面跟一個冒號,然後跟上一個可選空格,接着就是一個指 entity-body:請求時附加的數據或響應時附加的數據 method方法: GET:從服務器獲取一個資源 HEAD:只從服務器獲取文檔的響應首部 POST:向服務器發送要處理的數據 PUT:將請求的主體部分存儲在服務器上 DELETE:請求刪除服務器的某個文檔 TRACE:追蹤請求到達服務器中間通過的代理服務器 OPTIONS:請求服務器返回對指定資源支持使用的請求方法 協議查看或分析工具: tcpdump,tshark,wireshark status(狀態碼) 1xx 100-101 信息提示 2xx 200-206 成功 3xx 300-305 重定向 4xx 400-415 錯誤類信息,客戶端錯誤 5xx 500-505 錯誤類信息,服務器端錯誤 經常使用狀態碼: 200:成功,請求的全部數據經過響應報文的entity-body部分發送 301:請求的URL指向的資源以及被刪除,但在響應報文中經過首部Location指明瞭資源如今所處的新位置:Moved Per 302:與301類似,但在響應報文中經過Location指明資源如今所處臨時新位置:Found 304:客戶端發出了條件式請求,但服務器上的資源未發生改變,則經過響應此響應碼經過客戶端:Not Modified 401:須要輸入帳號和密碼認證方能訪問資源:Unauthorized 403:請求被禁止:Forbidden 404:服務器沒法找到客戶端請求的資源:Not Found 500:服務器內部錯誤:Internal Server Error 502:代理服務器從後端服務器收到了一條僞響應:Bad Gateway 首部分類: 通用首部: Date:報文的建立時間 Connection:鏈接狀態,如keep-alive,close Via:顯示報文通過的中間節點 Cache-Control:控制緩存 請求首部: Accept:經過服務器本身可接受的媒體類型 Accept-Charset: Accept-Encoding:接受編碼格式,如gzip Accept-Language:接受的語言 Client-IP Host:請求的服務器名稱和端口號 Referer:包含當前正在請求的資源的上一級資源 User-Agent:客戶端代理 響應首部: 信息性: Age:響應持續時長 Server:服務器程序軟件名稱和版本 協商首部: Accept-Ranges:服務器可接受的請求範圍類型 Vary:服務器查看的其餘首部列表 安全響應首部: Set-Cookie:向客戶端設置cookie Set-Cookie2: www-Authenticate:來自服務器的對客戶端的質詢認證表單 實體首部: Allow Location Content-Encoding: Content-Language: Content-Length:主體的長度 Content-Location:實體的真正所處位置 Content-Type:主體的對象類型 Etag:實體的擴展標籤 Expires:實體的過時時間 Last-Modified:最後一次修改的時間 擴展首部 Curl命令用法: Curl是基於URL語法在命令行方式下工做的文件傳輸工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELENT,DIVCT,FILE及LDAP等協議。curl支持HTTPS的認證,並HTTP的POST,PUT等方法。 curl [options] [URL] -A/--user-agent <string> 設置用戶代理髮送給服務器 -basic 使用HTTP基本認證 --tcp-nodelay 使用TCP_Nodelay認證 -e/referer <URL> 來源網址 --cacert <file> CA證書(SSL) --compressed 要求返回是壓縮的格式 -H/--header <line>自定義頭信息傳遞給服務器 -I/--head 只顯示響應報文的首部信息 --limit-rate <rate> 設置傳輸速度 -u/--user <user[:passwd]> 設置服務器的用戶和密碼 -0/--http1.0 使用HTTP1.0 elinks [OPTIONS] [URL] --dump:不進入交互模式,把文檔輸出到標準輸出