狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

面試官提問:為什么表單提交不會(huì)出現(xiàn)跨域

liguoquan
2025年4月29日 17:36 本文熱度 1648
:面試官提問:為什么表單提交不會(huì)出現(xiàn)跨域


面試官提問:為什么表單提交不會(huì)出現(xiàn)跨域

這是之前面試的時(shí)候面試官提問的一道面試題。

具體題目是:為什么表單提交不會(huì)出現(xiàn)跨域,而使用 Ajax 發(fā)送 post 請(qǐng)求時(shí)卻會(huì)出現(xiàn)跨域的情況。

那什么情況下會(huì)出現(xiàn)跨域:

協(xié)議 + 域名 + 端口 三者只要有一個(gè)不一樣,就會(huì)出現(xiàn)跨域。

那為什么表單能夠跨域發(fā)送請(qǐng)求,而 Ajax 卻不能發(fā)送跨域請(qǐng)求

  • 歸根結(jié)底:跨域是為了阻止用戶讀取到另一個(gè)域名下的內(nèi)容

  • 而 Ajax 可以獲取響應(yīng),但瀏覽器認(rèn)為這不安全,所以攔截了響應(yīng)

  • 但是表單并不會(huì)獲取新的內(nèi)容,所以可以發(fā)起跨域請(qǐng)求。

前者是發(fā)送跨域請(qǐng)求給到后端,并不去接收服務(wù)器返回的信息

后者是發(fā)送跨域請(qǐng)求給到后端,并接收服務(wù)器返回的信息

那該如何解決跨域

#方法一:使用 JSONP

原理是利用<script>標(biāo)簽的跨域特性,可以不受限制地從其他域中加載資源

js
代碼解讀
復(fù)制代碼
function jsonp(options) {    var script = document.createElement('script');        // 參數(shù)處理    var params = '';    for (var attr in options.data) {        params += '&' + attr + '=' + options.data[attr];    }        // 設(shè)置回調(diào)函數(shù)    var successCallback =  `successCallback`;    window[successCallback] = options.success;        script.src = options.url + '?callback=' + successCallback + params;    document.body.appendChild(script);}

代碼解釋

請(qǐng)求成功后,前端得執(zhí)行回調(diào)函數(shù),但 script 腳本是執(zhí)行不到 success() 方法的。

這是因?yàn)?nbsp;success() 方法 并不是 全局函數(shù),所以需要將 success() 方法 改成全局函數(shù)

js
代碼解讀
復(fù)制代碼
var successCallback =  `successCallback`;window[successCallback] = options.success;

并在請(qǐng)求參數(shù)的基礎(chǔ)上,需要添加 callback 參數(shù),值對(duì)應(yīng)需要回調(diào)的函數(shù)名

js
代碼解讀
復(fù)制代碼
script.src = options.url + '?callback=' + successCallback + params;

使用

js
代碼解讀
復(fù)制代碼
var btn = document.getElementById('btn');btn.addEventListener('click', function() {    jsonp({        url: 'http://localhost:3001/getUserInfo',        data: { name: '浩浩' },        success: function(data) {            alert('UserInfo:' + JSON.stringify(data));        }    })});

JSONP 優(yōu)缺點(diǎn)

  • 簡(jiǎn)單兼容性好,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題

  • 僅支持get方法具有局限性,不安全可能會(huì)遭受 XSS 攻擊


#方法二:CORS

CORS 是一個(gè) W3C 標(biāo)準(zhǔn),全稱是"跨域資源共享"(Cross-origin resource sharing)。 CORS 需要瀏覽器和服務(wù)器同時(shí)支持。但是目前基本上瀏覽器都支持,所以我們只要保證服務(wù)器端服務(wù)器實(shí)現(xiàn)了 CORS 接口,就可以跨源通信。

后端解決跨域問題,就是在服務(wù)器端給響應(yīng)添加頭信息

NameRequiredComments
Access-Control-Allow-Origin必填允許請(qǐng)求的域
Access-Control-Allow-Methods必填允許請(qǐng)求的方法
Access-Control-Allow-Headers可選預(yù)檢請(qǐng)求后,告知發(fā)送請(qǐng)求需要有的頭部
Access-Control-Allow-Credentials可選表示是否允許發(fā)送cookie,默認(rèn)false;
Access-Control-Max-Age可選本次預(yù)檢的有效期,單位:秒;

在 node 上處理

js
代碼解讀
復(fù)制代碼
// 方式一const Koa = require('koa')const app = new Koa()app.all("*", (req, res, next) => {    res.header("Access-Control-Allow-Origin", "*");    res.header("Access-Control-Allow-Headers", "content-type");        // 關(guān)鍵點(diǎn)    next()})
js
代碼解讀
復(fù)制代碼
// 方式二const Koa = require('koa')const app = new Koa()app.all("*", (req, res, next) => {    // 設(shè)置域名跨域    res.header("Access-Control-Allow-Origin", "http://127.0.0.1");    // 跨域允許的請(qǐng)求方式    res.header("Access-Control-Allow-Headers", "DELETE,PUT,POST,GET,OPTIONS");        // 關(guān)鍵點(diǎn)    next()})

在 Nginx 上處理

js
代碼解讀
復(fù)制代碼
location /example {  add_header Access-Control-Allow-Origin *;  add_header Access-Control-Allow-Methods *;  # add_header Access-Control-Allow-Methods GET,POST,OPTIONS;}
標(biāo)簽:

該文章在 2025/4/29 17:36:37 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved