国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

客戶端和服務(wù)端信息交互模型

這篇具有很好參考價值的文章主要介紹了客戶端和服務(wù)端信息交互模型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

什么是客戶端和服務(wù)端? 客戶端:可以向服務(wù)器發(fā)請求,并接收返回的內(nèi)容進行處理 服務(wù)器端:能夠接收客戶端請求,并且把相關(guān)資源信息返回給客戶端的

當(dāng)用戶在地址欄中輸入網(wǎng)址,到最后看到頁面,中間都經(jīng)歷了什么? 客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端
后面會詳細(xì)解析每個步驟干的事

一、URL地址解析

A: URI / URL /URN

URI(Uniform Resource ldentifier/統(tǒng)一資源標(biāo)志符)
URL(Uniform Resource Locator /統(tǒng)一資源定位符 )
URN(Uniform Resource Name /統(tǒng)一資源名稱)

B:一個完整URL的組成部分和實際意義

例如:http://www.zhufengpeixun.cn:80/stu/index.html?from=wx&1x=1#zhenyu

  1. 協(xié)議(http://): 傳輸協(xié)議就是,能夠把客戶端和服務(wù)器端通信的信息,進行傳輸?shù)墓ぞ?類似于快遞小哥)
  • http 超文本傳輸協(xié)議,除了傳遞文本,還可以傳遞媒體資源文件(或者流文件)及XML格式數(shù)據(jù)
  • https 更加安全的http,一般涉及支付的網(wǎng)站都要采用
  • https協(xié)議 (s:ssl 加密傳輸)
  • ftp 文件傳輸協(xié)議 (一般應(yīng)用于把本地資源上傳到服務(wù)器端)

2.域名 (www.zhufengpeixun.cn)

3.端口號(:80) : 端口號的取值范圍0~65535,用端口號來區(qū)分同一臺服務(wù)器上的不同項目

  • http默認(rèn)端口號: 80
  • https默認(rèn)端口號: 443
  • ftp默認(rèn)端口號: 21
  • 如果項目采用的就是默認(rèn)端口號,我們在書寫地址的時候,不用加端口號,瀏覽器在發(fā)送請求的時候會幫我們默認(rèn)給加上
  1. 請求資源路徑名稱 (/stu/index.htm1)
  • 默認(rèn)的路徑或者名稱 (xxx.com/stu/ 不指定資源名,服務(wù)器會找默認(rèn)的資源,一般默認(rèn)資源名是default.htm1、index.html…當(dāng)然這些可以在服務(wù)器端自己配置)
  • 注意偽URL地址的處理 (URL重寫技術(shù)是為了增加SEO搜索引擎優(yōu)化的,動態(tài)的網(wǎng)址一般不能被搜索引擎收錄,所以我們要把動態(tài)網(wǎng)址靜態(tài)化,此時需要的是重寫URL),例如:https://item.jd.hk/2688449.html => https://item.jd.hk/index.php?id=2688449
  1. 問號傳參信息 (?from=wx&1x=1)
  • 客戶端想把信息傳遞給服務(wù)器,有很多的方式
  • URL地址問號傳參
  • 請求報文傳輸(請求頭和請求主體)也可以不同頁面之間的信息交互,例如:從列表到詳情
  1. HASH值 (#zhenyu)
  • 也能充當(dāng)信息傳輸?shù)姆绞?/li>
  • 錨點定位
  • 基于HASH實現(xiàn)路由管控 (不同的HASH值,展示不同的組件和模塊)

C:特殊字符加密和解密

encodeURI / decodeURI
encodeURIComponent / decodeURIComponent
escape /unescape

/*
 * 請求的地址中如果出現(xiàn)非有效UNICODE編碼內(nèi)容,現(xiàn)代版瀏覽器會默認(rèn)的進行編碼
 *    1. 基于encodeURI編碼,我們可以基于decodeURI解碼,我們一般用encodeURI編碼的是整個URL,這樣整個URL中的特殊字符都會自動編譯
 *    2. encodeURIComponent/decodeURIComponent它相對于encodeURI來說,不用于給整個URL編碼,而是給URL部分信息進行編碼(一般都是問號傳參的值編碼)
 *    客戶端和服務(wù)器端進行信息傳輸?shù)臅r候,如果需要把請求的地址和信息編碼,我們則基于以上兩種方式處理,服務(wù)器端也存在這些方法,這樣就可以統(tǒng)一編碼解碼了
 *    3.客戶端還存在一種方式,針對于中文的編碼方式 escape/unescape,這種方式一般只應(yīng)用于客戶端頁面之間自己的處理,例如:從列表跳轉(zhuǎn)到詳情,我們可以把傳遞的中文信息基于這個編碼,詳情頁獲取編碼后的信息再解碼,再比如我們在客戶端種的cookie信息,如果信息是中文,我們也基于這種辦法編碼...
 */

//=>基于JS實現(xiàn)頁面跳轉(zhuǎn)
link.onclick = function () {
	//=>獲取當(dāng)前頁面的URL地址
	let url = window.location.href;
	//=>跳轉(zhuǎn)頁面
	window.location.href = "http://www.zhufengpeixun.cn/stu/?from=" + encodeURIComponent(url);
	// window.open("http://www.zhufengpeixun.cn/");
}

二、DNS域名解析

DNS服務(wù)器:域名解析服務(wù)器,在服務(wù)器上存儲著 域名<=>服務(wù)器外網(wǎng)IP 的相關(guān)記錄

  • 而我們發(fā)送請求時候所謂的DNS解析,其實就是根據(jù)域名,在DNS服務(wù)器上查找到對應(yīng)服務(wù)器的外網(wǎng)IP

DNS優(yōu)化

  • DNS緩存(一般瀏覽器會在第一次解析后,默認(rèn)建立緩存,時間很短,只有一分鐘左右)
  • 減少DNS解析次數(shù)(一個網(wǎng)站中我們需要發(fā)送請求的域名和服務(wù)器盡可能少即可)
  • DNS預(yù)獲取(dns-prefetch):在頁面加載開始的時候,就把當(dāng)前頁面中需要訪問其他域名(服務(wù)器)的信息進行提前DNS解析,以后加載到具體內(nèi)容部分可以不用解析了
<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8">
	<!-- DNS預(yù)獲取 -->
	<!-- <meta http-equiv="x-dns-prefetch-control" content="on">
	<link rel="dns-prefetch" >
	<link rel="dns-prefetch" >
	<link rel="dns-prefetch" >
	<link rel="dns-prefetch" >
	<link rel="dns-prefetch" > -->
</head>

<body>
	
</body>

</html>

三、建立TCP連接(三次握手)

客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端

四、發(fā)起HTTP請求

  1. HTTP請求報文
    請求報文:所有經(jīng)過傳輸協(xié)議,客戶端傳遞給服務(wù)器的內(nèi)容,都被成為請求報文
  • 起始行
  • 請求頭(請求首部)
  • 請求主體
  1. 強緩存、協(xié)商緩存、數(shù)據(jù)緩存

緩存位置:

  • Memory Cache : 內(nèi)存緩存

  • Disk Cache:硬盤緩存

打開網(wǎng)頁:查找 disk cache 中是否有匹配,如有則使用,如沒有則發(fā)送網(wǎng)絡(luò)請求
普通刷新 (F5):因TAB沒關(guān)閉,因此memory cache是可用的,會被優(yōu)先使用,其次才是disk cache
強制刷新 (Ctrl + F5):瀏覽器不使用緩存,因此發(fā)送的請求頭部均帶有 Cache-control: no-cache,服務(wù)器直接返回 200 和最新內(nèi)容

強緩存【 Expires / Cache-Control】

瀏覽器對于強緩存的處理:根據(jù)第一次請求資源時返回的響應(yīng)頭來確定的

Expires:緩存過期時間,用來指定資源到期的時間(HTTP/1.0)

Cache-Control:cache-control:
max-age=2592000第一次拿到資源后的2592000秒內(nèi)(30天),再次發(fā)送請求,讀取緩存中的信息(HTTP/1.1)

兩者同時存在的話,Cache-Control優(yōu)先級高于Expires

客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端
協(xié)商緩存【 Last-Modified / ETag】

協(xié)商緩存就是強制緩存失效后,瀏覽器攜帶緩存標(biāo)識向服務(wù)器發(fā)起請求,由服務(wù)器根據(jù)緩存標(biāo)識決定是否使用緩存的過程
客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端

數(shù)據(jù)緩存

客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端

五、服務(wù)端處理請求并響應(yīng)

  1. 響應(yīng)報文和HTTP報文
    響應(yīng)報文:所有經(jīng)過傳輸協(xié)議,服務(wù)器返回給客戶端的內(nèi)容,都被成為響應(yīng)報文
  • HTTP狀態(tài)碼
  • 響應(yīng)頭
  • 響應(yīng)主體

HTTP報文:請求報文+響應(yīng)報文=>谷歌瀏覽器F12 =>Network(所有客戶端和服務(wù)器端的交互信息在這里都可以看到) =>點擊某一條信息,在右側(cè)可以看到所有的HTTP報文信息

  1. HTTP狀態(tài)碼
    1~5開頭,三位數(shù)字
  • 200 OK:成功
  • 201 CREATED:一般應(yīng)用于告訴服務(wù)器創(chuàng)建一個新文件,最后服務(wù)器創(chuàng)建成功后返回的狀態(tài)碼
  • 204 NO CONTENT:對于某些請求(例如:PUT或者DELETE),服務(wù)器不想處理,可以返回空內(nèi)容,并且用204狀態(tài)碼告知
  • 301 Moved Permanently:永久重定向(永久轉(zhuǎn)移)
  • 302 Moved Temporarily:臨時轉(zhuǎn)移,很早以前基本上用302來做,但是現(xiàn)在主要用307來處理這個事情,307的意思就是臨時重定向Temporary
    Redirect =>主要用于:服務(wù)器的負(fù)載均衡等
  • 304 Not Modified:設(shè)置HTTP的協(xié)商緩存
  • 400 Bad Request:傳遞給服務(wù)器的參數(shù)錯誤
  • 401 Unauthorized:無權(quán)限訪問
  • 404 Not Found:請求地址錯誤
  • 500 Internal Server Error:未知服務(wù)器錯誤
  • 503 Service Unavailable:服務(wù)器超負(fù)荷
    客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端

六、客戶端接收響應(yīng),并進行渲染

一個需要注意的地方:

<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8">  
	<script>
		let link = document.getElementById('link');
		console.log(link);//null=>拿不到
	</script>
		<!-- 遇到link/img/audio/video等是異步去加載資源信息(瀏覽器分配一個新的線程去加載,主線程繼續(xù)向下渲染頁面),如果遇到的是script或者@import,則讓主線程去加載資源信息(同步),加載完成信息后,再去繼續(xù)渲染頁面 -->
</head>

<body>
	<button id="link">我是按鈕</button>
</body>

</html>



1.瀏覽器渲染頁面的步驟
客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端
2.DOM的重繪和回流
重繪(repaint):元素樣式的改變(但寬高、大小、位置等不變)

  • 如color、visibility、outline、background-color等

回流(reflow):元素的大小或者位置發(fā)生了變化(當(dāng)頁面布局和幾何信息發(fā)生變化的時候),觸發(fā)了重新布局,導(dǎo)致渲染樹重新計算布局和渲染

【注意】:回流一定會觸發(fā)重繪,而重繪不一定會回流

3.前端性能優(yōu)化之:避免DOM的回流
1)放棄傳統(tǒng)操作DOM的時代,基于vue、react開始數(shù)據(jù)影響視圖模式

  • mvvm / mvc / dom diff …

