全棧(全站)開發工程師(FULL-STACK):先後端均可以本身獨立完成開發javascript
[前端]php
HTML(5)+ CSS(3)html
JAVASCRIPT(JQ,VUE,REACT)前端
[後端]java
Java (JSP)node
Pythonmysql
Nodelinux
PHPwebpack
C#(.net->dot net) (ASP.NET)nginx
C
...
[數據庫]
mysql
sql server
oracle
mongodb (和node結合緊密的)
...
[自動化]
git / svn
webpack(基於NODE運行的)
服務器部署工具(iis/Apache/nginx...)
linux操做系統
https://insights.stackoverflow.com/survey/2018
前端:客戶端
後端:服務器端
所謂的全棧,其實就是本身能夠實現客戶端和服務端程序的編寫,並且還能夠實現兩端之間的通訊
培養本身的人脈圈,創建本身的影響力
壯大本身的綜合能力
常常參加一些活動
開放分享(作講師分享本身的智慧,寫本身的我的博客作技術分享)
本身作一個技術博客
本地開發(當前項目能夠在本地預覽)
部署到服務器上,讓別人能夠經過域名或者外網訪問
- 購買一臺服務器(阿里雲獨立主機,虛擬服務器等)
https://wanwang.aliyun.com
- 購買域名
- 把本身作的項目傳到服務器上
- 讓域名和服務器關聯(DNS解析:域名解析)
- 在服務器上發佈或部署咱們的項目(iis,nginx,apache...)
作一些推廣(SEO推廣,友情連接交換,技術文章持續更新)
使用FileZilla進行FTP上傳
經典面試題:當咱們在瀏覽器地址中輸入一個URL地址,到最後看到頁面,中間都經歷了哪些事情?
[Request 請求階段]
首先根據客戶端輸入的域名,到DNS服務器上進行反解析(經過服務器找到對應外網IP)
經過找到的外網IP,找到對應的服務器
經過在地址欄中輸入的端口號(沒輸入是由於不一樣協議有本身的默認端口號),找到服務器上發佈的對應的項目
[Response 響應階段]
服務器獲取到請求資源文件的地址,例如:
/books/index.html
,把資源文件中的源代碼找到服務器端會把找到的源代碼返回給客戶端(經過HTTP等傳輸協議反回的)
[瀏覽器自主渲染]
客戶端接收到源代碼後,會交給瀏覽器的內核(渲染引擎)進行渲染,最後有瀏覽器繪製出對應的頁面
客戶端和服務器端交互(通訊)模型
URI:統一資源標識符
URL:統一資源定位
URN: 統一資源名稱
URI = URL + URN
例如:
https://www.haiyang.com/stu/index.html?name=hy&age=6#good
第一部分:傳輸協議
傳輸協議是用來完成客戶端和服務端數據(內容)傳輸的,相似於快遞小哥,負責把客戶和商家的物品來回傳遞
客戶端不只能夠向服務器發送請求,並且還能夠把一些參數傳遞給服務器
服務器端也能夠把內容返回給客戶端
客戶端和服務器端傳輸的內容總稱爲
HTTP報文
,這些報文信息都是基於傳輸協議完成傳輸的,客戶端傳遞給服務器叫作請求(Request),服務器端返回給客戶端叫作響應(Response),request+response兩個階段統稱爲一個HTTP事務(事務:一件完整的事情)
HTTP事務:
- 當客戶端向服務器端發送請求。此時客戶端和服務器端會創建一個傳輸通道(連接通道),傳輸協議就是基於這個通道把信息進行傳輸的
- 當服務器端接收到請求信息,把內容返回給客戶端後,傳輸通道會自動關閉
傳輸協議分類:
http:超文本傳輸協議(客戶端和服務器端傳輸的內容除了文本之外,還能夠傳輸圖片,音頻,視頻等文件流【二進制編碼/BASE64碼】,以及傳輸XML格式的數據等),是目前市場上應用最普遍的傳輸協議
https: http ssl,他比http更加安全,由於數據內容的傳輸通道是通過ssl加密的(他須要在服務器端進行特殊的處理),因此涉及資金類的網站通常都是https協議的
ftp:資源文件傳輸協議,通常用於客戶端把資源文件(不是代碼)上傳到服務器端,或者從服務器端下載一些資源文件(通常ftp傳輸的內容會比http這類協議傳輸的內容多)
起始行
請求起始行
響應起始行
首部(頭)
請求頭:內置請求頭,自定義請求頭
響應頭:內置響應頭,自定義響應頭
通用頭:請求和響應都有的
主體
請求主體
響應主體
請求xxx都是客戶端設置的信息,服務端獲取這些信息
響應xxx都是服務器端設置的信息,客戶端用來接收這些信息
在谷歌瀏覽器控制檯Network選項中,咱們能夠看見當前客戶端和服務器端交互的所有信息
總結:
客戶端傳遞給服務器端數據
- URL問號傳遞參數
- 設置請求頭
- 設置請求主體
服務器端返回給客戶端內容
- 設置響應頭(例如服務器時間)
- 設置響應主體
第二部分:域名
設置域名其實就是給很差記憶的服務器外網ip設置了一個好記的名字
一級域名(頂級域名):qq.com
二級域名:www.qq.com,sports.qq.com,。。。
三級域名:kkk.sports.qq.com
第三部分:端口號
在服務器發佈項目的時候,咱們能夠經過端口號區分當前服務器上的不一樣項目
一臺服務器的端口號取值範圍:0-65535之間,若是電腦上安裝了許多程序,有一些端口號就是被佔用了
一個IP地址的端口能夠有65536(2^16)個,端口號只有整數,範圍是從0 到65535(2^16-1)。
端口有三個類型:
\1. 公認端口(Well Known Ports)是衆所周知的端口號,範圍從0到1023。
\2. 動態端口(Dynamic Ports)範圍是從49152到65535。之因此稱爲動態端口,是由於它 通常不固定分配某種服務,而是動態分配。
\3. 註冊端口(RegisteredPorts)範圍是從1024到49151,分配給用戶進程或應用程序。這些進程主要是用戶選擇安裝的一些應用程序,而不是已經分配好了公認端口的經常使用程序。這些端口在沒有被服務器資源佔用的時候,能夠用用戶端動態選用爲源端口。
HTTP: 默認端口號80
HTTPS:默認端口號443
FTP:默認端口號21
對於上述三個端口號實際上是很重要的,若是被其餘程序佔用,咱們就不能使用了,因此在服務器上通常是禁止安裝其餘程序的
第四部分:請求資源的文件路徑名稱
/boos/index.html
在服務器中發佈項目的時候,咱們通常都會配置一些默認文檔,用戶即便不輸入請求文件的名稱,服務器也會找到默認文檔(通常默認文檔都是 index/default ...)
咱們一般爲了作SEO優化,會把一些動態頁面的地址(xxx.py,xxx.jsp,xxx.php ...)進行僞URL重寫(須要服務器處理的)
例如:
https://item.jd.com/342535.html
不可能 有一個商品就寫一個詳情頁,確定是同一個詳情頁作不一樣的處理
第一種方案:
由後臺語言根據詳情頁模板動態生成具體的詳情頁面
第二種方案:
當前頁面就是一個頁面,例如:detail.html/detail.php,咱們作詳情頁面的時候,開發是按照detail.html?id=787878來開發的。可是這種頁面不方便作SEO優化,此時咱們把真實的地址進行重寫,重寫爲咱們看到的787878.html
第五部分:問號傳參
?name=hy&age=6
把一些值經過xxx=xxx的方式,放在一個URL的末尾,經過?傳遞參數
【做用】
- 在AJAX請求中,咱們能夠經過問號傳遞參數的方式,客戶端把一些信息傳遞給服務器,服務器根據傳遞信息的不同,返回不一樣的數據
// $.ajax(url,{});
// $.get(url,function(){});對於AJAX請求的特殊寫法,原理仍是基於AJAX方法實現的 $.post / $.script
$.ajax({
url: 'getPersonInfo?id=11'
...
});
// 當前案例,咱們傳遞給服務器的編號是多少,服務器就會把對應編號的人員返回
複製代碼
- 消除AJAX請求中GET方式緩存
$.ajax({
url: 'xxx?_=0.3434',
method: 'get'
});
// 咱們會在請求URL末尾追加一個隨機數 _=隨機數,保證每一次請求的URL地址都是不同的,以此來消除GET請求遺留的緩存問題
複製代碼
- 經過URL傳遞參數的方式,能夠實現頁面之間信息的通訊,例如:咱們有兩個頁面A/B,A是列表頁面,B是詳情頁面,點擊A中的某一條信息,進入到惟一的詳情頁B,如何展現不一樣的信息,這種操做就能夠基於URL問號傳遞參數來實現
例如:
在進入到game.html頁面的時候,咱們能夠獲取URL傳遞的參數值,根據傳遞參數值的不同,從服務器端獲取不一樣的數據展現
在列表頁面進行頁面跳轉的時候,咱們須要記住的是跳轉的同時傳遞不一樣的參數值
<a href='game.html?mid=xxx'
第六部分:HASH值
/#xxx
URL末尾傳遞的#號就是HASH值()哈希值
【做用】
- 頁面中錨點定位
- 前端路由(SPA 單頁面開發)