一、BS、CS是兩隻什麼神獸呢?
BS[Browser Server]:通過瀏覽器訪問服務器;
CS[Client Server]:通過客戶端(PC裝的一些軟件、手機APP)訪問服務器;
二、下面看一下 BS 通訊的整體過程
瀏覽器發送請求—>服務器—->接收請求,並響應—->返回請求內容給瀏覽器
- Web 內容都存儲在 Web 服務器上;
- Web 服務器用的是 HTTP 協議,也會被稱爲 HTTP 服務器;
- 客戶端向服務器發送 HTTP 請求;
- 服務器在 HTTP 響應中返回請求的數據;
三、資源
- Web 服務器是資源的宿主;
- 服務器最簡單的資源就是靜態文件;
- 靜態資源可以包括任意內容:資源包括圖片,文本文件,HTML文件,AVI視頻,JPEG圖片,Word文件等;
- 資源不一定是靜態的,也可以是生成內容的軟件程序。這些動態資源可以根據特定的參數來生成內容;
思考一個問題:從性能角度講,靜態頁面多有利還是動態的多有利?
靜態的頁面好!
因爲靜態頁面內容可以緩存在內存(RAM)裏面,訪問速度快;
四、媒體類型
Content-Type:傳輸文件的類型,格式爲:MIMI類型/具體格式【響應頭信息中】
例如:
jpeg格式圖片:image/jpeg
png格式圖片:image/png
HTML格式文本文檔:text/html
普通的ASCII文本文檔:text/plain
Apple的QuickTime電影爲:video/quicktime類型
微軟的PPT演示文稿:application/vnd.ms-powerpoint類型
五、URI(包括URL和URN)
URL:統一資源定位符(Uniform Resource Locator)
URL 拆解如下:
第一部分:通常是HTTP協議(http://)
第二部分:服務器地址(www.joes-hardware.com)
第三部分:web 服務器上某個資源地址(/specials/saw-blade.gif)
六、事務 = 請求 + 響應,的一個完整事件
七、方法
- 常見的 HTTP 方法:Get、Post
- 簡單說一下Get/Post的區別:
Get: - 讓服務器發送資源(從服務器請求資源);
- 通過URL傳輸數據(明文的,用戶可見,不安全),以(字段)= value 的形式,置於URL末端,並用 “?” 連接,多個請求數據間用 “&” 連接,如:http://127.0.0.1/Test/login.action?name=ajin&password=123456;
- 請求長度會受到限制;
- get方式只能支持ASCII字符,向服務器傳的中文字符可能會亂碼;
Post: - 將客戶端數據提交給服務器網關程序(向服務器發送數據);
- 通過消息體傳輸數據(相對安全,用戶不可見,但是也會被攔截,且沒有加密),如:{‘name’:’ajin’,’password’:’123456’}
- 請求長度沒有受限制,傳文件的時候只能用post;
- post支持標準字符集,可以正確傳遞中文字符;
八、狀態碼
200:OK,通訊正常
301:資源重定向(永久重定向,資源被永遠的移動到另外一個地方)
302:資源重定向(臨時重定向,資源被暫時移動到另外一個地方)
400:請求報文語法有誤,服務器無法識別
401:沒有權限
404:找不到資源(URL錯了,或者文件沒有了)
500:服務器內部錯誤
502:網關錯誤,表現在WEB瀏覽器中給出的頁面反饋
503:服務器正忙
- 關於502報錯,通俗解釋一下:
1.什麼是502 bad gateway 報錯
簡單來說 502 是報錯類型代碼 bad gateway 錯誤的網關。
2.產生錯誤的原因
連接超時,我們向服務器發送請求,由於服務器當前鏈接太多,導致服務器方面無法給於正常的響應,產生此類報錯;
3.解救的辦法
最好的解決辦法當然還是在服務器上做,對大家來說不太可能;
那麼我們有什麼解救的方法呢?
說白了,很簡單,就是——刷新(不是一般的刷新哦)
刷新的原理:很多人可能不知道 刷新也是有兩種的。
所謂刷新其實就是從服務器下載數據到本地的內存或硬盤緩衝區中,
再從本地內存或硬盤中讀取數據到瀏覽器顯示給我們看。
①基本刷新:就是點擊刷新或者使用F5快捷鍵
基本刷新有可能只是從本地的硬盤重新拿取數據到瀏覽器,並不一定重新向服務器發出請求。
大部分用戶很多時候都是這樣刷新的,遇到502報錯的就沒有任何效果。
②從服務器刷新: 如果你重新直接點擊你想要瀏覽的網頁鏈接,你會發現顯示”502 bad gateway”錯誤信息的頁面在點擊鏈接後又可以正常瀏覽。
明白道理了吧?當你點擊你想要瀏覽的網頁鏈接的時候,是會從服務器重新下載數據的。
解決方法就是從服務器上刷新:快捷鍵 ctrl+F5,這樣就是重新向服務器發送請求了。
如果服務器能正常給予你響應你就可以看到頁面了。
思考一個問題:瀏覽器獲取多個資源的時候,是單線程還是多線程的?
是多線程;(對於客戶端來講是多線程的好呀,因爲快呀!!)
但是對於服務器來講,就不一定是一件好事。對於服務器來講是有限制的,因爲線程開的太多會給服務器帶來壓力,有可能把服務器搞死,所以服務器對線程的訪問個數是有限制;
例如IE:同一個域名,支持2個線程;
九、報文
上圖中這個響應主體就是我們看到的 html 網頁;
十、常見HTTP首部字段
通用首部字段(請求報文與響應報文都會使用的首部字段)
Date:創建報文時間
Connection:連接的管理
Cache-Control:緩存的控制
Transfer-Encoding:報文主體的傳輸編碼方式請求首部字段(請求報文會使用的首部字段)
Host:請求資源所在服務器
Accept:可處理的媒體類型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的內容編碼
Accept-Language:可接受的自然語言響應首部字段(響應報文會使用的首部字段)
Accept-Ranges:可接受的字節範圍
Location:令客戶端重新定向到的URI
Server:HTTP服務器的安裝信息實體首部字段(請求報文與響應報文的的實體部分使用的首部字段)
Allow:資源可支持的HTTP方法
Content-Type:實體主類的類型
Content-Encoding:實體主體適用的編碼方式
Content-Language:實體主體的自然語言
Content-Length:實體主體的的字節數
Content-Range:實體主體的位置範圍,一般用於發出部分請求時使用