<s id="xcxsa"></s><rp id="xcxsa"></rp>

  • <span id="xcxsa"><pre id="xcxsa"><rt id="xcxsa"></rt></pre></span>
    <dd id="xcxsa"></dd><tbody id="xcxsa"></tbody>
        首頁 Apache教程web教程-http協議入門

        Apache服務安裝和配置

        運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
        領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

        1 Internet和HTTP協議

        web教程-http協議入門插圖

        1.1 Internet 因特網

        因特網是“Internet”的中文譯名,它起源于美國的五角大樓,它的前身是美國國防部高級研究計劃局(ARPA)主持研制的ARPAnet。20世紀50年代末,正處于冷戰時期。當時美國軍方為了自己的計算機網絡在受到襲擊時,即使部分網絡被摧毀,其余部分仍能保持通信聯系,便由美國國防部的高級研究計劃局(ARPA)建設了一個軍用網,叫做“阿帕網”(ARPAnet)。阿帕網于1969年正式啟用,當時僅連接了4臺計算機,供科學家們進行計算機聯網實驗用,這就是因特網的前身。 到70年代,ARPAnet已經有了好幾十個計算機網絡,但是每個網絡只能在網絡內部的計算機之間互聯通信,不同計算機網絡之間仍然不能互通。為此, ARPA又設立了新的研究項目,支持學術界和工業界進行有關的研究,研究的主要內容就是想用一種新的方法將不同的計算機局域網互聯,形成“互聯網”。研究人員稱之為“internetwork”,簡稱“Internet” 在研究實現互聯的過程中,計算機軟件起了主要的作用。1974年,出現了連接分組網絡的協議,其中就包括了TCP/IP協議。TCP/IP有一個非常重要的特點,就是開放性,即TCP/IP的規范和Internet的技術都是公開的。目的就是使任何廠家生產的計算機都能相互通信,使Internet成為一個開放的系統,這正是后來Internet得到飛速發展的重要原因。ARPA在1982年接受了TCP/IP,選定Internet為主要的計算機通信系統,并把其它的軍用計算機網絡都轉換到TCP/IP。1983年,ARPAnet分成兩部分:一部分軍用,稱為MILNET;另一部分仍稱ARPAnet,供民用。

        1986年,美國國家科學基金組織(NSF)將分布在美國各地的5個為科研教育服務的超級計算機中心互聯,并支持地區網絡,形成SNSFnet。1988 年,SNSFnet替代ARPAnet成為Internet的主干網。NSFnet主干網利用了在ARPAnet中已證明是非常成功的TCP/IP技術,準許各大學、政府或私人科研機構的網絡加入。1989年,ARPAnet解散,Internet從軍用轉向民用。

        Internet的發展引起了商家的極大興趣。1992年,美國IBM、MCI、MERIT三家公司聯合組建了一個高級網絡服務公司(SNS),建立了一個新的網絡,叫做SNSnet,成為Internet的另一個主干網。它與SNSFnet不同,NSFnet是由國家出資建立的,而SNSnet則是SNS 公司所有,從而使Internet開始走向商業化。 1995年4月30日,SNSFnet正式宣布停止運作。而此時Internet的骨干網已經覆蓋了全球91個國家,主機已超過400萬臺。在最近,因特網更以驚人的速度向前發展,很快就達到了的規模

        在90年代,超文本標識語言(HTML),即一個可以獲得因特網的圖像信息的超文本因特網協議被采用,使每一個人可以產生自己的圖像頁面(網址),然后成為一個巨大的虛擬超文本網絡的組成部分。這個增強型的因特網又被非正式地稱為萬維網,與此同時產生了數量龐大的新用戶群。于是,許多人用“因特網” 一詞指這個網絡的物理結構,包括連接所有事物的客戶機、服務器和網絡;而用“萬維網”一詞指利用這個網絡可以訪問的所有網站和信息。

        1.2 Internet 和中國

        web教程-http協議入門插圖1

        北京時間1987年9月20日,錢天白建立起一個網絡節點,通過電話撥號連接到國際互聯網,向他的德國朋友發出來自中國的第一封電子郵件:Across the Great Wall we can reach every corner in the world,自此,中國與國際計算機網絡開始連接在一起

        web教程-http協議入門插圖2

        1990年10月, 錢天白教授代表中國正式在國際互聯網絡信息中心的前身DDN-NIC注冊登記了我國的頂級域名CN,并且從此開通了使用中國頂級域名CN的國際電子郵件服務。由于當時中國尚未正式連入Internet,所以委托德國卡爾斯魯厄大學運行CN域名服務器

        1993年3月2日, 中國科學院高能物理研究所租用AT&T公司的國際衛星信道接入美國斯坦福線性加速器中心(SLAC)的64K專線正式開通,專線開通后,美國政府以Internet上有許多科技信息和其它各種資源,不能讓社會主義國家接入為由,只允許這條專線進入美國能源網而不能連接到其它地方。盡管如此,這條專線仍是我國部分連入Internet的第一根專線

        1994年4月20日,中國通過一條64k的國際專線全功能接入國際互聯網,成為國際互聯網大家庭中的第77個成員,正式開啟了互聯網時代。隨后,中科院高能物理研究所推出第一個WWW網站和第一套網頁

        1994年5月21日, 在錢天白教授和德國卡爾斯魯厄大學的協助下,中國科學院計算機網絡信息中心完成了中國國家頂級域名(CN)服務器的設置,改變了中國CN頂級域名服務器一直放在國外的歷史

        1995年5月17日, 第27個世界電信日,郵電部正式宣布,向國內社會開放計算機互聯網接入服務

        1995年5月,北京的中關村南大街上出現了一塊巨大的廣告牌,“中國離信息高速公路還有多遠?向北1500米?!蹦莻€位置就是一家叫“瀛海威”的網絡科教館,瀛海威正是information highway的音譯,作為中國第一個互聯網接入服務商,瀛海威幾乎就是當時互聯網的代名詞

        1996年1月,中國互聯網全國骨干網建成并正式開通,開始提供服務

        1995年4月,馬云湊了兩萬塊錢,成立杭州海博網絡公司,專門給企業做主頁

        1997年5月,丁磊創立網易

        1998年2月, 張朝陽創立搜狐

        1998年6月18日,劉強東在中關村創辦京東公司,代理銷售光磁產品

        1998年11月,馬化騰和張志東成立深圳市騰訊計算機系統有限公司,OICQ開通

        1998年12月, 新浪網成立,關鍵人物:王志東

        1999年5月18日,中國第一家電子商務企業8848.com成立,創始人王峻濤也曾被譽為“中國電子商務教父”。2000年底,調查顯示接近70%的人說上網買東西首選 8848

        2000年1月,李彥宏創建了百度

        2003年5月,阿里巴巴集團在創立淘寶網

        2003年10月, 淘寶網首次推出支付寶服務

        2004年1月,京東多媒體網正式開通,啟用域名www.jdlaser.com

        2010年4月,雷軍創辦小米

        2011年1月21日,騰訊公司推出微信 (WeChat)

        2012年3月,今日頭條由張一鳴于創建

        2012年7月10日,北京小桔科技有限公司成立,滴滴司機端3個月后北京上線

        下一個又是誰呢?

        中國互聯網連接世界

        1885年臺灣建省,首任巡撫劉銘傳派人與福州船政聯系,使用船政電報學堂畢業生為技術人員,于1887年鋪設成功臺灣淡水至福州川石海底電纜,全長117海里。這是我國自行設計安裝的第一條海底電纜。此電纜毀于第二次世界大戰我國于1989年開始投入到全球海底光纜的投資與建設中來,并于1993年實現了首條國際海底光纜的登陸(中日之間C-J海底光纜系統);隨后在1997年,我國參與建設的全球海底光纜系統(FLAG)建成并投入運營,這也是第一條在我國登陸的洲際海底光纜中國連接世界目前共有8條光纜,四個登陸站允許入境,目前我國的登陸站設立在三個城市的四個地區,分別是山東青島登陸站(隸屬中國聯通)、上海崇明登陸站(隸屬中國電信)、上海南匯登陸站(隸屬中國聯通)和廣東汕頭登陸站(隸屬中國電信)

        1.3 跨網絡的主機間通訊

        Socket套接字

        web教程-http協議入門插圖3

        套接字Socket是進程間通信IPC的一種實現,允許位于不同主機(或同一主機)上不同進程之間進行通信和數據交換,SocketAPI出現于1983年,4.2 BSD實現

        在建立通信連接的每一端,進程間的傳輸要有兩個標志:IP地址和端口號,合稱為套接字地址 socket address 客戶機套接字地址定義了一個唯一的客戶進程 服務器套接字地址定義了一個唯一的服務器進程

        web教程-http協議入門插圖4

        Socket API

        封裝了內核中所提供的socket通信相關的系統調用 Socket Domain:根據其所使用的地址 AF_INET:Address Family,IPv4 AF_INET6:IPv6 AF_UNIX:同一主機上不同進程之間通信時使用 Socket Type:根據使用的傳輸層協議 SOCK_STREAM:流,tcp套接字,可靠地傳遞、面向連接 SOCK_DGRAM:數據報,udp套接字,不可靠地傳遞、無連接 SOCK_RAW: 裸套接字,無須tcp或udp,APP直接通過IP包通信

        客戶/服務器程序的套接字函數

        web教程-http協議入門插圖5

        套接字相關的系統調用:

        • socket() 創建一個套接字
        • bind() 綁定IP和端口
        • listen() 監聽
        • accept() 接收請求
        • connect() 請求連接建立
        • write() 發送
        • read() 接收
        • close() 關閉連接

        范例:socket實現

        [root@centos8 ~]#strace -ff -o nc.log nc -l 8000
        [root@centos7 ~]#nc 10.0.0.8 8000

        范例:

        [root@centos8 ~]#dnf -y install man-pages
        [root@centos8 ~]#man 2 socket
        [root@centos8 ~]#man 2 bind
        [root@centos8 ~]#man 2 listen
        [root@centos8 ~]#man 2 accept
        [root@centos8 ~]#man 2 read
        [root@centos8 ~]#man 2 write
        [root@centos8 ~]#man 2 connect
        [root@centos8 ~]#man 2 close

        范例:Socket通信Python 3.6實現

        #需要安裝python3
        [root@centos8 ~]#dnf install python3
        #服務器端tcpserver.py
        #!/usr/bin/python3
        import socket  
        HOST='127.0.0.1'  
        PORT=9527 
        BUFFER=4096  
        sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
        sock.bind((HOST,PORT))  
        sock.listen(3)  
        print('tcpServer listen at: %s:%s\n\r' %(HOST,PORT))  
        while True:  
           client_sock,client_addr=sock.accept()  
           print('%s:%s connect' %client_addr)  
           while True:  
             recv=client_sock.recv(BUFFER)  
             if not recv:  
               client_sock.close()  
               break  
             print('[Client %s:%s said]:%s' %(client_addr[0],client_addr[1],recv.decode()))  
             client_sock.send(b'tcpServer has received your message')  
        sock.close() 
        
        #服務器端tcpclient.py
        #!/usr/bin/python3
        import socket  
        HOST='127.0.0.1'
        PORT=9527 
        BUFFER=4096
        sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
        sock.connect((HOST,PORT)) 
        sock.send(b'hello, tcpServer!,I am tcp client') 
        recv=sock.recv(BUFFER) 
        print('[tcpServer said]: %s' % recv.decode()) 
        sock.close()

        1.4 HTTP 超文本傳輸協議

        1.4.1 瀏覽器訪問網站的過程

        web教程-http協議入門插圖6

        1.4.2 HTTP協議通信過程

        web教程-http協議入門插圖7

        HTTP(HyperText Transfer Protocol,超文本傳輸協議)是一種用于分布式、協作式和超媒體信息系統的應用層協議[1]。HTTP是萬維網的數據通信的基礎設計HTTP最初的目的是為了提供一種遠距離共享知識的方式,借助多文檔進行關聯實現超文本,連成相互參閱的WWW(world wide web,萬維網)

        HTTP的發展是由蒂姆·伯納斯-李(Tim Berners-Lee)于1989年在歐洲核子研究組織(CERN)所發起。HTTP的標準制定由萬維網協會(World Wide Web Consortium,W3C)和互聯網工程任務組(Internet Engineering Task Force,IETF)進行協調,最終發布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定義了HTTP協議中現今廣泛使用的一個版本——HTTP 1.1版

        HTTP服務通信過程

        web教程-http協議入門插圖8

        HTTP協議分層

        web教程-http協議入門插圖9

        1.4.3 HTTP相關技術和術語
        1.4.3.1 WEB開發語言

        http:Hyper Text Transfer Protocol 應用層協議,默認端口: 80/tcp

        WEB前端開發語言:

        • html
        • css
        • javascript

        html

        Hyper Text Markup Language 超文本標記語言,編程語言,主要負責實現頁面的結構

        范例:html 語言

        <html>
        <head>
        <meta http-equiv=Content-Type content="text/html;charset=utf-8">
        <title>HTML語言</title>
        </head>
        <body>
        <img src="http://www.magedu.com/wp-content/uploads/2017/09/logo.png" >
        <h1 style="color:red">歡迎</h1>
        <p><a href=http://www.magedu.com>馬哥教育</a>歡迎你</p>
        </body>
        </html>

        CSS

        Cascading Style Sheet 層疊樣式表, 定義了如何顯示(裝扮) HTML 元素,比如:字體大小和顏色屬性等。樣式通常保存在外部的 .css 文件中。通過僅僅編輯一個簡單的 CSS 文檔,可以同時改變站點中所有頁面的布局和外觀。

        范例 :CSS

        #test.html
        <html>
        <head>
        <meta http-equiv=Content-Type content="text/html;charset=utf-8">
        <link rel="stylesheet" type="text/css" href="mystyle.css" rel="external nofollow" target="_blank" />
        </head>
        <body>
        <h1>這是 heading 1</h1>
        <p>這是一段普通的段落。請注意,該段落的文本是紅色的。在 body 選擇器中定義了本頁面中的默認文本顏色。</p>
        <p class="ex">該段落定義了 class="ex"。該段落中的文本是藍色的。</p>
        </body>
        </html>
        
        #mystyle.css
        body {color:red}
        h1 {color:#00ff00}
        p.ex {color:rgb(0,0,255)}

        Js

        javascript,實現網頁的動畫效果,但實屬于靜態資源

        范例:javascript

        <!DOCTYPE html>
        <html>
        <head>
        <meta http-equiv=Content-Type content="text/html;charset=utf-8">
        </head>
        <body>
        <h2>我的第一段 JavaScript</h2>
        
        <button type="button"
        onclick="document.getElementById('demo').innerHTML = Date()">
        點擊這里來顯示日期和時間
        </button>
        
        <p id="demo"></p>
        </body>
        </html>
        1.4.3.2 MIME

        Multipurpose Internet Mail Extensions 多用途互聯網郵件擴展,對應文件 /etc/mime.types

        MIME格式:major/minor

        參考鏈接:

        https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_Types

        http://www.w3school.com.cn/media/media_mimeref.asp

        范例:

        text/plain 
        text/html  
        text/css 
        image/jpeg 
        image/png 
        video/mp4 
        application/javascript
        1.4.3.3 URI和URL

        URI: Uniform Resource Identifier 統一資源標識,分為URL 和 URN URN:Uniform Resource Naming,統一資源命名 示例: P2P下載使用的磁力鏈接是URN的一種實現 magnet:?xt=urn:btih:660557A6890EF888666 URL:Uniform Resorce Locator,統一資源定位符,用于描述某服務器某特定資源位置 兩者區別:URN如同一個人的名稱,而URL代表一個人的住址。換言之,URN定義某事物的身份,而URL提供查找該事物的方法。URN僅用于命名,而不指定地址

        URL組成

        web教程-http協議入門插圖10

        <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

        scheme:方案,訪問服務器以獲取資源時要使用哪種協議 user:用戶,某些方案訪問資源時需要的用戶名 password:密碼,用戶對應的密碼,中間用:分隔 Host:主機,資源宿主服務器的主機名或IP地址 port:端口,資源宿主服務器正在監聽的端口號,很多方案有默認端口號 path:路徑,服務器資源的本地名,由一個/將其與前面的URL組件分隔 params:參數,指定輸入的參數,參數為名/值對,多個參數,用;分隔 query:查詢,傳遞參數給程序,如數據庫,用?分隔,多個查詢用&分隔 frag:片段,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔

        URL示例

        web教程-http協議入門插圖11

        http://www.magedu.com:8080/images/logo.jpg
        ftp://mage:password@172.16.0.1/pub/linux.ppt
        rtsp://videoserver/video_demo/   #Real Time Streaming Protocol
        gcomm://10.0.2.7,10.0.2.17,10.0.2.27,10.0.2.37
        http://www.magedu.com/bbs/hello;gender=f/send;type=title
        https://list.jd.com/list.html?cat=670,671,672&ev=14_2&sort=sort_totalsales15_desc&trans=1
        http://apache.org/index.html#projects-list
        1.4.3.4 網站訪問量

        網站訪問量統計的重要指標

        • IP(獨立IP):即Internet Protocol,指獨立IP數。一天內來自相同客戶機IP 地址只計算一次,記錄遠程客戶機IP地址的計算機訪問網站的次數,是衡量網站流量的重要指標
        • PV(訪問量): 即Page View, 頁面瀏覽量或點擊量,用戶每次刷新即被計算一次,PV反映的是瀏覽某網站的頁面數,PV與來訪者的數量成正比,PV并不是頁面的來訪者數量,而是網站被訪問的頁面數量
        • UV(獨立訪客):即Unique Visitor,訪問網站的一臺電腦為一個訪客。一天內相同的客戶端只被計算一次??梢岳斫獬稍L問某網站的電腦的數量。網站判斷來訪電腦的身份是通過cookies實現的。如果更換了IP后但不清除cookies,再訪問相同網站,該網站的統計中UV數是不變的

        網站統計http://www.alexa.cn/rank/

        范例:網站訪問統計

        甲乙丙三人在同一臺通過 ADSL 上網的電腦上(中間沒有斷網),分別訪問 www.magedu.com 網站,并且每人共用一個瀏覽器,各個瀏覽了2個頁面,那么網站的流量統計是:
        IP: 1   PV:6    UV:1
        若三人都是ADSL重新撥號后,各瀏覽了2個頁面,則
        IP: 3   PV:6    UV:1

        網站訪問量

        QPS:request per second,每秒請求數

        PV,QPS和并發連接數換算公式

        • QPS= PV * 頁面衍生連接次數/ 統計時間(86400)
        • 并發連接數 =QPS * http平均響應時間

        峰值時間:每天80%的訪問集中在20%的時間里,這20%時間為峰值時間

        峰值時間每秒請求數(QPS)=( 總PV數 *頁面衍生連接次數)*80% ) / ( 每天秒數 * 20% )

        1.4.4 HTTP工作機制

        一次http事務包括:

        • http請求:http request
        • http響應:http response

        Web資源:web resource, 一個網頁由多個資源(文件)構成,打開一個頁面,通常會有多個資源展示出來,但是每個資源都要單獨請求。因此,一個“Web 頁面”通常并不是單個資源,而是一組資源的集合

        資源類型:

        • 靜態文件:無需服務端做出額外處理 文件后綴:.html, .txt, .jpg, .js, .css, .mp3, .avi
        • 動態文件:服務端執行程序,返回執行的結果 文件后綴:.php, .jsp ,.asp

        HTTP連接請求

        web教程-http協議入門插圖12

        串行和并行連接

        web教程-http協議入門插圖13

        串行,持久連接和管道

        web教程-http協議入門插圖14

        提高HTTP連接性能

        • 并行連接:通過多條TCP連接發起并發的HTTP請求
        • 持久連接:keep-alive,重用TCP連接,以消除連接和關閉的時延,以事務個數和時間來決定是否關閉連接
        • 管道化連接:通過共享TCP連接,發起并發的HTTP請求
        • 復用的連接:交替傳送請求和響應報文(實驗階段)
        1.4.5 HTTP 協議版本

        web教程-http協議入門插圖15

        http/0.9:

        1991,原型版本,功能簡陋,只有一個命令GET。GET /index.html ,服務器只能回應HTML格式字符串,不能回應別的格式

        http/1.0

        1996年5月,支持cache, MIME, method 每個TCP連接只能發送一個請求,發送數據完畢,連接就關閉,如果還要請求其他資源,就必須再新建一個連接 引入了POST命令和HEAD命令 頭信息是 ASCII 碼,后面數據可為任何格式。服務器回應時會告訴客戶端,數據是什么格式,即Content-Type字段的作用。這些數據類型總稱為MIME 多用途互聯網郵件擴展,每個值包括一級類型和二級類型,預定義的類型,也可自定義類型, 常見Content-Type值:text/xml image/jpeg audio/mp3

        http/1.1

        1997年1月,引入了持久連接(persistent connection),即TCP連接默認不關閉,可以被多個請求復用,不用聲明Connection: keep-alive。對于同一個域名,大多數瀏覽器允許同時建立6個持久連接引入了管道機制,即在同一個TCP連接里,客戶端可以同時發送多個請求,進一步改進了HTTP協議的效率 新增方法:PUT、PATCH、OPTIONS、DELETE 同一個TCP連接里,所有的數據通信是按次序進行的。服務器只能順序處理回應,前面的回應慢,會有許多請求排隊,造成”隊頭堵塞”(Head-of-line blocking) 為避免上述問題,兩種方法:一是減少請求數,二是同時多開持久連接。

        網頁優化技巧,如合并腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等 HTTP 協議不帶有狀態,每次請求都必須附上所有信息。請求的很多字段都是重復的,浪費帶寬,影響速度

        HTTP1.0和HTTP1.1的區別

        web教程-http協議入門插圖16

        • 緩存處理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為緩存判斷的標準,HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略
        • 帶寬優化及網絡連接的使用,HTTP1.0中,存在一些浪費帶寬的現象,例如:客戶端只是需要某個對象的一部分,而服務器卻將整個對象送過來了,并且不支持斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),方便了開發者自由的選擇以便于充分利用帶寬和連接
        • 錯誤通知的管理,在HTTP1.1中新增24個狀態響應碼,如409(Conflict)表示請求的資源與資源當前狀態沖突;410(Gone)表示服務器上的某個資源被永久性的刪除
        • Host 頭處理,在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL并沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個IP地址。HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)
        • 長連接,HTTP 1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,在HTTP1.1中默認開啟Connection: keep-alive,彌補了HTTP1.0每次請求都要創建連接的缺點

        HTTP1.0和1.1的問題

        • HTTP1.x在傳輸數據時,每次都需要重新建立連接,無疑增加了大量的延遲時間,特別是在移動端更為突出
        • HTTP1.x在傳輸數據時,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份,無法保證數據的安全性
        • HTTP1.x在使用時,header里攜帶的內容過大,增加了傳輸的成本,并且每次請求header基本不怎么變化,尤其在移動端增加用戶流量
        • 雖然HTTP1.x支持了keep-alive,來彌補多次創建連接產生的延遲,但是keep-alive使用多了同樣會給服務端帶來大量的性能壓力,并且對于單個文件被不斷請求的服務(例如圖片存放網站),keep-alive可能會極大的影響性能,因為它在文件被請求之后還保持了不必要的連接很長時間

        HTTPS協議: 為解決安全問題,網景在1994年創建了HTTPS,并應用在網景導航者瀏覽器中。 最初,HTTPS是與SSL一起使用的;在SSL逐漸演變到TLS時(其實兩個是一個東西,只是名字不同而已),最新的HTTPS也由在2000年五月公布的RFC 2818正式確定下來。HTTPS就是安全版的HTTP,目前大型網站基本實現全站HTTPS

        HTTPS特點

        • HTTPS協議需要到CA申請證書,一般免費證書很少,需要交費
        • HTTP協議運行在TCP之上,所有傳輸的內容都是明文,HTTPS運行在SSL/TLS之上,SSL/TLS運行在TCP之上,所有傳輸的內容都經過加密的
        • HTTP和HTTPS使用的是不同的連接方式,端口不同,前者是80,后者是443
        • HTTPS可以有效的防止運營商劫持,解決了防劫持的一個大問題
        • HTTPS 實現過程降低用戶訪問速度,但經過合理優化和部署,HTTPS 對速度的影響還是可以接受的

        SPDY協議

        SPDY:2009年谷歌研發,綜合HTTPS和HTTP兩者有點于一體的傳輸協議,主要特點:

        • 降低延遲,針對HTTP高延遲的問題,SPDY優雅的采取了多路復用(multiplexing)。多路復用通過多個請求stream共享一個tcp連接的方式,解決了HOL blocking的問題,降低了延遲同時提高了帶寬的利用率
        • 請求優先級(request prioritization)。多路復用帶來一個新的問題是,在連接共享的基礎之上有可能會導致關鍵請求被阻塞。SPDY允許給每個request設置優先級,重要的請求就會優先得到響應。比如瀏覽器加載首頁,首頁的html內容應該優先展示,之后才是各種靜態資源文件,腳本文件等加載,可以保證用戶能第一時間看到網頁內容
        • header壓縮。HTTP1.x的header很多時候都是重復多余的。選擇合適的壓縮算法可以減小包的大小和數量
        • 基于HTTPS的加密協議傳輸,大大提高了傳輸數據的可靠性
        • 服務端推送(server push),采用了SPDY的網頁,例如網頁有一個sytle.css的請求,在客戶端收到sytle.css數據的同時,服務端會將sytle.js的文件推送給客戶端,當客戶端再次嘗試獲取sytle.js時就可以直接從緩存中獲取到,不用再發請求了

        HTTP2協議

        http/2.0:2015年,HTTP2.0是SPDY的升級版

        • 頭信息和數據體都是二進制,稱為頭信息幀和數據幀
        • 復用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發送多個請求或回應,且不用按順序一一對應,避免了“隊頭堵塞“,此雙向的實時通信稱為多工(Multiplexing)
        • 引入頭信息壓縮機制(header compression),頭信息使用gzip或compress壓縮后再發送;客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,生成一個索引號,不發送同樣字段,只發送索引號,提高速度
        • HTTP/2 允許服務器未經請求,主動向客戶端發送資源,即服務器推送(server push)

        HTTP2.0和SPDY區別:

        • HTTP2.0 支持明文 HTTP 傳輸,而 SPDY 強制使用 HTTPS
        • HTTP2.0 消息頭的壓縮算法采用 HPACK,而非 SPDY 采用的 DEFLATE
        1.4.6 HTTP 請求訪問的完整過程

        web教程-http協議入門插圖17

        一次完整的http請求處理過程 1、建立連接:接收或拒絕連接請求 2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程

        Web訪問響應模型(Web I/O)

        web教程-http協議入門插圖18

        • 單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應
        • 多進程I/O模型:并行啟動多個進程,每個進程響應一個連接請求
        • 復用I/O結構:啟動一個進程,同時響應N個連接請求
        • 復用的多進程I/O模型:啟動M個進程,每個進程響應N個連接請求,同時接收M*N個請求

        3、處理請求:服務器對請求報文進行解析,并獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理

        常用請求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

        4、訪問資源: 服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行后生成的資源

        5、構建響應報文: 一旦Web服務器識別除了資源,就執行請求方法中描述的動作,并返回響應報文。響應報文中 包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體 1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括: 描述了響應主體MIME類型的Content-Type首部 描述了響應主體長度的Content-Length 實際報文的主體內容 2)URL重定向:web服務構建的響應并非客戶端請求的資源,而是資源另外一個訪問路徑 3)MIME類型: Web服務器要負責確定響應主體的MIME類型。多種配置服務器的方法可將MIME類型與資源管理起來

        • 魔法分類:Apache web服務器可以掃描每個資源的內容,并將其與一個已知模式表(被稱為魔法文件)進行匹配,以決定每個文件的MIME類型。這樣做可能比較慢,但很方便,尤其是文件沒有標準擴展名時
        • 顯式分類:可以對Web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型
        • 類型協商: 有些Web服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web服務器,使其可以通過與用戶的協商來決定使用哪種格式(及相關的MIME類型)”最好”

        6、發送響應報文 Web服務器通過連接發送數據時也會面臨與接收數據一樣的問題。服務器可能有很多條到各個客戶端的連接,有些是空閑的,有些在向服務器發送數據,還有一些在向客戶端回送響應數據。服務器要記錄連接的狀態,還要特別注意對持久連接的處理。對非持久連接而言,服務器應該在發送了整條報文之后,關閉自己這一端的連接。對持久連接來說,連接可能仍保持打開狀態,在這種情況下,服務器要正確地計算Content-Length首部,不然客戶端就無法知道響應什么時候結束

        7、記錄日志 最后,當事務結束時,Web服務器會在日志文件中添加一個條目,來描述已執行的事務

        本文鏈接:http://m.abandonstatusquo.com/34090.html

        Apache服務安裝和配置

        網友評論comments

        發表評論

        您的電子郵箱地址不會被公開。

        暫無評論

        Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
        掃二維碼
        掃二維碼
        返回頂部
        十分钟免费观看视频高清下载