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

html前端跨域問題的解決方案

這篇具有很好參考價(jià)值的文章主要介紹了html前端跨域問題的解決方案。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:
在前端發(fā)出Ajax請求的時(shí)候,有時(shí)候會(huì)產(chǎn)生跨域問題,報(bào)錯(cuò)如下:

Access to XMLHttpRequest at ‘http://127.0.0.1/api/post’ from origin ‘null’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

html前端跨域問題的解決方案

針對以上問題,本文提供兩種解決方案,CORS中間件和JSONP方法。

在具體介紹解決方法之前,我們先明確以下前提條件:

1、這兩個(gè)方法都需要通過后端修改接口情況,無法單獨(dú)通過前端解決跨域問題。

2、什么是跨域?什么情況會(huì)出現(xiàn)跨域?

答:當(dāng)瀏覽器發(fā)起Ajax請求時(shí),如果所請求的url和當(dāng)前的url的協(xié)議、域名、端口存在任意不同,就會(huì)產(chǎn)生跨域問題。比如我在這個(gè)地址file:///C:/Users/%E8%8A%.html,協(xié)議為file協(xié)議,如果請求http協(xié)議的文件,自然就會(huì)出現(xiàn)跨域問題。

3、當(dāng)我們使用script、img、herf加載內(nèi)容時(shí)不會(huì)出現(xiàn)跨域問題

好,接來下我們先給出出現(xiàn)問題的前 后端代碼,看看這個(gè)時(shí)候?qū)?yīng)前后端都做了什么事:
首先是前端:使用ajax發(fā)送get請求,請求地址為http://127.0.0.1/api/get,由于前端頁面使用file格式打開,所以在請求http協(xié)議的本機(jī)地址是會(huì)產(chǎn)生跨域問題。

$(“#btnGET”).on(“click”, function () {
$.ajax({
type: “GET”,
url: “http://127.0.0.1/api/get”,
success: function (res) {
console.log(res);
},
});
});
然后是后端:當(dāng)請求的路由地址為/api/get的時(shí)候,返回對應(yīng)的內(nèi)容和query屬性

app.get(‘/api/get’,(req, res) => {
// 通過 req.query 獲取客戶端通過查詢字符串,發(fā)送到服務(wù)器的數(shù)據(jù)
const query = req.query;
// 調(diào)用 res.send() 方法,向客戶端響應(yīng)處理的結(jié)果
res.send({
status: 0, // 0 表示處理成功,1 表示處理失敗
msg: “GET 請求成功!”, // 狀態(tài)的描述
data: query, // 需要響應(yīng)給客戶端的數(shù)據(jù)
});
})
OK,說完發(fā)生跨域問題的情況,我們接下來講解決方法:

方法一:引入cors中間件
這個(gè)方法很簡單只要在后端加入兩行代碼。(首先要先npm install cors 安裝包),修改后的后端代碼如下

const cors = require(“cors”);
app.use(cors()); //使用cors中間件

app.get(‘/api/get’,(req, res) => {
// 通過 req.query 獲取客戶端通過查詢字符串,發(fā)送到服務(wù)器的數(shù)據(jù)
const query = req.query;
// 調(diào)用 res.send() 方法,向客戶端響應(yīng)處理的結(jié)果
res.send({
status: 0, // 0 表示處理成功,1 表示處理失敗
msg: “GET 請求成功!”, // 狀態(tài)的描述
data: query, // 需要響應(yīng)給客戶端的數(shù)據(jù)
});
})
可以看到,引入了cors中間件之后,跨域問題可以得到解決,那么為什么解決,這么解決的原理是什么呢?讓我們回到前面的報(bào)錯(cuò)內(nèi)容:

No ‘Access-Control-Allow-Origin’ header is present on the requested resource.意思就是說,所請求的資源沒有Access-Control-Allow-Origin這個(gè)頭,好的。那我們就把這個(gè)頭給他安上,發(fā)現(xiàn)問題也可以解決,那么cors中間件是不是就是使用的這種方法呢?

app.get(‘/api/get’,(req, res) => {
// 通過 req.query 獲取客戶端通過查詢字符串,發(fā)送到服務(wù)器的數(shù)據(jù)

res.header(“Access-Control-Allow-Origin”, “*”); 設(shè)置響應(yīng)頭,*表示任何地址都亦可以訪問

const query = req.query;
// 調(diào)用 res.send() 方法,向客戶端響應(yīng)處理的結(jié)果
res.send({
status: 0, // 0 表示處理成功,1 表示處理失敗
msg: “GET 請求成功!”, // 狀態(tài)的描述
data: query, // 需要響應(yīng)給客戶端的數(shù)據(jù)
});
})
我們發(fā)現(xiàn)當(dāng)我們使用了cors中間件之后,使用瀏覽器抓包,可以看到相應(yīng)頭里確實(shí)有了這個(gè)字段

