跨域獲取后臺數據undefined_同源策略amp;JSONP跨域

同源策略&JSONP跨域

同源策略

對于同源的定義,MDN給出了這樣的解釋:如果兩個頁面的協議,端口(如果有指定)和主機都相同,則兩個頁面具有相同的源。

如何確定兩個頁面是否同源,只要比較兩個頁面的協議、域名和端口即可。

假設有這樣一個頁面http://zhihu.com/main.html,相對于它給出同源檢測的示例:

2619fd6412f7fb5267159aa338ac1bb5.png

同源策略是瀏覽器最核心也最基本的安全功能。保證用戶信息的安全,防止惡意的網站竊取數據。限制了從同一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的重要安全機制。

協議、端口、域名只要有一個不相同,就不符合同源策略,就會出現跨域。最常見的就是AJAX請求數據。

跨域的解決辦法

JSONP

JSONP是如何產生的呢?

1.我們都知道使用AJAX直接請求普通文件存在跨域無權限訪問的問題,甭管你是什么,只要你是跨域請求,一律不準不可以的;
2.但是我們知道HTML中的<script><img><iframe>等標簽不受同源策略的影響,擁有跨域的能力。那我們是否能利用這個特性從其他域下獲取數據呢
3.我們得出結論,要想在web端就跨域訪問其他域的數據就有一個辦法,那就是把數據裝進 JS 格式的文件里,這樣客戶端就能夠調用了。
4.但是獲取的數據是做為 JS 來執行。于是就有一個問題,數據是 JSON 格式的數據,直接作為 JS 運行的話我如何去得到這個數據來操作呢?
5.于是我們想到是否可以提前在頁面上聲明一個函數,通過接口傳參的方式發送給后臺,在經過后臺處理發送給前端(所以JSONP 需要對應接口的后端的配合才能實現。)

示例

 <script src="http://api.jirengu.com/weather.php?callback=showData"></script>

這個請求到達后端后,后端會去解析callback這個參數獲取到字符串showData,在發送數據做如下處理:

之前后端返回數據: {"city": "hangzhou", "weather": "晴天"} 現在后端返回數據: showData({"city": "hangzhou", "weather": "晴天"}) 前端script標簽在加載數據后會把 「showData({“city”: “hangzhou”, “weather”: “晴天”})」做為 js 來執行,這實際上就是調用showData這個函數,同時參數是 {“city”: “hangzhou”, “weather”: “晴天”}。 用戶只需要在加載提前在頁面定義好showData這個全局函數,在函數內部處理參數即可。

<script>
function showData(ret){
console.log(ret);
}
</script>
<script src="http://api.jirengu.com/weather.php?callback=showData"></script>

JSONP是通過 script 標簽加載數據的方式去獲取數據當做 JS 代碼來執行 提前在頁面上聲明一個函數,函數名通過接口傳參的方式傳給后臺,后臺解析到函數名后在原始數據上「包裹」這個函數名,發送給前端。換句話說,JSONP 需要對應接口的后端的配合才能實現。

具體實現 :

server.js代碼

9e71f316f10c6b89903e1648eb8691a8.png

index.html代碼

48fec99e7085e50b4608c438c1b9c2a5.png

打開Git Bash,進入server.js所在文件夾,輸入 node server.js ,瀏覽器打開 http://localhost:8080/index.html

于是我們得出JSONP的原理

  • JSONP本質上是利用 <script><img><iframe>等標簽不受同源策略限制,可以從不同域加載并執行資源的特性,來實現數據跨域傳輸。
  • JSONP由兩部分組成:回調函數和數據。回調函數是當響應到來時應該在頁面中調用的函數,而數據就是傳入回調函數中的JSON數據。
  • JSONP的想法就是,與服務端約定好一個回調函數名,服務端接收到請求后,將返回一段 JS代碼,在這段JS代碼中調用了約定好的回調函數,并且將數據作為參數進行傳遞。當網頁接收到這段 Javascript 代碼后,就會執行這個回調函數,這時數據已經成功傳輸到客戶端了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534003.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534003.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 除數不能為零的報錯有哪些_【社區精選40】Python錯誤處理及代碼調試方法(文末贈書中獎名單)...

