跨域技術(JSONP與CROS)

JSONP

我們發現,Web頁面上調用js文件時不受是否跨域的影響,凡是擁有"src"這個屬性的標簽都擁有跨域的能力,比如<script>、<img>、<iframe>。那就是說如果要跨域訪問數據,就服務端只能把數據放在js格式的文件里。恰巧我們知道JSON可以簡潔的描述復雜數據,而且JSON還被js原生支持,所以在客戶端幾乎可以隨心所欲的處理這種格式的數據。然后客戶端就可以通過與調用腳本一模一樣的方式,來調用跨域服務器上動態生成的js格式文件。客戶端在對JSON文件調用成功之后,也就獲得了自己所需的數據。這就形成了JSONP的基本概念。允許用戶傳遞一個callback參數給服務端,然后服務端返回數據時會將這個callback參數作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。

function dll(response){alert(response.city);
}
var script=document.createElement("script");
script.src="http://freegeoip.net/json/?callback=dll";
document.body.insertBefore(script,document.body.firstChild);

?三步走:創建script、指定src,插入到文檔。

jQuery支持JSONP的調用。在另外的一個域名中指定好回調函數名稱,就可以用下面的形式來就加載JSON數據。
url?callback=?
jQuery.getJSON(url + "&callback=?", function(data) ?{ ?
? alert(data.a + data.b); ?
});
服務端當然也要提供JSONP的支持,其實只要提供讀寫callback這個params就可以了。
跨域資源共享(CORS)
Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定義了在跨域訪問資源時瀏覽器和服務器之間如何通信。CORS背后的基本思想是使用自定義的HTTP頭部允許瀏覽器和服務器相互了解對方,從而決定請求或響應成功與否。

CORS與JSONP相比,更為先進、方便和可靠。

1、 JSONP只能實現GET請求,而CORS支持所有類型的HTTP請求。
2、 使用CORS,開發者可以使用普通的XMLHttpRequest發起請求和獲得數據,比起JSONP有更好的錯誤處理。
3、 JSONP主要被老的瀏覽器支持,它們往往不支持CORS,而絕大多數現代瀏覽器都已經支持了CORS。
對一個簡單的請求,沒有自定義頭部,要么使用GET,要么使用POST,它的主體是text/plain,請求用一個名叫Orgin的額外的頭部發送。Origin頭部包含請求頁面的頭部(協議,域名,端口),這樣服務器可以很容易的決定它是否應該提供響應。
服務器端對于CORS的支持,主要就是通過設置Access-Control-Allow-Origin來進行的。
Header set Access-Control-Allow-Origin *?
為了防止XSS攻擊我們的服務器, 我們可以限制域,比如
Access-Control-Allow-Origin: http://blog.csdn.net
很多服務都已經提供了CORS支持,比如 AWS 支持跨域資源分享功能CORS,向S3上傳不需要代理。

轉載于:https://www.cnblogs.com/dll-ft/p/5761556.html

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

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

相關文章

python3 array為什么不能放不同類型的數據_小白入門Python數據科學全教程lt;一gt;...

前言本文講解了從零開始學習Python數據科學的全過程&#xff0c;涵蓋各種工具和方法你將會學習到如何使用python做基本的數據分析你還可以了解機器學習算法的原理和使用說明先說一段題外話。我是一名數據科學家&#xff0c;在用SAS做分析超過5年后&#xff0c;我決定走出舒適區…

c winform 上傳文件到mysql_C# winform DevExpress上傳圖片到數據庫【轉】

實現功能如下圖&#xff1a;注明&#xff1a;此文使用的是DevExpress控件&#xff0c;winform 原生控件也是一樣使用方法。1.點擊選擇圖片按鈕&#xff0c;功能為通過對話框選擇要上傳的文件&#xff0c;并將該文件在下面的PictureEdit中顯示出來。具體代碼如下&#xff1a;pri…

V 8 nfs+drbd+heartbeat

V 8 nfsdrbdheartbeatnfsdrbdheartbeat&#xff0c;nfs或分布式存儲mfs只要有單點都可用此方案解決在企業實際生產場景中&#xff0c;nfs是中小企業最常用的存儲架構解決方案之一&#xff0c;該架構方案部署簡單、維護方便&#xff0c;只需通過配inotifyrsync簡單而高效的數據同…

nodemailer使用_如何使用Nodemailer使用HTML作為內容發送電子郵件 Node.js

nodemailer使用Prerequisite: 先決條件&#xff1a; How to send emails using Nodemailer | Node.js 如何使用Nodemailer發送電子郵件。 Node.js How to send emails with attachments using Nodemailer | Node.js 如何使用Nodemailer發送帶有附件的電子郵件。 Node.js This …

angularjs 元素重復指定次數_[LeetCode] 442. 數組中重復的數據

[LeetCode] 442. 數組中重復的數據題目鏈接&#xff1a; https://leetcode-cn.com/problems/find-all-duplicates-in-an-array難度&#xff1a;中等通過率&#xff1a;61.5%題目描述:給定一個整數數組 a&#xff0c;其中1 ≤ a[i] ≤ n &#xff08; n 為數組長度&#xff09;,…

docker 安裝mysql 實戰文檔_docker 安裝mysql

PassJava (佳必過) 項目全套學習教程連載中&#xff0c;關注公眾號第一時間獲取。docker 安裝mysql1.下載鏡像sudo docker pull mysql:5.7ubuntuVM-0-13-ubuntu:~$ sudo docker pull mysql:5.75.7: Pulling from library/mysqlc499e6d256d6: Pull complete22c4cdf4ea75: Pull c…