所以綜上所述,cors中間件就是幫我們自動(dòng)設(shè)置了響應(yīng)頭,從而解決跨域問題。

方法二:JSONP
簡單來說,JSONP就是通過前端的script腳本從后端請求回來一段js代碼并且執(zhí)行從而獲得數(shù)據(jù),前端代碼如下(視頻截圖下來的。。我懶得打字了)。。然后圈個(gè)重點(diǎn)JSONP只支持GET請求

來,我們解釋一下:首先通過第一個(gè)script腳本注冊一個(gè)函數(shù)f,那么這個(gè)函數(shù)自然就存在了,后面使用的腳本也能用f這個(gè)函數(shù),這個(gè)道理和你用script引入一個(gè)jquery然后后面用 $ 開始一通操作是一樣的道理。然后第二個(gè)script腳本訪問一個(gè)跨域的資源,然后我們傳入?yún)?shù)callback=f,這個(gè)參數(shù)有什么用呢?答:后端需要獲取這個(gè)callback參數(shù)里面的值,然后把這個(gè)值(也就是f)拼接成一個(gè)函數(shù)然后返回回來給前端執(zhí)行,對應(yīng)后端代碼如圖。

前端代碼:

后端代碼:可以看到這個(gè)funcname對應(yīng)的就是那個(gè)f,然后拼接一下就變成了f(‘你好’),那么這個(gè)東西就返回給了前端。但是但是前端這個(gè)時(shí)候注冊了一個(gè)f函數(shù)呀,所以就會(huì)執(zhí)行這個(gè)f(‘你好’),那么前端的數(shù)據(jù)也就請求回來了。

到這里,兩種方法都講完了,下面補(bǔ)充一種讓我懵逼了很久的jquery的jsonp解決方法
直接上代碼:(后端代碼不變,還是拼接一個(gè)函數(shù)回來執(zhí)行)

$(“#btnJSONP”).on(“click”, function () {
$.ajax({
type: “GET”,
url: “http://127.0.0.1/api/jsonp”,
dataType: “jsonp”,
jsonp: “callback”,
jsonpCallback: “f”,
success: function (res) {
console.log(res);
},
});
});
打開控制臺(tái),可以看到j(luò)query發(fā)送的這個(gè)請求其實(shí)和剛才是差不多的

同樣是拼接了一個(gè)callback參數(shù)給后端,后端返回js代碼,此外呢,上面這段代碼的jsonp參數(shù)和jsonpcallback參數(shù)書可以省略的,那樣的話jquery會(huì)自動(dòng)給你貼一個(gè)值

同時(shí)后端返回來的也就不再是那個(gè)f函數(shù)了。

那么問題又來了,不是說ajax請求就會(huì)出現(xiàn)跨域問題,那為什么我這個(gè)用ajax發(fā)送jsonp請求就沒有跨域呢?

答:我也不知道。然后就去查了一下jquery的文檔。

所以大概是因?yàn)闆]有用到XMLhttprequest這個(gè)對象,所以并不算一個(gè)真正的ajax請求把。文章來源地址http://www.zghlxwxcb.cn/news/detail-420933.html

