国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

面試官提問:為什么表單提交不會出現跨域

liguoquan
2025年4月29日 17:36 本文熱度 155
:面試官提問:為什么表單提交不會出現跨域


面試官提問:為什么表單提交不會出現跨域

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

具體題目是:為什么表單提交不會出現跨域,而使用 Ajax 發送 post 請求時卻會出現跨域的情況。

那什么情況下會出現跨域:

協議 + 域名 + 端口 三者只要有一個不一樣,就會出現跨域。

那為什么表單能夠跨域發送請求,而 Ajax 卻不能發送跨域請求

  • 歸根結底:跨域是為了阻止用戶讀取到另一個域名下的內容

  • 而 Ajax 可以獲取響應,但瀏覽器認為這不安全,所以攔截了響應

  • 但是表單并不會獲取新的內容,所以可以發起跨域請求。

前者是發送跨域請求給到后端,并不去接收服務器返回的信息

后者是發送跨域請求給到后端,并接收服務器返回的信息

那該如何解決跨域

#方法一:使用 JSONP

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

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

代碼解釋

請求成功后,前端得執行回調函數,但 script 腳本是執行不到 success() 方法的。

這是因為 success() 方法 并不是 全局函數,所以需要將 success() 方法 改成全局函數

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

并在請求參數的基礎上,需要添加 callback 參數,值對應需要回調的函數名

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

使用

js
代碼解讀
復制代碼
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 優缺點

  • 簡單兼容性好,可用于解決主流瀏覽器的跨域數據訪問的問題

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


#方法二:CORS

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

后端解決跨域問題,就是在服務器端給響應添加頭信息

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

在 node 上處理

js
代碼解讀
復制代碼
// 方式一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");        // 關鍵點    next()})
js
代碼解讀
復制代碼
// 方式二const Koa = require('koa')const app = new Koa()app.all("*", (req, res, next) => {    // 設置域名跨域    res.header("Access-Control-Allow-Origin", "http://127.0.0.1");    // 跨域允許的請求方式    res.header("Access-Control-Allow-Headers", "DELETE,PUT,POST,GET,OPTIONS");        // 關鍵點    next()})

在 Nginx 上處理

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

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

主站蜘蛛池模板: 日韩毛片无码永久免费看 | 综合图区亚洲偷自拍 | 91麻豆成人 | 国产成人精品无人区一区 | 丰满熟妇被掹烈进入高清片 | 国产 欧美 亚洲 中文字幕 | 国产精品久久久久久99人妻精品 | 日本里番大全无码工口 | 日韩人妻精品无码久久上司 | 狂猛欧美激情性xxxx大豆行情 | 免费无码又爽又刺激高潮的动漫 | 麻豆精品在线视频 | 丁香婷婷在线视频 | 国产一区免费在线观看 | 亚洲国产天堂久久麻豆 | 国产熟妇无码A片AAA毛片视频 | 免费国产黄网站在线观看动图 | 无码日本大胆XXXX | 国产亚洲精品美女久久久久 | 亚洲国产精品国自产拍av | 亚洲国产片精品一区二区三区 | 亚洲国产日韩女人aaaaaa毛片中文在线字幕 | 亚洲国产精品一区二区高清无码 | 成人看片黄a免费看那个网址 | 人妻被粗大猛进猛出国产 | 精东天美麻豆果冻传媒mv | 在线观看成人网站 | 亚洲中久无码不卡永久 | 护士人妻hd中文字幕 | 国产精品久久久国产盗摄 | 国产极品JK白丝喷白浆羞羞 | 无码国内精品久久人妻蜜桃 | 日韩精品无码熟人妻我不卡 | 日韩精品无码免费专区网站 | 欧美激情一区二区三区四区 | 国产精品久AAAAA片 | 日韩av无码久久一区二区 | 中文字幕日本乱码仑区在线 | 综合图片亚洲综合网站 | 国产精品国产三级国产av′ | 亚洲A片无码一区二区三区公司 |