一.HTTP請求訪問的完整過程
1.建立連接
2.接收請求
3.處理請求
4.訪問資源
服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行后生成的資源
靜態資源:不需要服務器二次加工處理,直接將文件交給客戶端
? ? ? ? ? ? ? ? ? txt,jpg,視頻
動態資源:需要服務器二層加工處理后,將加工后的結果傳給客戶端
? ? ? ? ? ? ? ? ? php,java,python
web軟件(apache,nginx)不太擅長處理動態資源
5.構建響應報文
6.發送響應報文(通過網卡發送給客戶端)
7.記錄日志
二.http版本
0.9:只有下載(get)
1.0:上傳,下載,不支持長連接
1.1:支持長連接
三.http協議狀態碼
200:一切正常
301:永久重定向(緩存在主機上)
302:臨時重定向(服務器會再解析)
401:用戶名或密碼驗證錯誤
403:拒絕訪問,客戶端ip或主機名被拉黑
404:請求的文件不存在,客戶端請求的URL路徑有誤,服務器相對應的路徑沒有該網頁文件
500:服務器內部錯誤
?
502:錯誤網關,代理服務器接收到來自后端服務器的無效/錯誤響應導致的
503:服務不可用,服務器過載或正在維護(名機) 導致的
504:網關超時,代理服務器無法在規定的時間內收到后端服務器的響應(響應超時) 導致的
四.http方法
HTTP 支持幾種不同的請求命令,這些命令被稱為 HTTP 方法(HTTP method)。
每條 HTTP 請求報文都包含一個方法, 告訴服務器要執行什么動作,包括:獲取一個頁面,運行一個網關程序,刪除一個文件等。
最常用的獲取資源的方法是 GET、POST、PUT。
HTTP 方法 | 描述 |
GET? ? | 對服務器資源獲取的簡單請求 |
PUT | 向服務器提交數據,以修改數據 |
DELETE | 刪除服務器上的某些資源 |
POST?? | 用于發送包含用戶提交數據的請求 |
HEAD?? | 請求頁面的首部,獲取資源的元信息 |
GET請求會向數據庫發索取數據的請求,從而來獲取信息,該請求不會產生副作用。無論進行多少次操作,結果都是一樣的。
PUT請求是向服務器端發送數據的,從而改變信息,無論進行多少次PUT操作,其結果并沒有不同,與GET不同。
POST請求同PUT請求類似,都是向服務器端發送數據的,但是該請求會改變數據的種類等資源,幾乎目前所有的提交操作都是用POST請求的。
DELETE請求顧名思義,就是用來刪除某一個資源的。
GET 和 POST 比較
GET 方法
從指定的服務器上獲得數據
GET請求能被緩存
GET請求會保存在瀏覽器的瀏覽紀錄里
GET請求有長度的限制
主要用于獲取數據
查詢的字符串會顯示在URL后綴中,不安全
POST 方法
提交數據給指定服務器處理
POST請求不能被緩存
POST請求不會保存在瀏覽器的瀏覽紀錄里
POST請求沒有長度限制
查詢的字符串不會顯示在URL中,比較安全
五.HTTP請求流程分析
用戶在瀏覽器輸入URL訪問時,發起HTTP請求報文,請求中包括請求行、請求頭、請求體,服務器收到請求后返回響應報文,包括狀態行、響應頭、響應體。
請求報文
請求行:請求行由請求方法、URL 以及協議版本三部分組成。
請求頭:請求頭為請求報文添加了一些附加信息,由“名/值”對組成,每行一對,名和值之間使用冒號分隔。
空行:請求頭部的最后會有一個空行,表示請求頭部結束,接下來為請求體,這一行非常重要,必不可少。
請求體:請求體是請求提交的參數,GET 方法已經在 URL 中指明了參數,所以提交時沒有數據。POST 方法提交的參數在請求體中。
常用的請求頭:
請求頭 | 描述 |
Host | 接受請求的服務器地址,可以是Ip:端口號,也可以是域名 |
User-Agent | 發送請求的應用程序名稱 |
Connection | 指定與連接相關的屬性,如Connection:Keep-Alive |
Accept-Charset | 通知服務端可以發送的編碼格式 |
Accept-Encoding | 通知服務端可以發送的數據壓縮格式 |
Accept-Language? | 通知服務端可以發送的語言 |
響應報文
狀態行:狀態行由協議版本,狀態碼,狀態碼描述三部分組成。
響應頭:響應頭與請求頭部類似,為響應報文添加了一些附加信息。
空行:響應頭部的最后會有一個空行,表示響應頭部結束。
響應體:服務器返回的相應 HTML 數據,瀏覽器對其解析后顯示頁面。
常見響應頭:
響應頭 | 描述 |
Server | 服務器應用程序軟件的名稱和版本 |
Content-Type? | 響應正文的類型(描述是圖片還是二進制字符串) |
Content-Length | 響應正文長度 |
Content-Charset | 響應正文使用的編碼 |
Content-Encoding | 響應正文使用的數據壓縮格式 |
Content-Language? | 響應正文使用的語言 |
六.Apache
一.Apache基礎知識
Apache(音譯為阿帕奇)是世界使用排名第一的Web服務器軟件。 它可以運行在幾乎所有廣泛使用的計算機平臺上,由于其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。 快速、可靠并且可通過簡單的API擴充,將Perl/Python等解釋器編譯到服務器中。
Apache HTTP Server 之所以受到眾多企業的青睞,得益于其代碼開源、跨平臺、功能模塊化、可靈活定制等諸多優點,不僅性能穩定,在安全性方面的表現也十分出色。
二.Apache配置文件位置與基操
/etc/httpd/conf/httpd.conf
#主配置文件/etc/httpd/conf.d/*.conf
#子配置文件/etc/httpd/conf.d/conf.modules.d/
#模塊加載的配置文件httpd -t 或 apache2 -t
#檢查配置語法/usr/lib/systemd/system/httpd.service
#服務單元文件/etc/sysconfig/httpd
#配置文件
systemctl enable|disable httpd.servicesystemctl {start|stop|restart|status|reload} httpd.serviceapachectl start|stop|restart|configtest#服務控制和啟動/var/www/html
#站點網頁文檔根目錄/etc/httpd/modules
/usr/lib64/httpd/modules
#模塊文件路徑/usr/sbin/httpd
#主服務器程序文件/etc/httpd/run/httpd.pid
#主進程文件/var/log/httpdaccess_log: #訪問日志
error_log: #錯誤日志#日志文件目錄
三.LAMP架構
1.LAMP平臺概述
LAMP架構是目前成熟的企業網站應用模式之一,指的是協同工作的一整臺系統和相關軟件,能夠提供動態web站點服務及其應用開發環境
LAMP是一個縮寫詞,具體包括Linux操作系統,Apache網站服務器,MySQL數據庫服務器,PHP(或perl,Python)網頁編程語言
2.LAMP各組件主要作用
- (平臺)Linux:作為LAMP架構的基礎,提供用于支撐Web站點的操作系統,能夠與其他三個組件提供更好的穩定性,兼容性(AMP組件也支持Windows、UNIX等平臺) 。
- (前臺)Apache:作為LAMP架構的前端,是一款功能強大,穩定性好的Web服務器程序,該服務器直接面向用戶提供網站訪問,發送網頁,圖片等文件內容。
- (后臺)MySQL:作為LAMP架構的后端,是一款流行的開源關系數據庫系統。在企業網站、業務系統等應用中,各種賬戶信息、產品信息,客戶資料、業務數據等都可以存儲到MySQL數據庫,其他程序可以通過SQL語句來查詢,更改這些信息。
- (中間連接)PHP/Perl/Python:作為三種開發動態網頁的編程語言,負責解釋動態網頁文件,負責溝通Web服務器和數據庫系統以協同工作,并提供Web應用程序的開發和運行環境。其中PHP是一種被廣泛應用的開放源代碼的多用途腳本語言,它可以嵌入到HTML中,尤其適合于Web應用開發。
3.構建LAMP平臺順序
- 在構建LAMP平臺時,各組件的安裝順序依次為Linux,Apache,MySQL,PHP
- 其中Apache和MySQL的安裝并沒有嚴格的順序要求,而PHP環境的安裝一般放到最后,負責溝通web服務器和數據庫系統以協同工作
四.Apache的三種工作模式
Apache的三種工作模式分別是:prefork、worker、event。
1. prefork模式(默認模式)
profork模式實現了一種非線程、預派生的Web服務器,用的是進程去處理請求,所以比較容易消耗內存,但是穩定性好,某個進程出現問題不會影響到其他請求。
2. worker模式
worker模式使用多個子進程,每個子進程有多個線程、由于使用的是線程去處理請求,消耗內存小,適合高流量的請求,但是如果某個進程出現問題,那么這個進程下的線程都會出現問題,即穩定性不是很好。
3. event模式
event模式為了解決keep-alive保持長連接出現的一種工作模式,使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等到超時才會被釋放,所以這個時候就出現了event的工作模式。
?