本文整理自愛數據學院中的問答更多精彩問答&#xff0c;進入下方社區網站查看http://www.lovedata.cn/invitation社區精選話題 第40期Python錯誤處理及代碼調試方法一次寫完代碼程序并能夠正常運行的概率很小很小&#xff0c;總會有各種各樣的錯誤bug需要處理。有的報錯簡單&a…

利用python批量查詢企業信息_python實現批量獲取指定文件夾下的所有文件的廠商信息...

本文實例講述了python實現批量獲取指定文件夾下的所有文件的廠商信息的方法。分享給大家供大家參考。具體如下&#xff1a;功能代碼如下&#xff1a;import os, string, shutil,reimport pefileimport codecs, sysimport wximport struct#輸出中打印Unicode字符#sys.stdout co…

mac mysql prefpane_【MySQL數據庫開發之一】Mac下配置安裝數據庫-MySQL

本站文章均為那么從今天開始陸續會更新數據庫和Hibernate框架的博文&#xff0c;也是Himi學習的歷程記錄&#xff0c;希望大家能共同討論和研究&#xff1b;OK&#xff0c;本篇簡單介紹安裝吧&#xff0c;首先到MySQL官方網站&#xff1a;如上圖&#xff1a;點擊DOWNLOAD &…

系統新模塊增加需要哪些步驟_想要吸引人流,兒童樂園需要增加哪些新設備呢...

兒童樂園是現今最火爆的一個投資項目&#xff0c;因為它的主要消費群體是孩子&#xff0c;而現在的家長們對孩子們的寵愛&#xff0c;基本都會答應讓孩子們去兒童樂園里面玩耍。但是兒童樂園的投資經營者也會遇見一些小問題&#xff0c;例如兒童樂園添加設備要怎么選擇呢&#…

php mysql 圖像_php-向/從MySQL數據庫插入/查看圖像

我在DB中插入圖像時遇到問題.該表具有以下結構&#xff1a;> id-> INT(3)->自動增量>名稱-> VARCHAR(30)> extension-> VARCHAR(10)[可能太短]> img-> MEDIUMBLOB插入圖像的PHP代碼為&#xff1a;if($_FILES[file][error]0){$result is_uploaded_f…

照片打印預覽正常打印空白_小米發布口袋照片打印機,可無墨打印3寸背膠照片...

9月11日消息&#xff0c;小米推出一款小米口袋照片打印機。與之前的小米米家照片打印機相比&#xff0c;這款新品更加小巧便攜&#xff0c;體積接近充電寶大小&#xff0c;凈重僅181g&#xff0c;便于隨身攜帶。小米口袋照片打印機采用ZINK無墨技術打印&#xff0c;即使用嵌入紙…

c中獲取python控制臺輸出_在真實的tim中用C捕獲控制臺python打印

我正在嘗試從C創建一個python進程&#xff0c;并從python腳本獲取打印結果。在這就是我的C代碼&#xff1a;namespace ConsoleApp1{public class CreateProcess{public String PythonPath { get; set; }public String FilePath { get; set; }public String Arguments { get; se…

python三大編程語言_程序員最需要的三種編程語言

隨著科學技術的進步和新技術的進步&#xff0c;編程語言的種類越來越多&#xff0c;變化是程序員需要跟蹤和學習許多語言 然而&#xff0c;有太多的語言無法一一掌握 在目前的形式中&#xff0c;最需要掌握的三種編程語言是 現在判斷還不晚 坦白說&#xff0c;找工作很容易 它可…

MySQL優化調優有沒有做過_MySQL 調優/優化的 100 個建議

MySQL是一個強大的開源數據庫。隨著MySQL上的應用越來越多&#xff0c;MySQL逐漸遇到了瓶頸。這里提供 101 條優化 MySQL 的建議。有些技巧適合特定的安裝環境&#xff0c;但是思路是相通的。我已經將它們分成了幾類以幫助你理解。MySQL監控MySQL服務器硬件和OS(操作系統)調優&…