2)分離讀寫操作(現(xiàn)代的瀏覽器都有渲染隊列的機制)

  • offsetTop、offsetWidth、clientTop、clientHeight、scrollTop、getComputedStyle、currentStyle …都會刷新渲染隊列

3)樣式集中改變

  • div.style.cssText = ‘width:20px;height:20px;’
    +div.className = ‘box’;

4)緩存布局信息

  • div.style.left = div.offsetLeft + 1 + ‘px’;
    div.style.top = div.offsetTop + 1 + ‘px’;
    改為:
    var curLeft = div.offsetLeft ;
    var curTop = div.offsetTop ;
    div.style.left = curLeft + 1 + ‘px’;
    div.style.top = curTop + 1 + ‘px’;

5)元素批量修改

  • 文檔碎片:creatDocumentFragment
  • 模板字符串拼接

6)動畫效果應(yīng)用到position屬性為absolute或fixed的元素上(脫離文檔流)

7)CSS3硬件加速(GPU加速)

  • 比起考慮如何減少回流重繪,我們更期望的是,根本不要回流和重繪:transform、opacity、filters…這些屬性會觸發(fā)硬件加速,不會引發(fā)回流和重繪
  • 可能引發(fā)的坑:過多使用會占用大量內(nèi)存,性能消耗嚴(yán)重,有時候會導(dǎo)致字體模糊等