到了這里,關(guān)于html前端跨域問題的解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 跨域問題解決方案(三種)

    跨域問題解決方案(三種)

    具有相同的Origin,也即是擁有相同的協(xié)議、主機(jī)地址以及端口。一旦這三項(xiàng)數(shù)據(jù)中有一項(xiàng)不同,那么該資源就將被認(rèn)為是從不同的Origin得來的,進(jìn)而不被允許訪問。 是一個(gè)W3C標(biāo)準(zhǔn)。允許瀏覽器向跨源(協(xié)議 + 域名 + 端口)服務(wù)器,發(fā)出XMLHttpRequest請求,從而克服了AJAX只能同源使

    2024年02月07日
    瀏覽(95)
  • 前端筆記 ---- Chrome 瀏覽器不能跨域訪問解決方案

    前端筆記 ---- Chrome 瀏覽器不能跨域訪問解決方案

    1. 需求場景 Chrome 瀏覽器開發(fā) H5 進(jìn)行接口聯(lián)調(diào)時(shí),瀏覽器不允許跨域訪問; 想通過瀏覽器設(shè)置,不使用代理等,瀏覽器可以進(jìn)行跨域訪問。 2. 報(bào)錯(cuò)圖片 3. 解決方案 3.1 獲取Chrome 瀏覽器安裝位置 3.2 設(shè)置允許跨域和不驗(yàn)證證書 3.3 cmd 執(zhí)行設(shè)置命令 3.4 組成完整命令 3.5 cmd 運(yùn)行命

    2024年02月15日
    瀏覽(27)
  • geoserver跨域問題多種解決方案

    geoserver跨域問題多種解決方案

    geoserver發(fā)布服務(wù)完成之后,很重要的一個(gè)應(yīng)用場景是前端服務(wù)調(diào)用,來展示服務(wù)數(shù)據(jù),那么很可能遇到一個(gè)跨域問題,今天我們分享一下跨越問題的多種解決方案,來適用不同需求的業(yè)務(wù)場景。 一、nginx服務(wù)均衡策略 如果你的項(xiàng)目正在使用nginx,那么很簡單操作,在conf/ngin

    2024年02月03日
    瀏覽(91)
  • 前端常見跨域解決方案(jsonp,cors,proxy,postMessage,webSocket)

    一、JSONP(jsonp) 概念: JSONP(JSON with Padding,填充式 JSON 或參數(shù)式 JSON)是一種通過 優(yōu)點(diǎn): 簡單易用 兼容性好,支持各種瀏覽器 缺點(diǎn): 只能實(shí)現(xiàn) GET 請求,無法實(shí)現(xiàn) POST 等其他類型的請求 安全性較低,容易受到 XSS 攻擊 Eg: 為什么需要?jiǎng)討B(tài)生成標(biāo)簽,而不是直接通過 原因有

    2024年02月07日
    瀏覽(26)
  • Ajax請求跨域問題及其解決方案

    Ajax請求跨域問題及其解決方案

    ????????我們的傳統(tǒng)請求,比如說超鏈接、form表單,js代碼以及直接在瀏覽器地址欄上寫請求地址都不存在跨域問題,能夠從一個(gè)網(wǎng)站訪問另外一個(gè)網(wǎng)站,但是我們的Ajax請求會(huì)存在跨域問題,其主要是為了解決跨域訪問帶來的安全隱患。因?yàn)闉g覽器中有一個(gè)內(nèi)置對象XMLH

    2024年02月06日
    瀏覽(89)
  • AJAX學(xué)習(xí)筆記8 跨域問題及解決方案

    AJAX學(xué)習(xí)筆記8 跨域問題及解決方案

    AJAX學(xué)習(xí)筆記7 AJAX實(shí)現(xiàn)省市聯(lián)動(dòng)_biubiubiu0706的博客-CSDN博客 跨域:指一個(gè)域名的網(wǎng)頁去請求另外一個(gè)域名資源.比如百度頁面去請求京東頁面資源. 同源與不同源三要素:協(xié)議,域名,端口 協(xié)議一致,域名一致,端口一致.才算是同源.其他一律不同源 新建項(xiàng)目 測試: 1.window.open(); window.lo

    2024年02月09日
    瀏覽(89)
  • SpringBoot 解決跨域問題的 5 種方案!

    供學(xué)習(xí)使用 SpringBoot 解決跨域問題的 5 種方案! 跨域問題指的是不同站點(diǎn)之間,使用 ajax 無法相互調(diào)用的問題??缬騿栴}本質(zhì)是瀏覽器的一種保護(hù)機(jī)制,它的初衷是為了保證用戶的安全,防止惡意網(wǎng)站竊取數(shù)據(jù)。但這個(gè)保護(hù)機(jī)制也帶來了新的問題,它的問題是給不同站點(diǎn)之間

    2024年02月08日
    瀏覽(89)
  • 【uniapp】uni.request請求跨域問題解決方案

    【uniapp】uni.request請求跨域問題解決方案

    例如,運(yùn)行H5頁面,請求一個(gè)地址資源,如果不是本站地址,瀏覽器就會(huì)報(bào)跨域錯(cuò)誤,這樣訪問受限 例如,項(xiàng)目代碼里是這樣寫的,運(yùn)行H5測試 因?yàn)?https://gitcode.net 不是本站地址,根據(jù)瀏覽器同源策略,是會(huì)報(bào)跨域錯(cuò)誤, 打開項(xiàng)目的 manifest.json 文件,以源碼視圖查看,添加以

    2024年02月05日
    瀏覽(98)
  • Spring Boot 解決跨域問題的 5種方案

    ?跨域問題本質(zhì)是瀏覽器的一種保護(hù)機(jī)制,它的初衷是為了保證用戶的安全,防止惡意網(wǎng)站竊取數(shù)據(jù)。 在請求時(shí),如果出現(xiàn)了以下情況中的任意一種,那么它就是跨域請求: 協(xié)議不同,如 http 和 https; 域名不同; 端口不同。 也就是說, 即使域名相同,如果一個(gè)使用的是

    2024年02月15日
    瀏覽(85)
  • 分享后端解決跨域問題的三種方案

    分享后端解決跨域問題的三種方案

    跨源資源共享( CORS——Cross-Origin Resource Sharing ,跨源資源共享,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機(jī)制,該機(jī)制通過允許服務(wù)器標(biāo)示除了它自己以外的其它源(域、協(xié)議或端口),使得瀏覽器允許這些源訪問加載自己的資源。跨源資源共享還通過一種機(jī)制來

    2024年02月02日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包