python語句print(type([1、2、3、4))_Python 學習第一天

一、學習內容1.print:表示輸出print (“hello world”)單行注釋&#xff1a;#多行注釋&#xff1a;“““ ”””2.運算符注意&#xff1a;才表示等于&#xff0c;&#xff01;表示不等于3.位運算符&#xff5e;按位取反&#xff1a;&#xff5e;104.變量和賦值teacher“老馬的…

mysql核心參數_MySQL技術體系之核心參數

本文主要基于MySQL 5.7版本的數據庫環境&#xff0c;總結my.cnf文件中核心參數的配置使用&#xff0c;讓更多的人對MySQL技術體系有更全面、更專業的深度了解。一、客戶端核心參數1、port端口號&#xff0c;默認33062、socketSocket文件地址&#xff0c;默認以.sock為文件名稱后…

svd降維 python案例_SVD(奇異值分解)Python實現

注&#xff1a; 在《SVD(異值分解)小結 》中分享了SVD原理&#xff0c;但其中只是利用了numpy.linalg.svd函數應用了它&#xff0c;并沒有提到如何自己編寫代碼實現它&#xff0c;在這里&#xff0c;我再分享一下如何自已寫一個SVD函數。但是這里會利用到SVD的原理&#xff0c;…

salt 啟動mysql_saltsack自動化配置day03:服務部署mysql部署

一、MySQL集群需求分享1、抽象&#xff1a;功能模塊把基礎的寫成通用服務部署也要抽象出來模塊redis內存有的多&#xff0c;有的少&#xff0c;可以config set在線更改redis 安裝、配置、啟動mysql 安裝、配置(my.cnf可以統一 目錄默認配置可以統一)master: server_id 1111slav…

jtag引腳定義_從逆向分析的角度學習硬件調試技巧JTAG,SSD和固件提取

我想從逆向的角度做了深入了解JTAG&#xff0c;JTAG是許多嵌入式CPU使用的硬件級別調試機制&#xff0c;我希望通過這篇文章從逆向工程師的角度解釋如何使用JTAG&#xff0c;并在此過程中提供一些實際示例。0x01 研究目標通過這篇文章&#xff0c;我希望做到以下幾點&#xff1…

python virtualenv conda_在vscode中啟動conda虛擬環境的思路詳解

問題&#xff1a;cudatoolkit cudnn 通過conda 虛擬環境安裝&#xff0c;先前已經使用virtualenv安裝tf&#xff0c;需要在conda虛擬環境中啟動外部python虛擬環境思路&#xff1a;conda prompt即將 [虛擬環境位置] 以參數形式傳入 [activate.bat]VSOCDE中的設置添加以下語句{&…

python如何導入圖片imread_OpenCV 使用imread()函數讀取圖片的六種正確姿勢

經常看到有人在網上詢問關于imread()函數讀取圖片失敗的問題。今天心血來潮&#xff0c;經過實驗&#xff0c;總結出imread()調用的四種正確姿勢。通常我要獲取一張圖片的絕對路徑是這樣做的&#xff1a;在圖片上右鍵——屬性——安全——對象名稱。然后復制對象名稱就得到了圖…

python2.7與3.7腳本轉換_python 2.7 - python 3.7 升級記錄

更換的模塊python 3.7 模塊名python 2.7 模塊名python 3.7 包python 2.7包pymysqlMySQLdbPyMySQLMySQL-pythonpdfminerpdfminerpdfminer.sixpdfminerurllib.parseurlparse自帶自帶htmlHTMLParser自帶HTMLparser語法變化1. print 修改為 print()2. except Exception, e 修改為 e…

遠程過程調用失敗_Java開發大型互聯網RPC遠程調用服務實現之問題處理方案

引言RPC(Remote Procedure Call Protocol)——遠程過程調用協議&#xff0c;它是一種通過網絡從遠程計算機程序上請求服務&#xff0c;而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在&#xff0c;如TCP或UDP&#xff0c;為通信程序之間攜帶信息數據。在OSI網絡…

chrome 新的session 設置_為什么還是由這么多人搞不懂Cookie、Session、Token?

作者&#xff1a;不學無數的程序員鏈接&#xff1a;https://urlify.cn/Yfm6Vr# Cookie洛&#xff1a;大爺&#xff0c;樓上322住的是馬冬梅家吧&#xff1f; 大爺&#xff1a;馬都什么&#xff1f; 夏洛&#xff1a;馬冬梅。 7大爺&#xff1a;什么都沒啊&#xff1f; 夏洛…

mysql for update用處_for update的作用和用法

一、for update定義for update是一種行級鎖&#xff0c;又叫排它鎖&#xff0c;一旦用戶對某個行施加了行級加鎖&#xff0c;則該用戶可以查詢也可以更新被加鎖的數據行&#xff0c;其它用戶只能查詢但不能更新被加鎖的數據行&#xff0e;如果其它用戶想更新該表中的數據行&…