8)犧牲平滑度換取速度

9)避免table布局和使用css的JavaScript表達式

減少DOM的回流:

<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8">
	<title>減少DOM回流-珠峰培訓(xùn)</title>
	<style>
		.box {
			margin: 20px auto;
			width: 100px;
			height: 100px;
			background: red;
		}
	</style>
</head>

<body>
	<div id="box">

	</div>

	<script>
		/* for (let i = 0; i < 10; i++) {
			let span = document.createElement('span');
			span.innerHTML = i;
			box.appendChild(span);
		} */
		/* let str = ``;
		for (let i = 0; i < 10; i++) {
			str += `<span>${i}</span>`;
		}
		box.innerHTML = str; */
		//=>文檔碎片:存儲文檔的容器
		/* let frg = document.createDocumentFragment();
		for (let i = 0; i < 10; i++) {
			let span = document.createElement('span');
			span.innerHTML = i;
			frg.appendChild(span);
		}
		box.appendChild(frg);
		frg = null; */
	</script>


	<script>
		/* 批量設(shè)置樣式 */
		// box.className = 'box';
		// box.style.cssText = "margin: 20px auto;width: 100px;height: 100px;background: red;";
	</script>

	<script>
		/* DOM操作的讀寫分離 */
		//=>現(xiàn)代版瀏覽器都有“渲染隊列”機制:發(fā)現(xiàn)某一行要修改元素的樣式,不立即渲染,而是看看下一行,如果下一行也會改變樣式,則把修改樣式的操作放到“渲染隊列中”...一直到不在是修改樣式的操作后,整體渲染一次,引發(fā)一次回流
		//=>offsetTop、offsetLeft、offsetWidth、offsetHeight、clientTop、clientLeft、clientWidth、clientHeightscrollTop、scrollLeft、scrollWidth、scrollHeight、getComputedStyle、currentStyle....會刷新渲染隊列  

		// box.style.width = '100px';
		// box.style.height = '100px';
		// box.style.background = 'red';
		// box.style.margin = '20px auto';

		// box.style.width = '100px';
		// box.style.height = '100px';
		// box.style.background = 'red';
		// box.style.margin = '20px auto';
		// console.log(box.offsetWidth);
		// console.log(box.offsetHeight);
	</script>
