国产中文字幕免费观看_国产高清精品软男同_日韩免费视频播放_亚洲午夜激情

聚集網(wǎng)(jujiwang.com) - 收錄免費分類目錄信息軟文發(fā)布網(wǎng)址提交
免費加入

利用 location.href 簡化 Web 應(yīng)用程序的調(diào)試 (利用localstorage做一個歌曲收藏)

文章編號:11167時間:2024-09-30人氣:


利用

在開發(fā)和調(diào)試 Web 應(yīng)用程序時,能夠輕松地打印出當(dāng)前 URL 和查詢參數(shù)非常有幫助。這有助于跟蹤應(yīng)用程序的狀態(tài)并隔離問題。

在 JavaScript 中,我們可以使用 location.href 屬性來獲取當(dāng)前 URL。


// 獲取當(dāng)前 URL
const url = location.href;// 輸出當(dāng)前 URL
console.log(`當(dāng)前 URL:${url}`);

我們可以使用 location.search 屬性來獲取查詢參數(shù)。


// 獲取查詢參數(shù)
const searchParams = location.search;// 輸出查詢參數(shù)
console.log(`查詢參數(shù):${searchParams}`);

利用這些特性,我們可以在 Web 應(yīng)用程序中創(chuàng)建簡單的調(diào)試工具。

利用 localStorage 做一個歌曲收藏

下面,我們利用 location.href localStorage 來創(chuàng)建一個簡單的歌曲收藏應(yīng)用。


// 創(chuàng)建一個歌曲收藏
const songs = [];// 將歌曲添加到收藏
function addSong(song) {songs.push(song);localStorage.setItem('songs', JSON.stringify(songs));
}// 從收藏中刪除歌曲
function removeSong(song) {const index = songs.indexOf(song);if (index > -1) {songs.splice(index, 1);localStorage.setItem('songs', JSON.stringify(songs));}
}// 獲取歌曲收藏
function getSongs() {const storedSongs = localStorage.getItem('songs');if (storedSongs) {return JSON.parse(storedSongs);} else {return [];}
}// 打印當(dāng)前 URL 和歌曲收藏
function debug() {console.log(`當(dāng)前 URL:${location.href}`);console.log(`歌曲收藏:${JSON.stringify(getSongs())}`);
}

我們可以通過以下方式使用這個應(yīng)用:

1. 添加歌曲到收藏:調(diào)用 addSong 函數(shù)。 2. 從收藏中刪除歌曲:調(diào)用 removeSong 函數(shù)。 3. 獲取歌曲收藏:調(diào)用 getSongs 函數(shù)。 4. 調(diào)試:調(diào)用 debug 函數(shù)以輸出當(dāng)前 URL 和歌曲收藏。

通過使用 location.href localStorage ,我們創(chuàng)建了一個簡單的工具,可以幫助我們調(diào)試應(yīng)用程序并跟蹤其狀態(tài)。


web前端開發(fā)需要用到哪些知識

應(yīng)該熟練掌握的基礎(chǔ)技能:

java web應(yīng)用如何實現(xiàn)單點登錄

在 B/S 系統(tǒng)中,登錄功能通常都是基于 Cookie 來實現(xiàn)的。 當(dāng)用戶登錄成功后,一般會將登錄狀態(tài)記錄到 Session 中,或者是給用戶簽發(fā)一個 Token,無論哪一種方式,都需要在客戶端保存一些信息(Session ID 或 Token ),并要求客戶端在之后的每次請求中攜帶它們。 在這樣的場景下,使用 Cookie 無疑是最方便的,因此我們一般都會將 Session 的 ID 或 Token 保存到 Cookie 中,當(dāng)服務(wù)端收到請求后,通過驗證 Cookie 中的信息來判斷用戶是否登錄 。

單點登錄(Single Sign On, SSO)是指在同一帳號平臺下的多個應(yīng)用系統(tǒng)中,用戶只需登錄一次,即可訪問所有相互信任的應(yīng)用系統(tǒng)。 舉例來說,網(wǎng)絡(luò)貼吧和網(wǎng)絡(luò)地圖是網(wǎng)絡(luò)公司旗下的兩個不同的應(yīng)用系統(tǒng),如果用戶在網(wǎng)絡(luò)貼吧登錄過之后,當(dāng)他訪問網(wǎng)絡(luò)地圖時無需再次登錄,那么就說明網(wǎng)絡(luò)貼吧和網(wǎng)絡(luò)地圖之間實現(xiàn)了單點登錄。

單點登錄的本質(zhì)就是在多個應(yīng)用系統(tǒng)中共享登錄狀態(tài)。 如果用戶的登錄狀態(tài)是記錄在 Session 中的,要實現(xiàn)共享登錄狀態(tài),就要先共享 Session,比如可以將 Session 序列化到 Redis 中,讓多個應(yīng)用系統(tǒng)共享同一個 Redis,直接讀取 Redis 來獲取 Session。

當(dāng)然僅此是不夠的,因為不同的應(yīng)用系統(tǒng)有著不同的域名,盡管 Session 共享了,但是由于 Session ID 是往往保存在瀏覽器 Cookie 中的,因此存在作用域的限制,無法跨域名傳遞,也就是說當(dāng)用戶在 中登錄后,Session ID 僅在瀏覽器訪問 時才會自動在請求頭中攜帶,而當(dāng)瀏覽器訪問 時,Session ID 是不會被帶過去的。 實現(xiàn)單點登錄的關(guān)鍵在于,如何讓 Session ID(或 Token)在多個域中共享。

實現(xiàn)方式一:父域 Cookie

在將具體實現(xiàn)之前,我們先來聊一聊 Cookie 的作用域。

Cookie 的作用域由 domain 屬性和 path 屬性共同決定。 domain 屬性的有效值為當(dāng)前域或其父域的域名/IP地址,在 Tomcat 中,domain 屬性默認(rèn)為當(dāng)前域的域名/IP地址。 path 屬性的有效值是以“/”開頭的路徑,在 Tomcat 中,path 屬性默認(rèn)為當(dāng)前 Web 應(yīng)用的上下文路徑。

如果將 Cookie 的 domain 屬性設(shè)置為當(dāng)前域的父域,那么就認(rèn)為它是父域 Cookie。 Cookie 有一個特點,即父域中的 Cookie 被子域所共享,換言之,子域會自動繼承父域中的Cookie。

利用 Cookie 的這個特點,不難想到,將 Session ID(或 Token)保存到父域中不就行了。 沒錯,我們只需要將 Cookie 的 domain 屬性設(shè)置為父域的域名(主域名),同時將 Cookie 的 path 屬性設(shè)置為根路徑,這樣所有的子域應(yīng)用就都可以訪問到這個 Cookie 了。 不過這要求應(yīng)用系統(tǒng)的域名需建立在一個共同的主域名之下,如 和 ,它們都建立在 這個主域名之下,那么它們就可以通過這種方式來實現(xiàn)單點登錄。

總結(jié):此種實現(xiàn)方式比較簡單,但不支持跨主域名。

實現(xiàn)方式二:認(rèn)證中心

我們可以部署一個認(rèn)證中心,認(rèn)證中心就是一個專門負(fù)責(zé)處理登錄請求的獨立的 Web 服務(wù)。

用戶統(tǒng)一在認(rèn)證中心進(jìn)行登錄,登錄成功后,認(rèn)證中心記錄用戶的登錄狀態(tài),并將 Token 寫入 Cookie。 (注意這個 Cookie 是認(rèn)證中心的,應(yīng)用系統(tǒng)是訪問不到的。 )

