《Linux高性能服务器编程》学习总结(四)——TCP/IP通信案例:访问Internet上的Web服务器...
第四章????? TCP/IP通信案例:訪問Internet上的Web服務器
HTTP協議是工作在應用層上的協議,其應用十分廣泛,而在進行通信的過程中,經常使用HTTP代理服務器。HTTP代理服務器主要分為:正向代理服務器,反向代理服務器和透明代理服務器。其中,正向代理服務器要求客戶端自己設置代理服務器的地址,客戶的每次請求都直接發送至該代理服務器,并由代理服務器來請求目標資源。比如防火墻內的局域網主機想要訪問Internet或想要訪問一些被屏蔽掉的國外網站,就需要使用正向代理服務器。而反向代理服務器則被設置在服務器端,用來接收用戶請求,然后將請求轉發給內部網絡的服務器,并將內部返回的結果返回給客戶端,這樣,代理服務器對外就表現為一個真實的服務器。透明代理只能設置在網關上,可以看作是正向代理的特殊情況。常用的代理服務器軟件有squid、varnish、nginx等,squid支持所有代理方式,而varnish只支持反向代理。
關于HTTP協議,HTTP協議是為數不多的不以二進制作為首部和數據而是以明文作為首部和數據協議。HTTP工作在TCP之上,所以在傳輸數據之前,需要三次握手來建立TCP連接。下面我們以HTTP首部為例來簡單講解一下HTTP協議,首先是HTTP請求報文:
GET http://www.baidu.com/index.html HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Host: www.baidu.com
Connection: close
在這樣一個請求報文的首部中,首先GET代表請求方法,其余常用請求方法還有HEAD、POST等,后面接的是請求資源的URL,我們來分析一下這個URL,首先的http代表使用的http協議,后面的www.baidu.com代表資源所在的主機,而后是指定資源文件的路徑及名稱。后面的HTTP/1.0代表客戶端使用的HTTP版本號是1.0,但是目前主流的版本號為1.1。下面的User-Agent是客戶端程序,Host代表目標主機名,而HTTP協議規定頭部中必須包含的字段就是主機名。最后的Connection表示連接方式,close代表短連接,此次傳輸完畢連接就可以斷開,而keep-alive代表長連接。在頭部字段的最后應該包含一個空行,只包含<CR><LF>,分別是回車符和換行符。
對于HTTP應答報文:
HTTP/1.0 200 OK
Server: BWS/1.0
Content-Length: 8024
Content-Type: text/html;charset = gbk
第一行是狀態行,200 OK是狀態碼和狀態信息,1xx代表仍有數據要發送,2xx代表成功,3xx代表資源重定向,4xx代表客戶端錯誤,5xx代表服務器錯誤。后面的字段含義顯而易見,值得注意的是在這個應答報文中沒有Cookie,但是我們在平時使用中會用這個字段,接下來我們簡單分析一下Cookie的作用?! ?/p>
前面我們說過HTML協議是無狀態的協議,類似于IP協議,即HTTP報文段之間沒有上下文關系,但是對于現在交互式Web應用程序,這樣的協議就比較落后了,所以我們使用Cookie來唯一標識不同的客戶端,用來保持HTTP的連接狀態,我們瀏覽器內部的自動登錄就是使用Cookie實現的。
轉載于:https://www.cnblogs.com/Torrance/p/8398945.html
總結
以上是生活随笔為你收集整理的《Linux高性能服务器编程》学习总结(四)——TCP/IP通信案例:访问Internet上的Web服务器...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#窗体之间事件传值
- 下一篇: 记linux_centOS安装as86过