</body>

</html>

七、和服務(wù)端斷開TPC連接(四次揮手)

客戶端和服務(wù)端信息交互模型,JavaScript高級,JS高級,交互,javascript,前端文章來源地址http://www.zghlxwxcb.cn/news/detail-776629.html

到了這里,關(guān)于客戶端和服務(wù)端信息交互模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 當(dāng)在本地,向服務(wù)器發(fā)送信息時,服務(wù)器接受信息返回給客戶端,此時采用多行讀取時,客戶端接收不到Server的信息

    當(dāng)在本地,向服務(wù)器發(fā)送信息時,服務(wù)器接受信息返回給客戶端,此時采用多行讀取時,客戶端接收不到Server的信息

    ? ? 此時的服務(wù)器還在等待輸入,客戶端也在等待服務(wù)器的應(yīng)答,產(chǎn)生死鎖,僵持不下。 經(jīng)過一番嘗試后發(fā)現(xiàn), 當(dāng)使用單行讀取的時候,使用 bufferedWriter.newLine(); 此時就不用關(guān)閉socket的輸出流 , 即socket.shutdownOutput();可以省略,當(dāng)然寫上去也沒錯。 當(dāng)使用多行讀取的時候,

    2024年02月07日
    瀏覽(26)
  • TCP流套接字編程(模擬多個客戶端與服務(wù)器交互)

    TCP流套接字編程(模擬多個客戶端與服務(wù)器交互)

    目錄 一、ServerSocket API 1.1、ServerSocket構(gòu)造方法 1.2、ServerSocket方法 二、Socket API? 2.1、socket構(gòu)造方法? 2.2、socket方法 三、TCP 中的長短連接 四、示例? 實現(xiàn)聊天室功能 五、存在的問題? ServerSocket 是創(chuàng)建TCP服務(wù)端Socket的API。 1.1、ServerSocket構(gòu)造方法 方法簽名 方法說明 ServerSocket

    2024年02月13日
    瀏覽(20)
  • Golang筆記:使用ssh包作為客戶端與SSH服務(wù)器交互

    Golang筆記:使用ssh包作為客戶端與SSH服務(wù)器交互

    Golang中可以使用 golang.org/x/crypto/ssh 包作為SSH客戶端或者SSH服務(wù)使用。這篇文章將簡單記錄下作為客戶端使用的一些內(nèi)容。 Package ssh implements an SSH client and server. 作為客戶端與SSH服務(wù)器操作上來說主要分為三步: 使用一定的參數(shù)與SSH服務(wù)器建立連接得到 Client 對象; 在 Client 之

    2024年02月09日
    瀏覽(27)
  • 《QT從基礎(chǔ)到進階·十六》QT實現(xiàn)客戶端和服務(wù)端的簡單交互

    《QT從基礎(chǔ)到進階·十六》QT實現(xiàn)客戶端和服務(wù)端的簡單交互

    QT版本:5.15.2 VS版本:2019 客戶端程序主要包含三塊:連接服務(wù)器,發(fā)送消息,關(guān)閉客戶端 服務(wù)端程序主要包含三塊:打開消息監(jiān)聽,接收消息并反饋,關(guān)閉服務(wù)端 1、先打開服務(wù)端監(jiān)聽功能 2、點擊客戶端connect連接服務(wù)端 3、在客戶端輸入消息點擊send發(fā)送到服務(wù)端 4、在服務(wù)

    2024年02月03日
    瀏覽(22)
  • 【Java】SpringBoot快速整合WebSocket實現(xiàn)客戶端服務(wù)端相互推送信息

    【Java】SpringBoot快速整合WebSocket實現(xiàn)客戶端服務(wù)端相互推送信息

    目錄 什么是webSocket? webSocket可以用來做什么? WebSocket操作類 一:測試客戶端向服務(wù)端推送消息 1.啟動SpringBoot項目 2.打開網(wǎng)站 3.進行測試消息推送 4.后端進行查看測試結(jié)果 二:測試服務(wù)端向客戶端推送消息 1.接口代碼 2.使用postman進行調(diào)用 3.查看測試結(jié)果 ????????WebSocke

    2024年01月20日
    瀏覽(38)
  • 自己編譯RustDesk,并將自建ID服務(wù)器和key信息寫入客戶端

    自己編譯RustDesk,并將自建ID服務(wù)器和key信息寫入客戶端

    ? ? ? ? 今天總算是把編譯環(huán)境給折騰清楚了,編譯出來了至少能用,但說不上好用,問題還不少,官方的客戶端就是要手工填寫ID服務(wù)器地址和key才可以用,而且還容易被別人白嫖你搭建的服務(wù)器,當(dāng)然如果拿到你編譯后的客戶端,也是存在被白嫖的可能。這方面還沒有找

    2024年04月14日
    瀏覽(33)
  • IO模型之epoll實現(xiàn)服務(wù)器客戶端收發(fā)

    IO模型之epoll實現(xiàn)服務(wù)器客戶端收發(fā)

    ?epoll.ser epoll.cri result ? ? ?

    2024年02月13日
    瀏覽(21)
  • 多進程并發(fā)TCP服務(wù)器模型(含客戶端)(網(wǎng)絡(luò)編程 C語言實現(xiàn))

    摘要 :大家都知道不同pc間的通信需要用到套接字sockte來實現(xiàn),但是服務(wù)器一次只能收到一個客戶端發(fā)來的消息,所以為了能讓服務(wù)器可以接收多個客戶端的連接與消息的傳遞,我們就引入了多進程并發(fā)這樣一個概念。聽名字就可以知道--需要用到進程,當(dāng)然也有多線程并發(fā)

    2024年02月17日
    瀏覽(105)
  • JSBridge原理 - 前端H5與客戶端Native交互

    JSBridge原理 - 前端H5與客戶端Native交互

    在混合應(yīng)用開發(fā)中,一種常見且成熟的技術(shù)方案是將原生應(yīng)用與 WebView 結(jié)合,使得復(fù)雜的業(yè)務(wù)邏輯可以通過網(wǎng)頁技術(shù)實現(xiàn)。實現(xiàn)這種類型的混合應(yīng)用時,就需要解決H5與Native之間的雙向通信。JSBridge 是一種在混合應(yīng)用中實現(xiàn) Web 和原生代碼之間通信的重要機制。 1.1. 混和開發(fā):

    2024年04月12日
    瀏覽(43)
  • 關(guān)于ios客戶端與web網(wǎng)頁js交互

    iOS與JS的交互可以通過以下幾種方式實現(xiàn): 1.使用UIWebView或WKWebView加載Html頁面并在其中添加Javascript腳本,通過WebView的代理方法捕獲Javascript腳本發(fā)出的事件,從而實現(xiàn)與iOS原生代碼的交互。 2.使用JSBridge框架,它提供了一種簡單的方式在Javascript和iOS原生代碼之間進行通信。

    2024年02月10日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包