應(yīng)用系統(tǒng)檢查當(dāng)前請求有沒有 Token,如果沒有,說明用戶在當(dāng)前系統(tǒng)中尚未登錄,那么就將頁面跳轉(zhuǎn)至認(rèn)證中心。 由于這個操作會將認(rèn)證中心的 Cookie 自動帶過去,因此,認(rèn)證中心能夠根據(jù) Cookie 知道用戶是否已經(jīng)登錄過了。 如果認(rèn)證中心發(fā)現(xiàn)用戶尚未登錄,則返回登錄頁面,等待用戶登錄,如果發(fā)現(xiàn)用戶已經(jīng)登錄過了,就不會讓用戶再次登錄了,而是會跳轉(zhuǎn)回目標(biāo) URL ,并在跳轉(zhuǎn)前生成一個 Token,拼接在目標(biāo) URL 的后面,回傳給目標(biāo)應(yīng)用系統(tǒng)。

應(yīng)用系統(tǒng)拿到 Token 之后,還需要向認(rèn)證中心確認(rèn)下 Token 的合法性,防止用戶偽造。 確認(rèn)無誤后,應(yīng)用系統(tǒng)記錄用戶的登錄狀態(tài),并將 Token 寫入 Cookie,然后給本次訪問放行。 (注意這個 Cookie 是當(dāng)前應(yīng)用系統(tǒng)的,其他應(yīng)用系統(tǒng)是訪問不到的。 )當(dāng)用戶再次訪問當(dāng)前應(yīng)用系統(tǒng)時,就會自動帶上這個 Token,應(yīng)用系統(tǒng)驗證 Token 發(fā)現(xiàn)用戶已登錄,于是就不會有認(rèn)證中心什么事了。

這里順便介紹兩款認(rèn)證中心的開源實現(xiàn):

Apereo CAS 是一個企業(yè)級單點登錄系統(tǒng),其中 CAS 的意思是”Central Authentication Service“。 它最初是耶魯大學(xué)實驗室的項目,后來轉(zhuǎn)讓給了 JASIG 組織,項目更名為 JASIG CAS,后來該組織并入了Apereo 基金會,項目也隨之更名為 Apereo CAS。

XXL-SSO 是一個簡易的單點登錄系統(tǒng),由大眾點評工程師許雪里個人開發(fā),代碼比較簡單,沒有做安全控制,因而不推薦直接應(yīng)用在項目中,這里列出來僅供參考。

總結(jié):此種實現(xiàn)方式相對復(fù)雜,支持跨域,擴(kuò)展性好,是單點登錄的標(biāo)準(zhǔn)做法。

實現(xiàn)方式三:LocalStorage 跨域

前面,我們說實現(xiàn)單點登錄的關(guān)鍵在于,如何讓 Session ID(或 Token)在多個域中共享。

父域 Cookie 確實是一種不錯的解決方案,但是不支持跨域。那么有沒有什么奇淫技巧能夠讓 Cookie 跨域傳遞呢?

很遺憾,瀏覽器對 Cookie 的跨域限制越來越嚴(yán)格。 Chrome 瀏覽器還給 Cookie 新增了一個 SameSite 屬性,此舉幾乎禁止了一切跨域請求的 Cookie 傳遞(超鏈接除外),并且只有當(dāng)使用 HTTPs 協(xié)議時,才有可能被允許在 AJAX 跨域請求中接受服務(wù)器傳來的 Cookie。

不過,在前后端分離的情況下,完全可以不使用 Cookie,我們可以選擇將 Session ID (或 Token )保存到瀏覽器的 LocalStorage 中,讓前端在每次向后端發(fā)送請求時,主動將 LocalStorage 的數(shù)據(jù)傳遞給服務(wù)端。 這些都是由前端來控制的,后端需要做的僅僅是在用戶登錄成功后,將 Session ID (或 Token )放在響應(yīng)體中傳遞給前端。

在這樣的場景下,單點登錄完全可以在前端實現(xiàn)。 前端拿到 Session ID (或 Token )后,除了將它寫入自己的 LocalStorage 中之外,還可以通過特殊手段將它寫入多個其他域下的 LocalStorage 中。

原文鏈接:前端通過 iframe+postMessage() 方式,將同一份 Token 寫入到了多個域下的 LocalStorage 中,前端每次在向后端發(fā)送請求之前,都會主動從 LocalStorage 中讀取 Token 并在請求中攜帶,這樣就實現(xiàn)了同一份 Token 被多個域所共享。

總結(jié):此種實現(xiàn)方式完全由前端控制,幾乎不需要后端參與,同樣支持跨域。

補充:域名分級

從專業(yè)的角度來說(根據(jù)《計算機(jī)網(wǎng)絡(luò)》中的定義),、 為一級域名(也稱頂級域名),、 為二級域名,、 為三級域名,以此類推,N 級域名就是 N-1 級域名的直接子域名。

從使用者的角度來說,一般把可支持獨立備案的主域名稱作一級域名,如 、 皆可稱作一級域名,在主域名下建立的直接子域名稱作二級域名,如 為二級域名。

axios如何利用promise無痛刷新token的實現(xiàn)方法

