關於家養猿類和野生猿類的套路,之前已經簡單的講過一些了。今天我們開始轉入從一個正常人類進化成一隻猿類的具體步驟。納尼?有木有搞錯,居然講的是反向進化!是的,我們開始從學習如何變成一隻猿類,嗯,沒錯,進化成一隻程序猿。
從一個正常人類進化為一隻程序猿,最常規的途徑是經過幾年的系統學習,成本較高,且枯燥無趣,過去一段時間,有一些初學者在問,有沒有快點兒的的辦法,工廠君思索良久,決定自創猿人進化系列,希望能幫助到大家。
換個姿勢上網
三和大神的成神之路其實同樣適合猿類的進化。這個世界上有好多好多的站點,內容豐富多彩,一根根網線的背後,套著無數web程序猿的腦袋。嗯,想要成為猿類的第一步,尤其是web程序猿,還是
首先,我們打開firefox瀏覽器,如果沒有安裝的同學,可以到官網上安裝。輸入一個地址http://www.baidu.com.我們看到了這樣一個界面:
是噠,這就是百度(也稱度娘)的頁面了。嗯,絕大多數情況下,輸入內容,百度一下,絕大多數情況下可以得到想要看到的內容。
今天呢,我們就不要先百度了,直接右鍵,另存為一下。發現多了一個文件和一個文件夾:
右鍵以瀏覽器的方式打開「百度一下,你就知道.html」,和我們瀏覽器訪問到的http://www.baidu.com的內容一致,有木有?
這是為什麼呢?雙擊進入「百度一下,你就知道_files」文件夾,看到以下內容
這都是些什麼鬼?嗯,png和gif還是勉強認識的,打開看看,好像有網頁上的圖片有些相似,但略微不同…… 還有一些.js.css結尾的又是些什麼鬼?用記事本打開「百度一下,你就知道.html」
我勒個去!靈魂三連擊!
這是哪國語言?辣眼睛得很?都是些什麼鬼?
不急不急,要搞懂這些鬼畫符,慢慢來,我們先把.css結尾的文件刪除,再用瀏覽器打開「百度一下,你就知道.html」:
頁面變得好醜陋,我們再把.js文件和圖片刪掉,刷新瀏覽器
我們再把所有的文件刪除掉,刷新頁面:
頁面變得更加醜陋無比!!!
等等,你這波騷操作是搞什麼鬼?猿人工廠君只是帶著大家簡單的地做了下小實驗,告訴大家幾個道理罷了:
我們用瀏覽器訪問站點,其實是用瀏覽器打開了一個遠程的html文件。
html文件是寫給瀏覽器看的,瀏覽器可以將html文件轉換為人類可以識別的網頁。
css文件和圖片還有js文件是和html有關聯的,沒有了他們,瀏覽器打開的內容不再完整,html負責組織css和js的內容,讓網頁的表現形式豐富多彩。
換個姿勢繼續上網
我們繼續用打開瀏覽器,敲擊鍵盤的F12按鈕,點擊「網絡」,
在瀏覽器上再次輸入http://www.baidu.com,繼續訪問,我們看到了好多東西:
仔細的觀察文件這一欄,發現有的文件名,和之前保存過的文件名是一致的,還有一些新的東西是之前木有見過的。我們隨便找一個東西,點擊下看看:
右邊多了好多東西啊,這些是什麼意思呢?哈哈,這些當你成為一隻web工程猿的時候,也許會鄙視工廠君的淺薄,工廠君現在這裡安利一波:
其實這一欄描述的是一次請求的信息,方法顯示的是GET,表示的是一次GET方式的請求,伺服器傻乎乎的,用戶要看什麼東西需要瀏覽器告訴它,它再把用戶需要的東西返回給瀏覽器。
我們看看「響應頭」,響應頭是伺服器返回給客戶端(咱們用瀏覽器訪問站點,瀏覽器就是我們的客戶端了)的一些信息,這些信息都是什麼意思呢?哈哈,點前面那個問號就知道了。比如,cache-control:
保持好奇心,也是進化為猿類的條件之一噢。
我們在看看「請求頭」,請求頭是客戶端發給伺服器的數據,篇幅有限,我們就不再一一點問號了,猿人工廠君直接安利吧:
Accept:瀏覽器可接受的MIME類型。
Accept-Encoding:瀏覽器能夠進行解碼的數據編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間。
Accept-Language:瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。
Cookie:伺服器寫在客戶端的數據,往往加密,用做身份認證。
Host:我們訪問的域名。
Referer:表示用戶從哪個頁面發起的請求。
User-Agent:瀏覽器類型,告訴服務端是用什麼方式來訪問網頁的。
我們還發現有一個叫做請求網址的東西:
https://www.baidu.com/home/page/data/pageserver?errno=7008&errurl=http%3A%2F%2Fdj1.baidu.com%2Fv.gif%3F&_t=1583642568129
這個玩意兒看起來好複雜,有?還有&符號,這又是什麼東西呢?我們點擊參數一欄看看:
有木有發現?後面的內容,使用&分隔的東西和我們截圖裡的看到的東西比較一致?errno=7008,就是告訴伺服器,我有一個叫errno的參數,參數的值是7008!像這樣的東西還有errurl,_t噢。
GET請求是有多個參數的,在url後面增加一個?號,然後參數名=參數值的形式,多個參數以&符號分隔。由於瀏覽器對url的支持是1024位元組,所以get請求的參數長度是有限的,最多不超過1024位元組。
接下來我們點擊百度的登錄:
隨便輸入一個手機號碼和密碼(不用正確),F12打開工具點擊登錄
我們看到方法這一欄有一個post.這個post是什麼東西呢?點上去看看:
熟悉的東西又回來了,有木有?
其實POST也是一種客戶端向服務端發起的請求,url如下:
https://passport.baidu.com/v2/api/?login
嗯。。。url上沒有參數。。。那剛才輸入用戶名和密碼幹什麼?哈哈,我們點擊下參數,
除了這些呢?還有其他的東西,好長好長
我勒個去,好多數據啊,1024位元組放不下吧?
是的,post也是一種客戶端向服務端的請求方式,數據不會出現在url裡,而且長度無限制!
通過以上兩個小實驗我們似乎又搞明白了以下幾個事情:
1. 瀏覽器和伺服器之間的交互是通過請求/響應來完成的,瀏覽器通過url請求伺服器的資源,伺服器給與瀏覽器響應,瀏覽器將服務端的響應展示在頁面上。
2. 伺服器主要的作用是處理瀏覽器發起的請求,客戶端的請求方式主要有兩種方式,get和post.
換一個網站繼續上網
我們打開一個站點https://news.baidu.com/ 。
站點裡有很多的新聞,新聞也有分類,國內、國際、軍事、等等。
我們點擊不同的分類,隨著url的不斷變化,我們看到了不一樣的內容。
我們點擊具體的新聞標題,看到了不同的新聞內容。
這些內容很多,還可能實時變化。那麼有一個問題?這些內容都是從哪裡獲取的?都是以什麼方式存儲的?
我好像聽過一個專門用來分門別類的存取數據的一個軟體——資料庫。
好吧,我就當你知道了,這些東西暫時都是從資料庫裡拿到的吧。
通過剛才的那一波操作,我們似乎又發現了一些事情:
1. 隨著url的變化,服務端響應給了瀏覽器不同的內容。
2. 這些內容分門別類的存放在資料庫中。
3. 伺服器在響應不同的url時,可能根據url的不同,從資料庫中獲取不同的數據。
4. 伺服器將這些數據組織起來,以瀏覽器請求的數據格式(大多數時候是html),返回給瀏覽器。
5. 瀏覽器接收到伺服器返回的數據之後,解析數據,將數據渲染成人類可以識別的頁面!
通過上面的幾個小實驗,關於如何進化成一隻web猿類,至少需要哪些技能,不需要猿人工廠君總結,相信大家已經知道一些了:
1. 必須先換個姿勢上網(不管你說是不是,必須先強行達成共識)
2. html瀏覽器最終識別的就是它了。
3. CSS讓頁面產生很多格式和效果。
4. JavaScript控制頁面動作,改變頁面結構,和服務端做數據交互
5. web伺服器,一個用來處理和響應瀏覽器發出的請求的軟體工具(不求會編寫,但求會使用)
6. 資料庫軟體,用於分門別類的存取數據。
7. 一門服務端程式語言,用於和web伺服器配合處理瀏覽器發起的請求,用於和資料庫交互,這裡推薦的是java,畢竟各大站點都在使用它,發展成熟需求量大,資料齊全,便於學習,不想學java或者覺得java沒前途的同學,可以點右上角的x,只當是聽了一席廢話。