python 補前導零_Python正則表達式| 程序從IP地址中刪除前導零

python 補前導零Given an IP address as input, write a Python program to remove leading zeros from it. 給定一個IP地址作為輸入&#xff0c;編寫一個Python程序以從中刪除前導零。 Examples: 例子&#xff1a; Input: 216.08.094.196Output: 216.8.94.196Input: 216.08…

眼球追蹤

眼球追蹤類似于頭部追蹤&#xff0c;但是圖像的呈現取決于使用者眼睛所看的方向。例如&#xff0c;人們可以用“眼神”完成一種鐳射槍的瞄準。眼球追蹤技術很受VR專家們密切關注。Oculus創始人帕爾默拉奇就曾稱其為“VR的心臟”。對于人眼位置的檢測&#xff0c;能夠為當前所處…

mysql 創建分區表_Mysql分區表及自動創建分區Partition

Range分區表建表語句如下&#xff0c;其中分區鍵必須和id構成主鍵和唯一鍵CREATE TABLE test1 (id char(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘自增主鍵(guid)‘,create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘創建時間‘,partition_key …

python下載文件暫停恢復_Python關于Threading暫停恢復解決辦法

我們都知道python中可以是threading模塊實現多線程, 但是模塊并沒有提供暫停, 恢復和停止線程的方法, 一旦線程對象調用start方法后, 只能等到對應的方法函數運行完畢. 也就是說一旦start后, 線程就屬于失控狀態. 不過, 我們可以自己實現這些. 一般的方法就是循環地判斷一個標志…

信息系統狀態過程圖_過程狀態圖中使用的重要術語| 操作系統

信息系統狀態過程圖1)上下文切換 (1) Context Switching) Whenever a process is transferred within the system, it moves within different states. These states are known as the process states. When a process goes from one state to another state inside the system…

mysql 吧庫下的表名都加_mysql數據庫表名大小寫問題

mysql數據庫表名大小寫問題mysql數據庫linux版本表名、字段名默認大小寫敏感&#xff0c;即區分大小寫。查看mysql有關大小寫參數&#xff1a;lower_case_file_system是一個只讀參數&#xff0c;無法被修改&#xff0c;這個參數是用來告訴你在當前的系統平臺(linux\windows等)下…

rgb 灰色_金屬+RGB+無線,我要買爆這款海盜船VIRTUOSO鑒賞家游戲耳機

海盜船最近新出的旗艦耳機&#xff0c;VIRTUOSO RGB Wireless SE&#xff0c;中文名叫鑒賞家。耳機一改往日歐美電競風&#xff0c;改走金屬質感高大上簡約風&#xff0c;不過講真&#xff0c;這顏值我吃起來很香。考慮文章過長&#xff0c;我先概括一下入手理由&#xff0c;具…

python 基類 派生類_在Python中具有兩個子(派生)類的繼承示例

python 基類 派生類In this program, we have a parent class named Details and two child classes named Employee and Doctor, we are inheritance the class Details on the classes Employee and Doctor. And, finally creating two objects of Employee and Doctor class…

連接postgresql

# psycopg2enginecreate_engine(postgresqlpsycopg2://scott:tigerlocalhost/mydatabase)#python 連接postgresql使用psycopg2作為默認的DBAPIThe first time a method like Engine.execute()orEngine.connect()is called, the Engine establishes a real DBAPI connection to …

n的階乘程序python_Python程序對N階乘的尾隨零進行計數

n的階乘程序pythonFormula used: 使用的公式&#xff1a; Trailing 0s in N! Count of 5s in prime factors of n! floor(n/5) floor(n/25) floor(n/125) ....Example: 例&#xff1a; Input: N 23Output: 4Factorial of 23 is 25852016738884976640000 which has four …

c mysql使用場景_Mysql 場景

1個SQL題&#xff0c;1個場景題&#xff0c;會有點難度&#xff01;SQL題該SQL題大量涉及到row_number&#xff0c;case when&#xff0c;group by等高級用法&#xff0c;有一定的實用價值&#xff0c;總結出來&#xff0c;供日后參考Question.1&#xff1a;分組匯總給定篩選條…

以己為壑

2019獨角獸企業重金招聘Python工程師標準>>> 今天把軟件工程里面關于面向對象的設計學完了,使我對面向對象OOA和OOD的思想有了進一步的認識,各科知識千溝萬壑,犬牙交錯,的確是這樣,能蒙住自己眼的永遠是你自己,而不是這個世界,因為美就在那里;裹住自己雙足的的永遠是…

macos安裝vscode_如何使用VSCode進行PostgreSQL開發及調試

Visual Studio Code (VSCode)是一個輕量級但功能強大的源代碼編輯器&#xff0c;可在桌面上運行&#xff0c;適用于Windows&#xff0c;macOS和Linux。 它內置了對JavaScript&#xff0c;TypeScript和Node.js的支持&#xff0c;并具有豐富的其他語言(如C&#xff0c;C&#xff…

最小生成樹 kruskal_使用Kruskal算法求解Java最小生成樹問題

最小生成樹 kruskalIn Electronic Circuit we often required less wiring to connect pins together. We can model this wiring problem with a connected, undirected graph G(V, E), where V is the set of pins, E is the set of possible interconnections between pair …