需求最近遇到個需求:前端登錄后,后端返回token和token有效時間,當(dāng)token過期時要求用舊token去獲取新的token,前端需要做到無痛刷新token,即請求刷新token時要做到用戶無感知。 需求解析當(dāng)用戶發(fā)起一個請求時,判斷token是否已過期,若已過期則先調(diào)refreshToken接口,拿到新的token后再繼續(xù)執(zhí)行之前的請求。 這個問題的難點在于:當(dāng)同時發(fā)起多個請求,而刷新token的接口還沒返回,此時其他請求該如何處理?接下來會循序漸進(jìn)地分享一下整個過程。 實現(xiàn)思路由于后端返回了token的有效時間,可以有兩種方法:方法一:在請求發(fā)起前攔截每個請求,判斷token的有效時間是否已經(jīng)過期,若已過期,則將請求掛起,先刷新token后再繼續(xù)請求。 方法二:不在請求前攔截,而是攔截返回后的數(shù)據(jù)。 先發(fā)起請求,接口返回過期后,先刷新token,再進(jìn)行一次重試。 兩種方法對比方法一 優(yōu)點: 在請求前攔截,能節(jié)省請求,省流量。 缺點: 需要后端額外提供一個token過期時間的字段;使用了本地時間判斷,若本地時間被篡改,特別是本地時間比服務(wù)器時間慢時,攔截會失敗。 PS:token有效時間建議是時間段,類似緩存的MaxAge,而不要是絕對時間。 當(dāng)服務(wù)器和本地時間不一致時,絕對時間會有問題。 方法二優(yōu)點:不需額外的token過期字段,不需判斷時間。 缺點: 會消耗多一次請求,耗流量。 綜上,方法一和二優(yōu)缺點是互補的,方法一有校驗失敗的風(fēng)險(本地時間被篡改時,當(dāng)然一般沒有用戶閑的蛋疼去改本地時間的啦),方法二更簡單粗暴,等知道服務(wù)器已經(jīng)過期了再重試一次,只是會耗多一個請求。 在這里博主選擇了 方法二。 實現(xiàn)這里會使用axios來實現(xiàn),方法一是請求前攔截,所以會使用()這個方法;而方法二是請求后攔截,所以會使用()方法。 封裝axios基本骨架首先說明一下,項目中的token是存在localStorage中的。 基本骨架:import axios from axios// 從localStorage中獲取tokenfunction getLocalToken () { const token = (token) return token}// 給實例添加一個setToken方法,用于登錄后將最新token動態(tài)添加到header,同時將token保存在localStorage中 = (token) => { [X-Token] = token (token, token)}// 創(chuàng)建一個axios實例const instance = ({ baseURL: /api, timeout: , headers: { Content-Type: application/json, X-Token: getLocalToken() // headers塞token }})// 攔截返回的數(shù)據(jù)(response => { // 接下來會在這里進(jìn)行token過期的邏輯處理 return response}, error => { return (error)})export default instance這個是項目中一般的axios實例的封裝,創(chuàng)建實例時,將本地已有的token放進(jìn)header,然后export出去供調(diào)用。 接下來就是如何攔截返回的數(shù)據(jù)啦。 攔截實現(xiàn)后端接口一般會有一個約定好的數(shù)據(jù)結(jié)構(gòu),如:{code: 1234, message: token過期, data: {}}如我這里,后端約定當(dāng)code === 1234時表示token過期了,此時就要求刷新token。 (response => { const { code } = if (code === 1234) { // 說明token過期了,刷新token return refreshToken()(res => { // 刷新token成功,將最新的token更新到header中,同時保存在localStorage中 const { token } = (token) // 獲取當(dāng)前失敗的請求 const config = // 重置一下配置 [X-Token] = token = // url已經(jīng)帶上了/api,避免出現(xiàn)/api/api的情況 // 重試當(dāng)前請求并返回promise return instance(config) })(res => { (refreshtoken error =>, res) //刷新token失敗,神仙也救不了了,跳轉(zhuǎn)到首頁重新登錄吧 = / }) } return response}, error => { return (error)})function refreshToken () { // instance是當(dāng)前中已創(chuàng)建的axios實例 return (/refreshtoken)(res => )}這里需要額外注意的是,就是原請求的配置,但這個是已經(jīng)處理過了的,已經(jīng)帶上了baseUrl,因此重試時需要去掉,同時token也是舊的,需要刷新下。 以上就基本做到了無痛刷新token,當(dāng)token正常時,正常返回,當(dāng)token已過期,則axios內(nèi)部進(jìn)行一次刷新token和重試。 對調(diào)用者來說,axios內(nèi)部的刷新token是一個黑盒,是無感知的,因此需求已經(jīng)做到了。 問題和優(yōu)化上面的代碼還是存在一些問題的,沒有考慮到多次請求的問題,因此需要進(jìn)一步優(yōu)化。 如何防止多次刷新token如果refreshToken接口還沒返回,此時再有一個過期的請求進(jìn)來,上面的代碼就會再一次執(zhí)行refreshToken,這就會導(dǎo)致多次執(zhí)行刷新token的接口,因此需要防止這個問題。 我們可以在中用一個flag來標(biāo)記當(dāng)前是否正在刷新token的狀態(tài),如果正在刷新則不再調(diào)用刷新token的接口。 // 是否正在刷新的標(biāo)記let isRefreshing = (response => { const { code } = if (code === 1234) { if (!isRefreshing) { isRefreshing = true return refreshToken()(res => { const { token } = (token) const config = [X-Token] = token = return instance(config) })(res => { (refreshtoken error =>, res) = / })(() => { isRefreshing = false }) } } return response}, error => { return (error)})這樣子就可以避免在刷新token時再進(jìn)入方法了。 但是這種做法是相當(dāng)于把其他失敗的接口給舍棄了,假如同時發(fā)起兩個請求,且?guī)缀跬瑫r返回,第一個請求肯定是進(jìn)入了refreshToken后再重試,而第二個請求則被丟棄了,仍是返回失敗,所以接下來還得解決其他接口的重試問題。 同時發(fā)起兩個或以上的請求時,其他接口如何重試兩個接口幾乎同時發(fā)起和返回,第一個接口會進(jìn)入刷新token后重試的流程,而第二個接口需要先存起來,然后等刷新token后再重試。 同樣,如果同時發(fā)起三個請求,此時需要緩存后兩個接口,等刷新token后再重試。 由于接口都是異步的,處理起來會有點麻煩。 當(dāng)?shù)诙€過期的請求進(jìn)來,token正在刷新,我們先將這個請求存到一個數(shù)組隊列中,想辦法讓這個請求處于等待中,一直等到刷新token后再逐個重試清空請求隊列。 那么如何做到讓這個請求處于等待中呢?為了解決這個問題,我們得借助Promise。 將請求存進(jìn)隊列中后,同時返回一個Promise,讓這個Promise一直處于Pending狀態(tài)(即不調(diào)用resolve),此時這個請求就會一直等啊等,只要我們不執(zhí)行resolve,這個請求就會一直在等待。 當(dāng)刷新請求的接口返回來后,我們再調(diào)用resolve,逐個重試。 最終代碼:// 是否正在刷新的標(biāo)記let isRefreshing = false// 重試隊列,每一項將是一個待執(zhí)行的函數(shù)形式const requests = [](response => { const { code } = if (code === 1234) { const config = if (!isRefreshing) { isRefreshing = true return refreshToken()(res => { const { token } = (token) [X-Token] = token = // 已經(jīng)刷新了token,將所有隊列中的請求進(jìn)行重試 (cb => cb(token)) return instance(config) })(res => { (refreshtoken error =>, res) = / })(() => { isRefreshing = false }) } else { // 正在刷新token,返回一個未執(zhí)行resolve的promise return new Promise((resolve) => { // 將resolve放進(jìn)隊列,用一個函數(shù)形式來保存,等token刷新后直接執(zhí)行 ((token) => { = [X-Token] = token resolve(instance(config)) }) }) } } return response}, error => { return (error)})這里可能比較難理解的是requests這個隊列中保存的是一個函數(shù),這是為了讓resolve不執(zhí)行,先存起來,等刷新token后更方便調(diào)用這個函數(shù)使得resolve執(zhí)行。 至此,問題應(yīng)該都解決了。 最后完整代碼import axios from axios// 從localStorage中獲取tokenfunction getLocalToken () { const token = (token) return token}// 給實例添加一個setToken方法,用于登錄后將最新token動態(tài)添加到header,同時將token保存在localStorage中 = (token) => { [X-Token] = token (token, token)}function refreshToken () { // instance是當(dāng)前中已創(chuàng)建的axios實例 return (/refreshtoken)(res => )}// 創(chuàng)建一個axios實例const instance = ({ baseURL: /api, timeout: , headers: { Content-Type: application/json, X-Token: getLocalToken() // headers塞token }})// 是否正在刷新的標(biāo)記let isRefreshing = false// 重試隊列,每一項將是一個待執(zhí)行的函數(shù)形式const requests = [](response => { const { code } = if (code === 1234) { const config = if (!isRefreshing) { isRefreshing = true return refreshToken()(res => { const { token } = (token) [X-Token] = token = // 已經(jīng)刷新了token,將所有隊列中的請求進(jìn)行重試 (cb => cb(token)) return instance(config) })(res => { (refreshtoken error =>, res) = / })(() => { isRefreshing = false }) } else { // 正在刷新token,將返回一個未執(zhí)行resolve的promise return new Promise((resolve) => { // 將resolve放進(jìn)隊列,用一個函數(shù)形式來保存,等token刷新后直接執(zhí)行 ((token) => { = [X-Token] = token resolve(instance(config)) }) }) } } return response}, error => { return (error)})export default instance

后端允許跨域怎么設(shè)置(后端配置允許跨域無效)

跨域的幾種方法

瀏覽器出于安全方面的考慮,只允許客戶端與本域(同協(xié)議、同域名、同端口,三者缺一不可)下的接口交互。 不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對方的資源,這被稱為同源策略。

而有時候,我們不得不在一個客戶端下訪問不同域中的資源,于是需要用到一些方法來避開瀏覽器的同源策略,這些方法被稱為跨域。

實現(xiàn)跨域有如下幾種方法:

JSONP(JSONwithPadding)是數(shù)據(jù)格式JSON的一種使用模式,可以使網(wǎng)頁實現(xiàn)跨域請求。 其原理主要利用了HTML的script標(biāo)簽。 由于script是采用開放策略,通過設(shè)置src引入不同域下的資源,所以可以通過script實現(xiàn)跨域,該方法需要后端支持。 jsonp跨域的實現(xiàn)步驟如下:

