瀏覽器跨域問題分析

来源:https://www.cnblogs.com/windcat/archive/2020/03/25/12569552.html

瀏覽器的同源策略:協議相同、功能變數名稱相同、埠相同。所有瀏覽器廠商遵循這種策略。 非同源(跨域)共有三種行為受到限制: cookie、localstorage、和IndexDB無法獲取 DOM無法獲取 ATAX請求不能發送 這種同源性會有效的阻止CSRF(跨站請求)攻擊。 瀏覽器請求分為兩種:(CORS ...


瀏覽器的同源策略:協議相同功能變數名稱相同埠相同。所有瀏覽器廠商遵循這種策略。

非同源(跨域)共有三種行為受到限制:

  1. cookie、localstorage、和IndexDB無法獲取
  2. DOM無法獲取
  3. ATAX請求不能發送

這種同源性會有效的阻止CSRF(跨站請求)攻擊。

瀏覽器請求分為兩種:(CORS請求)

  1. 簡單請求:只要滿足一下方式中的兩種,視為簡單
  • 請求方式是GET、POST、HEAD
  • HTTP請求頭不超過如下欄位:   ACCEPT、ACCEPT-LANGUAGE、Last-Event-ID、Content-langage、content-type
  • 請求中的任意XHR對象均沒有註冊事件反射器
  • XHR對象可以使用XHR.upload屬性訪問,請求中沒有使用ReadableStream對象

    對於簡單請求瀏覽器會直接發送請求,伺服器返迴響應給瀏覽器,併在響應體中攜帶相關信息供瀏覽器判斷是否跨站

  2. 非簡單請求

    例如PUT、DELETE、CONTENT-TYPE:aplication/Json

    非簡單請求會在正式通信之前,使用options方法發起一個預檢請求到伺服器,瀏覽器先詢問伺服器當前網頁所在的功能變數名稱是否在伺服器的許可名單中,以及可以使用那些HTTP方法和頭信息欄位,只有得到肯定答覆,瀏覽器才會發出正式的XHR請求,否則報錯。

 

跨域手段

  1. AJAX請求跨域

    由瀏覽器和伺服器根據HTTP頭域或Access-control開頭相關欄位協商處理

  2. JSONP跨域

    利用script或img等標簽能夠跨域載入來實現,瀏覽器通過GET方法載入這些標簽(業務對於一些重要的請求,不能夠使用get方法提交數據,必須使用post方法,這樣就無法利用JSONP進行跨域請求)

  3. 伺服器轉發

 


您的分享是我們最大的動力!

更多相關文章
  • 經常提到資料庫的事務,那你知道資料庫還有事務隔離的說法嗎,事務隔離還有隔離級別,那什麼是事務隔離,隔離級別又是什麼呢?本文就幫大家梳理一下。 MySQL 事務 本文所說的 MySQL 事務都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事務的。 資料庫事務指的是一組數據操作,事務內的操作要 ...
  • 不適配深色模式 直接在info新加一個欄位 設置值為 適配深色模式 適配深色模式info裡面的那個欄位就不用添加了 但是需要在每個 裡面增加下麵的這個方法 在這個方法里去判斷和更改當前界面所有元素的顏色 我專門做了一個單例,把應用程式中的所有顏色都單獨保存起來 還有兩個方法,分別是把所有的顏色改成與 ...
  • 1.win10安裝ubuntu 18.04或Ubuntu發行版 搜索:Microsoft Store >搜索:Ubuntu //下載即可 >下載完之後安裝,啟動即可. 搜索:ubuntu啟動即可. 註意:源最好不要替換 2.安裝所需的庫 安裝emacs的cscope + autocomplete需要 ...
  • 本文旨在成為iOS動畫的入門讀物,目的是詳盡地介紹不同的實現方法。 鑒於該主題的廣泛性,我們將在相當高的層次上簡潔地涵蓋每個部分。這樣做的目的是通過一組選項來教育讀者將動畫添加到他/她的iOS應用程式中。 在我們開始討論與IOS相關的主題之前,讓我們先簡單地看一看動畫的速度。 60 Fps動畫 通常 ...
  • 商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。 For commercial use, please contact the author for authorization. For non commercial use, please indicate the source. 協議(Lice ...
  • 結合擴展運算符使用 function foo(a,b,c){ console.log(a,b,c); } foo(...[1,2,3]);//將數組展開,一一對應 用法: const arr=["cyy",18,["html","css"]]; function info(name,age,hobb ...
  • //ES5 對象 const getInfo=(id=1)=>{ //ajax... const name="cyy"; const age=18; return { name:name, age:age, say:function(){ console.log(this.name+this.age ...
一周排行
  • 在上篇文章中我們已經知道了多線程是什麼了,那麼它到底可以幹嘛呢?這裡特別聲明一個前面的委托沒看的同學可以到上上上篇博文查看,因為多線程要經常使用到委托。源碼 一、非同步、同步 1.同步(在計算的理解總是要你措不及防,同步當線程做完一件事情之後,才會執行後續動作),同步方法慢,只有一個線程執行,非同步方法 ...
  • 本文主要是講解stopwatch對程式運行時間的準確測量 僅僅介紹裡面的StartNew()方法,Restart()方法和ElapsedMilliseconds { get;}屬性 public void StartNew():作用是對新的 System.Diagnostics.Stopwatch ...
  • 一、引言 RabbitMQ是Rabbit Message Queue的簡寫,但不能僅僅理解其為消息隊列,消息代理更合適。RabbitMQ是一個由 Erlang 語言開發的AMQP(高級消息隊列協議)的開源實現,其內部結構如下: RabbitMQ作為一個消息代理,主要和消息打交道,負責接收並轉發消息。 ...
  • TerminalMACS(Terminal Manager And Check System) 遠程終端管理和檢測系統 本文同步更新地址:https://dotnet9.com/11429.html 一、本系統可監控多種終端資源: 移動端 Android iOS PC端 Windows Linux ...
  • 首先,好消息是Goole將於2020年2月份發佈Chrome 80版本。本次發佈將推進Google的“漸進改良Cookie”策略,打造一個更為安全和保障用戶隱私的網路環境。 壞消息是,本次更新可能導致瀏覽器無法向服務端發送Cookie。如果你有多個不同功能變數名稱的應用,部分用戶很有可能出現會話時常被打斷的 ...
  • 在偶然一次調試某程式時,遇到提示: 無法載入程式集*****.XmlSerializers.dll,文件找不到(Could not load file or assembly ****.XmlSerializers.dll , FileNotFoundException...)。於是嘗試在項目屬性中 ...
  • 在上一篇abp(net core)+easyui+efcore實現倉儲管理系統——入庫管理之五(四十一) 文章中實現了入庫管理的列表頁面,並實現了控制器的代碼。在今天我們學習如何在前端實現新增入庫單信息界面。 ...
  • 面向對象 面向對象是一個抽象的概念,其本質就是對事物以抽象的方式建立對應的模型。 簡單來講,比如我有一隻鋼筆,那麼我就可以通過分析,可以得到 這隻鋼筆的材第是塑料,品牌是個雜牌 ,裡面裝的墨是黑色的,可以用。這時候就能建立一個鋼筆的模型,它在這裡應該有這些屬性: 圖是一個不正確的UML類圖,但是可以 ...
  • 在ASP.NET MVC中有四種過濾器類型 Action 1、在ASP.NET MVC項目中,新建文件夾Filter,然後新建類MyCustormFilter,繼承自ActionFilterAttribute類,我們來看下ActionFilterAttribute類有如下四個方法,從命名我應該就可以 ...
  • 你需要瞭解的 HTTP Status Code Intro 現在前後端分離的開發模式越來越流行,後端負責開發對應的 API,前端只需要 關註前端頁面的數據展示和前端邏輯即可。 對於前後端分離這種開發模式,我個人還是比較喜歡的,因為這樣可以讓更專業的人做更專業的事情,後端專註於做 API 的開發設計, ...
x