下面來做個演示,首先為演示方便,將系統(tǒng)的hosts做如下修改:

以上例子最終實現(xiàn)了由到的跨域。 應(yīng)注意的是,因為script只能發(fā)送GET請求,所以jsonp只能實現(xiàn)GET請求的跨域。 如果希望能實現(xiàn)其他請求的跨域,就可以用接下來介紹的一種方法——CORS。

CORS(全稱為:Cross-OriginResouceSharing)跨域資源共享,是一種通過ajax跨域請求資源的方法。 瀏覽器將CORS請求分為兩大類,簡單請求(simplerequest)和非簡單請求(not-so-simplerequest,瀏覽器對這兩種請求的處理方式不一樣。 如果請求滿足以下兩個條件,則為簡單請求。

簡單請求的實現(xiàn)方式即當(dāng)用XMLHttpRequest發(fā)請求時,瀏覽器如果發(fā)現(xiàn)該請求不符合同源策略,會給該請求加上一個請求頭origin,origin用來說明本次請求來自哪個源(協(xié)議+域名+端口)。 如果origin指定的源不在后臺允許范圍內(nèi),后臺會返回一個正常的HTTP響應(yīng),然后瀏覽器會發(fā)現(xiàn)該響應(yīng)頭部信息不包含Access-Control-Allow-Origin字段,然后拋出一個錯誤,該錯誤被XMLHttpRequest的onerror函數(shù)捕獲,響應(yīng)被駁回,但因為該錯誤無法通過狀態(tài)碼識別,所以HTTP回應(yīng)的狀態(tài)碼還是200。 如果origin在后臺允許范圍內(nèi),則服務(wù)器返回的響應(yīng),會包含Access-Control-Allow-Origin:Origin(指定的源)信息,瀏覽器此時不會拋錯,響應(yīng)能正常處理。

非簡單請求是是請求方法為PUT或DELETE,又或者Content-Type為application/json的對服務(wù)器有特殊要求的請求。 非簡單請求的CORS請求,會在正式通信前增加一次HTTP查詢,稱為預(yù)檢(preflight),詢問服務(wù)器當(dāng)前網(wǎng)頁所在域名是否在服務(wù)器的許可名單中,如果在,則發(fā)出正式的XMLHttpRequest,之后就與簡單請求一樣,不在則報錯。

依舊用上面的例子。

最終實現(xiàn)的效果與第一個jsonp的例子一樣。

還有一種方式,就是通過降域來實現(xiàn)跨域。 即通過設(shè)置的方式,將兩個域名的domain設(shè)置為一個,如對于和,可以通過js設(shè)置=,實現(xiàn)跨域。

做個演示,假設(shè)在下有一個文件,其中中有一個iframe,它的src為。

用降域方法實現(xiàn)跨域操作簡單,但是有一些缺點。 比如域名只能往下設(shè)置,不能回去,比如從回到。 同時如果一個子域名被攻擊,多個被降域的域名都會被連帶攻擊,有很大的安全風(fēng)險。

postMessage是一個webAPI,可以實現(xiàn)跨域通信。 ()被調(diào)用時,會在所有頁面腳本執(zhí)行完畢后,向目標(biāo)窗口派發(fā)一個MessageEvent消息。 語法如下:

MessageEvent具有如下屬性:

用一個與上面降域類似的例子來做演示。 同樣有兩個頁面和,中的iframe的src指向。

最終實現(xiàn)與通信效果如下:

使用postMessage方法應(yīng)注意的是,如果不希望從其他網(wǎng)站接收message,那么不要為message事件添加任何監(jiān)聽器。 如果確實希望接收其他網(wǎng)站的message,那么應(yīng)該始終使用origin和source屬性來驗證發(fā)件人的身份,以免被惡意的網(wǎng)站攻擊。

以上就是幾種常見的跨域方法,各有優(yōu)劣,且各自都有一定的安全問題,在日常應(yīng)用中,需要有針對性的使用,對可能的安全風(fēng)險采取相應(yīng)措施。

前后端聯(lián)調(diào)——跨域問題

前端通過http請求跨域的同時需要帶上cookie信息,前端需要設(shè)置withCredentials=true。

而后端也需要有所修改。

Access-Control-Allow-Origin字段必須指定域名,不能為*

Access-Control-Allow-Credentials為true

后端可以通過HtttpServletRequest的Header中找到Origin。 是跨域地址的host加port。

后端需要維護(hù)一個跨域URL的白名單,用Origincontains匹配白名單的URL,成功則配置response的Access-Control-Allow-Origin,指定Origin。

就實現(xiàn)跨域傳cookie了。

參考:

什么是跨域、怎么解決跨域?

一個請求url的**協(xié)議、端口、域名**其中任意一個與當(dāng)前頁面url不相同就是跨域

即:?(http/https)協(xié)議、(segmentfault)主域名、(www)子域名、(8080)端口

是因為瀏覽器的同源策略的限制,同源策略是一種安全策略,同源指的是域名,協(xié)議,端口相同,會阻止一個域的js腳本和另一個域的內(nèi)容進(jìn)行交互。 防止在一個瀏覽器中的兩個頁面產(chǎn)生不安全、異常的行為。

當(dāng)然如果不同源的話會產(chǎn)生一定的限制:

【1】無法讀取非同源網(wǎng)頁的Cookie、LocalStorage和IndexedDB

【2】無法接觸非同源網(wǎng)頁的DOM

【3】無法向非同源地址發(fā)送AJAX請求

(‘script’)生成一個script標(biāo)簽,然后插body里而已。

JSONP的實現(xiàn)原理就是創(chuàng)建一個script標(biāo)簽,再把需要請求的api地址放到src里.這個請求只能用GET方法,不可能是POST(向服務(wù)端傳送數(shù)據(jù))。

一種非正式傳輸協(xié)議,它會允許用戶傳遞一個callback參數(shù)給服務(wù)端,然后服務(wù)端返回數(shù)據(jù)的時候會將這個callback參數(shù)作為函數(shù)名來包裹住JSON數(shù)據(jù),然后客戶端就可以隨意的定義自己的函數(shù)來處理返回的數(shù)據(jù)了。

一般是后端在處理請求數(shù)據(jù)的時候,添加允許跨域的請求頭信息,服務(wù)端設(shè)置Access-Control-Allow-Origin就可以,如果需要攜帶cookie,前后端都需要設(shè)置

window對象有個name的屬性,在一個window下,窗口載入的頁面都是共享一個。

在中,怎么把頁面加載進(jìn)來,獲取的數(shù)據(jù)。 在頁面使用iframe,可以去獲取的數(shù)據(jù),然后在頁面中取得iframe獲取得數(shù)據(jù)。

但是iframe想要獲取中的數(shù)據(jù),只需要給這個iframe的src設(shè)為就可以,如果想要得到iframe所獲得的數(shù)據(jù),也就是iframe的的值,還要把這個iframe的src設(shè)成跟頁面同一個域才可以,不然訪問不到iframe里的屬性。

//父窗口打開一個子窗口

??varopenWindow=(,title);

//父窗口向子窗口發(fā)消息(第一個參數(shù)代表發(fā)送的內(nèi)容,第二個參數(shù)代表接收消息窗口的url)

??(Nicetomeetyou!,);

調(diào)用message事件,監(jiān)聽對方發(fā)送的消息

//監(jiān)聽message消息

??(message,function(e){

??();//發(fā)送消息的窗口

??();//消息發(fā)向的網(wǎng)址

??();?//?發(fā)送的消息

??},false);

??#監(jiān)聽9099端口

??listen9099;

??#域名是localhost

??server_namelocalhost;

??#凡是localhost:9099/api這個樣子的,都轉(zhuǎn)發(fā)到真正的服務(wù)端地址

??location^~/api{

????proxy_pass;

//請求的時候直接用回前端這邊的域名,這就不會跨域,然后Nginx監(jiān)聽到凡是localhost:9099/api這個樣子的,都轉(zhuǎn)發(fā)到真正的服務(wù)端地址

?method:POST,

?headers:{

??Accept:application/json,

??Content-Type:application/json

??msg:HelloIframePost

關(guān)于跨域的問題

一、在前端開發(fā)過程中,如果準(zhǔn)備開發(fā)富應(yīng)用,跨域的問題將會隨之而來。

????????我們先看看什么是跨域呢:

????????所謂跨域,或者異源,是指主機(jī)名(域名)、協(xié)議、端口號只要有其一不同,就為不同的域(或源)。 出于保護(hù)用戶數(shù)據(jù)的目的,瀏覽器有一個最基本的策略就是同源策略,只允許頁面內(nèi)的腳本訪問當(dāng)前域的資源(加載腳本、資源等不受此限制)。

二、如果瀏覽器廠商不對跨域請求進(jìn)行處理,會給我們帶來什么危害呢?

????有心人士(病毒制造者)會利用這個漏洞進(jìn)行如下攻擊:

????/XSRF攻擊,簡單的來講就是在頁面中請求的接口(瀏覽器會自動帶上用戶在的cookie),從而獲取用戶的在的相關(guān)信息。

????注入攻擊,類似于SQL攻擊,提交含有惡意腳本的數(shù)據(jù)到服務(wù)器,從而達(dá)到破壞頁面或者獲取用戶的cookie。

三、我們了解到了什么是跨域,那我們又應(yīng)該如何解決呢,現(xiàn)在找到了這些比較權(quán)威的文章,大家先品讀一下:

????????官方網(wǎng)站關(guān)于跨域的文章(CrossOrigin),HTTP訪問控制(CORS)

????????官方網(wǎng)站關(guān)于瀏覽器同源策略的簡要介紹(SameOrigin),?瀏覽器的同源策略

四、讀完這些文章,你打算怎么處理跨域問題呢,我先談?wù)勛约宏P(guān)于跨域的解決方案:

????????1.采用CORS協(xié)議,直接在Nginx中設(shè)置允許跨域的header(也可以在后端的應(yīng)用程序內(nèi)設(shè)置,不過在Nginx入口配置的話更加統(tǒng)一),在location配置中直接使用指令add_header(官方文檔鏈接),示例配置如下:

????????2.使用JSONP,也是需要后端配合,利用“瀏覽器加載腳本、資源時不受同源策略的約束”這個特性,但是這種方式非常受限制,例如只能使用GET請求,不能攜帶自定義header等。

????3.其他的一些方法,例如,以及HTML5中的特性等

五、其他參考鏈接

????1.?淺談JS跨域問題

????2.跨域資源共享CORS詳解----阮一峰

六、聲明

????現(xiàn)在網(wǎng)絡(luò)上的知識非常復(fù)雜,有些是摘自權(quán)威書籍的,有些是作者自己理解然后記錄下來的,有些是瞎掰的,所以一定要結(jié)合情況多多甄別,對于有權(quán)威文檔的知識點,建議先參考文檔。

后端配置跨域

原文連接:原文地址

跨域的詳細(xì)介紹可以參考:瀏覽器和服務(wù)器實現(xiàn)跨域(CORS)判定的原理,這里不多贅述。

1、主要就是客戶端向發(fā)送了服務(wù)端請求,服務(wù)器已經(jīng)能返回數(shù)據(jù),但是瀏覽器不接收

2、在接口里面加上:(因為request是處理請求,response是返回結(jié)果)

(Access-Control-Allow-Origin,?*);

(Cache-Control,no-cache);?

3、如果是使用SpringBoot創(chuàng)建的項目,直接添加一句注解到controller和方法就可以了:

@CrossOrigin

其中@CrossOrigin中的2個參數(shù):

origins?:允許可訪問的域列表

maxAge:準(zhǔn)備響應(yīng)前的緩存持續(xù)的最大時間(以秒為單位)。

在這個例子中,對于retrieve()和remove()處理方法都啟用了跨域支持,還可以看到如何使用@CrossOrigin屬性定制CORS配置。 如果同時使用controller和方法級別的CORS配置,Spring將合并兩個注釋屬性以創(chuàng)建合并的CORS配置。

4、如果您正在使用SpringSecurity,請確保在Spring安全級別啟用CORS,并允許它利用SpringMVC級別定義的配置。

二、全局CORS配置

除了細(xì)粒度、基于注釋的配置之外,您還可能需要定義一些全局CORS配置。 這類似于使用篩選器,但可以聲明為SpringMVC并結(jié)合細(xì)粒度@CrossOrigin配置。 默認(rèn)情況下,所有originsandGET,HEADandPOSTmethods是允許的。

JavaConfig

使整個應(yīng)用程序的CORS簡化為:

更多使用請看原文連接和官方文檔

后端解決前端跨域請求問題

場景:前后端分離,頁面和后端項目部署在不同服務(wù)器,出現(xiàn)請求跨域問題。

原因:CORS:跨來源資源共享(CORS)是一份瀏覽器技術(shù)的規(guī)范,提供了Web服務(wù)從不同網(wǎng)域傳來沙盒腳本的方法,以避開瀏覽器的同源策略,是JSONP模式的現(xiàn)代版。 與JSONP不同,CORS除了GET要求方法以外也支持其他的HTTP要求。 用CORS可以讓網(wǎng)頁設(shè)計師用一般的XMLHttpRequest,這種方式的錯誤處理比JSONP要來的好,JSONP對于RESTful的API來說,發(fā)送POST/PUT/DELET請求將成為問題,不利于接口的統(tǒng)一。 但另一方面,JSONP可以在不支持CORS的老舊瀏覽器上運作。 不過現(xiàn)代的瀏覽器(IE10以上)基本都支持CORS。

預(yù)檢請求(option):在CORS中,可以使用OPTIONS方法發(fā)起一個預(yù)檢請求(一般都是瀏覽檢測到請求跨域時,會自動發(fā)起),以檢測實際請求是否可以被服務(wù)器所接受。 預(yù)檢請求報文中的Access-Control-Request-Method首部字段告知服務(wù)器實際請求所使用的HTTP方法;Access-Control-Request-Headers首部字段告知服務(wù)器實際請求所攜帶的自定義首部字段。 服務(wù)器基于從預(yù)檢請求獲得的信息來判斷,是否接受接下來的實際請求。

解決方案:

1、創(chuàng)建一個過濾器,過濾options請求。

*解決跨域問題

publicclassCorsFilterimplementsFilter{//filter接口的自定義實現(xiàn)

??publicvoidinit(FilterConfigfilterConfig)throwsServletException{

??publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{

HttpServletResponseresponse=(HttpServletResponse)servletResponse;

????HttpServletRequestrequest=(HttpServletRequest)servletRequest;

????(Access-Control-Allow-Origin,*);

????if((())){//這里通過判斷請求的方法,判斷此次是否是預(yù)檢請求,如果是,立即返回一個204狀態(tài)嗎,標(biāo)示,允許跨域;預(yù)檢后,正式請求,這個方法參數(shù)就是我們設(shè)置的post了

??????(_NO_CONTENT);//_NO_CONTENT=204

??????(Access-Control-Allow-Methods,POST,GET,DELETE,OPTIONS,DELETE);//當(dāng)判定為預(yù)檢請求后,設(shè)定允許請求的方法

??????(Access-Control-Allow-Headers,Content-Type,x-requested-with);//當(dāng)判定為預(yù)檢請求后,設(shè)定允許請求的頭部類型

??????(Access-Control-Max-Age,1);?//預(yù)檢有效保持時間

(request,response);

??publicvoiddestroy(){

2、修改文件

?filter-namecors/filter-name

?/filter-class

filter-mapping

filter-namecors/filter-name

?url-pattern/*?/url-pattern

/filter-mapping

3、添加HttpRequestHandlerAdapter?http請求處理器適配器。

HttpRequestHandlerAdapter作為HTTP請求處理器適配器僅僅支持對HTTP請求處理器的適配。 它簡單的將HTTP請求對象和響應(yīng)對象傳遞給HTTP請求處理器的實現(xiàn),它并不需要返回值。 它主要應(yīng)用在基于HTTP的遠(yuǎn)程調(diào)用的實現(xiàn)上。

beanclass=/

js跳轉(zhuǎn)指定頁面(js中跳轉(zhuǎn)頁面)

js如何在指定頁面跳轉(zhuǎn)到另一指定頁面

1、用js的href函數(shù)來實現(xiàn)。 代碼參考:引用script語句=需要跳轉(zhuǎn)到的頁面跳轉(zhuǎn)到指定頁面定義和用法href屬性是一個可讀可寫的字符串,可設(shè)置或返回當(dāng)前顯示的文檔的完整URL。

2、測試用返回引用的函數(shù)值作為賦值表達(dá)式的左值。

3、弄一個名字為網(wǎng)頁跳轉(zhuǎn)的簡單靜態(tài)網(wǎng)頁,網(wǎng)頁內(nèi)有一張圖片,圖片要置于網(wǎng)如果您在此頁面內(nèi)跳轉(zhuǎn),則可以使用代碼跳轉(zhuǎn)到指定位置。 轉(zhuǎn)到指定位置是指向idweizhi的頁面部分的超鏈接。 位置是需要轉(zhuǎn)移的部分。

4、由上可知,可以通過setHeader來實現(xiàn)某頁面停留若干秒后,自動重定向到另一頁面。

又是該死的js,怎么跳轉(zhuǎn)到指定tab頁

1、html有一個用js控制的選項卡0003;當(dāng)點擊html中的2鏈接到html時顯示選項卡02的內(nèi)容。

2、鍵盤tab鍵的鍵代碼是9,可以用來獲得按下一個鍵時的鍵代碼,進(jìn)而可以知道按下了哪個鍵。 接著程序找出當(dāng)前光標(biāo)所在的文本框,然后將光標(biāo)移到它的前一個文本框中。

3、--將些鏈接加入到你想跳轉(zhuǎn)到的位置-#后面的skip你可以自己定義與下面的那個中的對應(yīng)就可以了!就能實習(xí)到指定的位置了。

4、方法如下:首先,選中整個表格,然后點擊右鍵,選擇菜單中的“表格屬性”,這樣會彈出對話框。 在對話框中,切換到“行”選項卡,如下圖。

5、http:///uid--id-html看下這文章。

JS實現(xiàn)頁面跳轉(zhuǎn)的幾種方式

[1]在頁面的head內(nèi)加入meta標(biāo)簽實現(xiàn)[2]js代碼實現(xiàn)setTimeout((0),1000)javascript中的跳轉(zhuǎn)方法=(-1);//參數(shù)是負(fù)幾,就后退幾次。

這樣就能實現(xiàn),參數(shù)不丟失了。 主要就是頁碼和篩選條件。 純js頁面跳轉(zhuǎn)要傳復(fù)雜數(shù)據(jù)不好做,要用localStorage,這個東東在各瀏覽器中是不一樣的。

您好,你這樣用JS實現(xiàn)頁面跳轉(zhuǎn)是會使整個頁面都跳轉(zhuǎn),如果你正在看視頻,點擊下一頁,又要重新加載,這是不符合規(guī)范的哦。 網(wǎng)上那些是用的分頁控件,還有一個方法是利用Ajax做。

那你別用js跳轉(zhuǎn)了,直接用標(biāo)準(zhǔn)html跳轉(zhuǎn),這個兼容性最高。

這是典型的分頁,你這個布局是有點問題的。 分頁的頁是動態(tài)創(chuàng)建出來的。 HTML:直接一個DIV就行,是分頁的容器!下面是一個分頁的例子的代碼。 我建議你還是網(wǎng)上找一套關(guān)于JavaScript分頁的視頻來看,看完自然就懂了。



相關(guān)標(biāo)簽: 利用localstorage做一個歌曲收藏location.hrefWeb應(yīng)用程序的調(diào)試利用簡化

上一篇:使用locationhref提供直觀的Web應(yīng)用程序?qū)?/a>

下一篇:使用locationhref優(yōu)化Web應(yīng)用程序的SEO使用

內(nèi)容聲明:

1、本站收錄的內(nèi)容來源于大數(shù)據(jù)收集,版權(quán)歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請聯(lián)系我們進(jìn)行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請聯(lián)系我們進(jìn)行舉報處理!
4、本文地址:http://www.hudongshop.com/article/2aaae25f80b34ac7dacf.html,復(fù)制請保留版權(quán)鏈接!


溫馨小提示:在您的網(wǎng)站做上本站友情鏈接,訪問一次即可自動收錄并自動排在本站第一位!
隨機(jī)文章
刷爆朋友圈的短視頻神器:掌握社交流量密碼 (刷爆朋友圈的文案)

刷爆朋友圈的短視頻神器:掌握社交流量密碼 (刷爆朋友圈的文案)

在社交媒體時代,短視頻已經(jīng)成為傳播信息、吸引流量的重要方式,想要在朋友圈中脫穎而出,一款優(yōu)秀的短視頻神器必不可少,本文將為你介紹幾款刷爆朋友圈的短視頻神器,以及一些刷爆朋友圈文案的技巧,刷爆朋友圈的短視頻神器1.剪映剪映是一款功能強(qiáng)大的短視頻編輯軟件,操作簡單,功能豐富,它提供了豐富的特效、轉(zhuǎn)場、貼紙和音樂素材,可以滿足各種短視頻創(chuàng)作...。

最新資訊 2024-10-01 17:51:02

免費的圖表制作工具和 JavaScript 圖表庫 (免費的圖表制作工具)

免費的圖表制作工具和 JavaScript 圖表庫 (免費的圖表制作工具)

圖表對于可視化數(shù)據(jù)非常重要,但創(chuàng)建圖表可能很費時且具有挑戰(zhàn)性,這就是為什么使用免費的圖表制作工具和JavaScript圖表庫來簡化流程至關(guān)重要的原因,免費的圖表制作工具GoogleCharts,Google提供的一套全面的圖表制作工具,提供各種圖表類型,它易于使用,可與GoogleSheets和GoogleDataStudio等其他G...。

最新資訊 2024-10-01 12:42:59

了解心血漏洞的潛在危險:軟件開發(fā)中的關(guān)鍵弱點 (了解心血漏洞的人)

了解心血漏洞的潛在危險:軟件開發(fā)中的關(guān)鍵弱點 (了解心血漏洞的人)

引言在軟件開發(fā)領(lǐng)域,心血漏洞是一種嚴(yán)重的漏洞,它允許攻擊者獲得對計算機(jī)系統(tǒng)的未經(jīng)授權(quán)的訪問,這些漏洞可能對個人、企業(yè)和整個行業(yè)產(chǎn)生毀滅性的影響,本文旨在闡明心血漏洞的潛在危險,并提供最佳實踐以減輕其風(fēng)險,什么是心血漏洞,心血漏洞是由軟件中的缺陷或編碼錯誤造成的,它允許攻擊者利用該缺陷訪問計算機(jī)系統(tǒng),這些漏洞通常可以被遠(yuǎn)程利用,這意味著...。

最新資訊 2024-09-25 21:28:50

Ant.jar 的藝術(shù):通過構(gòu)建自動化提升開發(fā)效率 (ant.jar包的作用)

Ant.jar 的藝術(shù):通過構(gòu)建自動化提升開發(fā)效率 (ant.jar包的作用)

簡介Ant,ApacheAnt,是一種基于Java的構(gòu)建工具,用于自動化構(gòu)建流程,包括編譯、測試、打包和部署,Ant.jar包是Ant的核心庫,它提供了構(gòu)建過程的大量功能,通過使用Ant.jar,開發(fā)人員可以創(chuàng)建自定義構(gòu)建腳本,使構(gòu)建流程更有效、更可重復(fù),Ant.jar的作用Ant.jar提供了許多功能,包括,任務(wù),Ant.jar包含...。

最新資訊 2024-09-16 11:34:21

踏上 C 語言進(jìn)階之路:掌握二級 C 語言技能 (c語言 進(jìn)階)

踏上 C 語言進(jìn)階之路:掌握二級 C 語言技能 (c語言 進(jìn)階)

前言對于初學(xué)者來說,掌握C語言的基礎(chǔ)語法和概念是至關(guān)重要的,如果你想要提升自己的C語言技能,達(dá)到二級水平,那么你需要深入了解語言的更高級特性,本文將指導(dǎo)你踏上C語言進(jìn)階之路,幫助你掌握二級C語言技能,提升你的編程能力,二級C語言技能簡介二級C語言技能涵蓋了以下主題,指針和動態(tài)內(nèi)存管理結(jié)構(gòu)體和聯(lián)合文件處理預(yù)處理器和宏位操作數(shù)據(jù)結(jié)構(gòu)指針和...。

互聯(lián)網(wǎng)資訊 2024-09-11 10:31:05

Java Web 開發(fā):構(gòu)建強(qiáng)大的 Web 應(yīng)用程序的綜合指南 (javaweb是前端還是后端)

Java Web 開發(fā):構(gòu)建強(qiáng)大的 Web 應(yīng)用程序的綜合指南 (javaweb是前端還是后端)

Javaweb是什么JavaWeb是一個用于開發(fā)服務(wù)器端應(yīng)用程序的框架,它使用Java語言和各種庫和框架來創(chuàng)建動態(tài)Web頁面、處理用戶請求并生成HTML響應(yīng),Javaweb是前端還是后端JavaWeb主要用于后端開發(fā),即處理服務(wù)器端的邏輯和數(shù)據(jù)處理,它與前端技術(shù),如HTML、CSS和JavaScript,配合使用,用于構(gòu)建用戶界面和處...。

技術(shù)教程 2024-09-11 08:18:15

擬合函數(shù):數(shù)據(jù)分析的強(qiáng)大工具探索數(shù)據(jù)趨勢和模式 (擬合函數(shù)是什么)

擬合函數(shù):數(shù)據(jù)分析的強(qiáng)大工具探索數(shù)據(jù)趨勢和模式 (擬合函數(shù)是什么)

在數(shù)據(jù)分析中,擬合函數(shù)是一種強(qiáng)大的工具,可以幫助我們探索數(shù)據(jù)趨勢和模式,通過將數(shù)學(xué)方程擬合到數(shù)據(jù)點,我們可以揭示數(shù)據(jù)的潛在結(jié)構(gòu),并對未來趨勢進(jìn)行預(yù)測,什么是擬合函數(shù),擬合函數(shù)是一種數(shù)學(xué)方程,它以最合適的方式近似給定數(shù)據(jù)集,擬合函數(shù)通過最小化數(shù)據(jù)點和函數(shù)之間誤差的總和來確定,這種誤差通常用均方誤差,MSE,來衡量,擬合函數(shù)的常用類型包括...。

本站公告 2024-09-10 11:05:52

為中國開發(fā)者提供動力:編程中國的資源和支持 (為中國開發(fā)者提出建議)

為中國開發(fā)者提供動力:編程中國的資源和支持 (為中國開發(fā)者提出建議)

前言中國作為全球數(shù)字化大國,對于開發(fā)者而言是一個充滿機(jī)遇的沃土,為了助力中國開發(fā)者茁壯成長,本文匯集了豐富的資源和支持,旨在為他們的職業(yè)發(fā)展提供全方位的賦能,教育與培訓(xùn)在線課程平臺網(wǎng)易云課堂,提供海量免費和付費課程,涵蓋從基礎(chǔ)編程到高級技術(shù),Coursera,與世界名校合作,提供計算機(jī)科學(xué)、數(shù)據(jù)科學(xué)和AI等領(lǐng)域的認(rèn)證課程,Udemy,...。

互聯(lián)網(wǎng)資訊 2024-09-09 10:03:16

PDO 數(shù)據(jù)庫操作:支持多種數(shù)據(jù)庫,例如 MySQL、PostgreSQL 和 SQL Server。(pdo數(shù)據(jù)庫查詢)

PDO 數(shù)據(jù)庫操作:支持多種數(shù)據(jù)庫,例如 MySQL、PostgreSQL 和 SQL Server。(pdo數(shù)據(jù)庫查詢)

PDO,PHPDataObjects,是PHP中的一個擴(kuò)展,它提供了一個統(tǒng)一的接口來訪問不同的數(shù)據(jù)庫管理系統(tǒng),DBMS,這意味著你可以使用相同的代碼與MySQL、PostgreSQL和SQLServer等不同的數(shù)據(jù)庫交互,PDO優(yōu)勢使用PDO有一些優(yōu)勢,包括,統(tǒng)一的接口,PDO提供了一個統(tǒng)一的接口,用于與不同的數(shù)據(jù)庫交互,簡化了與不...。

本站公告 2024-09-07 23:31:54

Java中的視頻編碼和解碼:優(yōu)化視頻配信 (java中的基本數(shù)據(jù)類型有哪些)

Java中的視頻編碼和解碼:優(yōu)化視頻配信 (java中的基本數(shù)據(jù)類型有哪些)

Java中的視頻編碼和解碼,優(yōu)化視頻傳輸介紹在當(dāng)今數(shù)字世界中,視頻已成為至關(guān)重要的一部分,從流媒體服務(wù)到視頻會議,視頻無處不在,為了在互聯(lián)網(wǎng)上有效地傳輸視頻,需要對其進(jìn)行編碼和解碼,Java中的視頻編碼視頻編碼是將未壓縮視頻數(shù)據(jù)轉(zhuǎn)換為壓縮視頻格式的過程,這可以通過使用編解碼器,編解碼器,來實現(xiàn),它是一種執(zhí)行編碼和解碼操作的軟件或硬件組...。

本站公告 2024-09-07 21:49:20

釋放數(shù)據(jù)潛力的鑰匙:Random函數(shù)在機(jī)器學(xué)習(xí)中的作用 (釋放數(shù)據(jù)潛力英文翻譯)

釋放數(shù)據(jù)潛力的鑰匙:Random函數(shù)在機(jī)器學(xué)習(xí)中的作用 (釋放數(shù)據(jù)潛力英文翻譯)

在機(jī)器學(xué)習(xí)中,數(shù)據(jù)是至關(guān)重要的,它為算法提供學(xué)習(xí)和做出預(yù)測所需的信息,數(shù)據(jù)通常是混亂和無序的,這使得機(jī)器學(xué)習(xí)算法很難從中提取有用的模式,因此,隨機(jī)性在機(jī)器學(xué)習(xí)中起著至關(guān)重要的作用,Random函數(shù)就是其中的一個關(guān)鍵工具,什么是Random函數(shù),Random函數(shù)是一個用于生成偽隨機(jī)數(shù)的計算機(jī)函數(shù),雖然這些數(shù)字實際上并非完全隨機(jī),但它們看...。

技術(shù)教程 2024-09-07 02:47:17

網(wǎng)頁ps怎么使用教程網(wǎng)頁ps怎么使用教程視頻 (網(wǎng)頁ps怎么摳圖)

網(wǎng)頁ps怎么使用教程網(wǎng)頁ps怎么使用教程視頻 (網(wǎng)頁ps怎么摳圖)

如何使用photoshop制作網(wǎng)頁很多朋友不知道用ps制作網(wǎng)頁的規(guī)范,下面介紹一下,01打開電腦中的Photoshop界面,首先,我們創(chuàng)建一個畫布,寬度為1200,任意高度,分辨率為72,02畫布創(chuàng)建完成后,我們在1200px左右兩邊拉一條輔助線固定,03然后打開畫布大小,取消,相對,,寬度調(diào)整為1920px,04設(shè)置好之后,在紅色區(qū)...。

技術(shù)教程 2024-09-02 00:56:33

Copyright ? 2025 聚集網(wǎng) All Rights Reserved
此內(nèi)容系本站根據(jù)來路自動抓取的結(jié)果,不代表本站贊成被顯示網(wǎng)站的內(nèi)容或立場。
本頁閱讀量次 | 本站總訪問次 | 本站總訪客人 | 今日總訪問次 | 今日總訪客人 | 昨日總訪問次 | 昨日總訪客人 |
技術(shù)支持:聚集網(wǎng)

国产中文字幕免费观看_国产高清精品软男同_日韩免费视频播放_亚洲午夜激情
性色av一区二区咪爱| 欧美亚洲免费高清在线观看| 日本少妇高潮喷水视频| 久久久女人电视剧免费播放下载| 亚洲高清资源综合久久精品| 91精品一区二区三区四区| 亚洲精品中文字幕乱码三区不卡| www国产无套内射com| 日韩尤物视频| 国产成人久久精品| 精品一区二区中文字幕| 精品国产无码在线| 国产一区二中文字幕在线看| 欧美精品成人91久久久久久久| 91美女片黄在线观看游戏| 日本高清不卡三区| 久久精品一区中文字幕| 国产在线青青草| 亚洲一区精品视频| 国产va免费精品高清在线| 国内视频一区二区| 亚洲天堂第一区| 国产h视频在线播放| 黄色三级中文字幕| 亚洲综合成人婷婷小说| 国产超碰91| 麻豆av免费在线| 又粗又黑又大的吊av| 久久婷婷开心| 黄色录像特级片| 欧美精品久久久久久久久| 久久精品国产sm调教网站演员| 韩国成人一区| 亚洲精品tv久久久久久久久| 久久久久久亚洲精品中文字幕| 国产一区二区三区四区五区在线| 午夜精品一区二区在线观看的| 国产精品欧美亚洲777777| 99精品一区二区三区的区别| 欧美亚洲国产精品| 亚洲综合成人婷婷小说| y97精品国产97久久久久久| 国产欧美日韩在线播放| 视频在线99re| 欧美激情综合亚洲一二区| 日韩一二三在线视频播| 成人av播放| 欧美精品久久久| 综合操久久久| 久久99蜜桃综合影院免费观看| 欧美一区二区三区在线播放| 91精品国产99| 日韩精品福利视频| 国产精品日韩精品| 国产精品久久久久久久久久久久久久 | 日韩国产高清一区| 国产精品视频免费观看www| 国产精品99免视看9| 国产日韩精品在线| 欧美牲交a欧美牲交| 色综合久久88色综合天天提莫| 精品国产aⅴ麻豆| 久久精品人人做人人爽| 97色伦亚洲国产| 国产一区二区三区高清| 欧美在线亚洲一区| 日本精品免费在线观看| 日韩在线xxx| 一本色道婷婷久久欧美| 国产精品久久九九| 精品国产自在精品国产浪潮| 97精品国产97久久久久久| 国产一区二区三区av在线| 精品日本一区二区三区在线观看 | 欧美猛交免费看| 久久久久久久av| 久久久人成影片一区二区三区观看| 国产精品一区二区三区成人| 精品视频免费在线播放| 欧美日韩一区综合| 秋霞午夜一区二区| 日本不卡免费新一二三区| 日韩在线第三页| 日日摸日日碰夜夜爽无码| 午夜精品美女自拍福到在线| 一区二区免费电影| 欧美激情精品在线| 欧美日韩国产成人| 一区二区三区欧美成人| 一区二区三区久久网| 色在人av网站天堂精品| 美女999久久久精品视频 | 国产日产欧美a一级在线| 国产中文字幕日韩| 国产在线精品一区| 国产日韩欧美自拍| 国产制服91一区二区三区制服| 激情综合网婷婷| 国产中文欧美精品| 国产九九九九九| 超碰网在线观看| 91久久久亚洲精品| 久久久一本精品99久久精品| 91超碰中文字幕久久精品| 91久久精品国产| 久久影院理伦片| 欧美亚洲另类视频| 每日在线更新av| 国产伦精品一区| 国产精品亚洲精品| 91禁国产网站| 日韩在线视频免费观看| 国产精品无码电影在线观看| 国产精品视频一区二区三区经| 国产精品老女人视频| 欧美成人免费一级人片100| 这里只有精品66| 日韩av综合在线观看| 欧美日韩亚洲在线| 国产欧美一区二区在线播放| 91精品久久久久久| 国产成人女人毛片视频在线| 欧美成人亚洲成人日韩成人| 亚洲在线观看视频| 日本www在线视频| 国产四区在线观看| 久久亚洲综合网| 国产精品免费一区| 一级黄色免费在线观看| 日韩视频在线视频| 国产亚洲综合视频| 久久资源av| 国产精品吹潮在线观看| 午夜免费在线观看精品视频| 欧美在线3区| 国产特级淫片高清视频| 久久无码高潮喷水| 国产精品动漫网站| 亚洲精品中文综合第一页| 男人的天堂狠狠干| 91九色国产ts另类人妖| 国产成人欧美在线观看| 亚洲一区亚洲二区| 经典三级在线视频| 久久亚洲综合网| 精品国产一区二区三区日日嗨| 日韩在线第三页| 国产日韩欧美在线观看| 久久久久天天天天| 欧美日本啪啪无遮挡网站| 日本久久久精品视频| 国产九九精品视频| 日韩少妇与小伙激情| 亚洲综合最新在线| 欧美韩国日本精品一区二区三区| 97精品国产97久久久久久春色| 国产精品美女呻吟| 日本精品视频在线| 97国产精品视频| 久久国产精品首页| 欧美日韩精品免费看| 久久久视频在线| 欧美激情精品久久久久久| 欧美在线中文字幕| 91av一区二区三区| 精品不卡在线| 狠狠色伊人亚洲综合网站色| 国产不卡一区二区在线播放 | 国产一区二区高清视频| 久艹在线免费观看| 亚洲一区影院| 国产欧美va欧美va香蕉在| 久久久国产精品亚洲一区| 日韩一区不卡| 成人91免费视频| 欧美日本精品在线| 免费黄色福利视频| www欧美日韩| 日本网站免费在线观看| 国产精品99蜜臀久久不卡二区| 欧美激情亚洲另类| 国产亚洲精品美女久久久m| 久久精品99久久香蕉国产色戒| 色一情一乱一乱一区91| 99三级在线| 一区二区精品视频| 国产精品一区二区三区观看 | 激情视频综合网| 色青青草原桃花久久综合| 无码播放一区二区三区| 国产精品午夜视频| 欧美精品久久久久| 国产视频一视频二| 国产精品吊钟奶在线| 国产专区欧美专区| 不卡av电影院| 国产一区一区三区| 欧美成人免费一级人片100| 国内精品久久久久| 国产精品成av人在线视午夜片|