久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

什么是跨域,,為什么會(huì)有跨域問題的出現(xiàn)

 旭日_追逐的心 2021-10-29

轉(zhuǎn)自:https://www.cnblogs.com/cb1186512739/p/13304551.html

一、什么是同源策略,?

1,、同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,,它是瀏覽器最核心也最基本的安全功能,,如果缺少了同源策略,,瀏覽器很容易受到XSS,、CSFR等攻擊。
2,、所謂同源是指"協(xié)議+域名+端口"三者相同,,即便兩個(gè)不同的域名指向同一個(gè)ip地址,也非同源,。
3,、同源策略限制以下幾種行為:
(1)Cookie、LocalStorage 和 IndexDB 無法讀取
(2)DOM 和 Js對(duì)象無法獲得
(3)AJAX 請(qǐng)求不能發(fā)送

瀏覽器采用同源策略,,禁止頁面加載或執(zhí)行與自身來源不同的域的任何腳本,。換句話說瀏覽器禁止的是來自不同源的"document"或腳本,對(duì)當(dāng)前"document"讀取或設(shè)置某些屬性,。

情景: 

比如一個(gè)惡意網(wǎng)站的頁面通過iframe嵌入了銀行的登錄頁面(二者不同源),,如果沒有同源限制,惡意網(wǎng)頁上的javascript腳本就可以在用戶登錄銀行的時(shí)候獲取用戶名和密碼,。

瀏覽器中有哪些不受同源限制呢,?

<script>、<img>、<iframe>,、<link>這些包含 src 屬性的標(biāo)簽可以加載跨域資源,。但瀏覽器限制了JavaScript的權(quán)限使其不能讀、寫加載的內(nèi)容,。

常見的解決方案分為三種,,Nginx代理(前端實(shí)現(xiàn)),,JSONP(前端實(shí)現(xiàn)),,后臺(tái)設(shè)置(后端實(shí)現(xiàn))。

1.Nginx代理(前端實(shí)現(xiàn)):

案例說明:前端項(xiàng)目部署在8081端口,,后端8081端口,。

 

 

nginx監(jiān)聽8081端口,將前端從nginx監(jiān)聽的端口8081請(qǐng)求過來的請(qǐng)求,代理轉(zhuǎn)發(fā)到8080端口(8080為后端接口)


 

1,、JSONP

前端實(shí)現(xiàn):

復(fù)制代碼
$.ajax({
url: 'http://www.:8080/login',
type: 'get',
dataType: 'jsonp', // 請(qǐng)求方式為jsonp
jsonpCallback: "onBack", // 自定義回調(diào)函數(shù)名
data: {}
});
復(fù)制代碼

后端實(shí)現(xiàn)(SpringBoot)

復(fù)制代碼
@ControllerAdvice(basePackages = "com.zkn.learnspringboot.web.controller")
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice{

public JsonpAdvice() {

super("callback","jsonp");
}
}
復(fù)制代碼

(1)前端發(fā)起請(qǐng)求時(shí)候,,會(huì)加一個(gè)參數(shù)表示回調(diào)的函數(shù) 比如 callback=callback124 (callback 參數(shù)名也是可以自定義的,,和后端協(xié)商好就行)
         后端返回的數(shù)據(jù) callback124({“uid”:1})
(2)參考:前端常見跨域解決方案(全)  https://segmentfault.com/a/1190000011145364 

(3)JSONP的缺點(diǎn)

         JSONP只支持 GET 請(qǐng)求。

(4)原理

         JSONP 是通過動(dòng)態(tài)添加<script>標(biāo)簽來調(diào)用服務(wù)器的腳本(<script>含有src屬性,,src屬性沒有跨域限制),;而 Ajax 是通過 XHR(XmlHttpRequest) 對(duì)象,。

2、跨域技術(shù)-CORS (CrossOrigin Resources Sharing,,跨源資源共享)

     CORS是什么?

    CORS,,是 HTML5 的一項(xiàng)特性,,它定義了一種瀏覽器和服務(wù)器交互的方式來確定是否允許跨域請(qǐng)求。

    相對(duì)于 JSONP 這種解決方案來說,,使用CORS,,不需要要求服務(wù)器以指定格式返回?cái)?shù)據(jù)(包裝成JS腳本的格式:callback_func({ data }););CORS,,只需要在服務(wù)器端做一些通用設(shè)置。

前端實(shí)現(xiàn):

復(fù)制代碼
$.ajax({
type: "post",
url: 'http://192.168.45.152:8081/conference/user/bind',
async: false, // 使用同步方式
// 1 需要使用JSON.stringify 否則格式為 a=2&b=3&now=14...
// 2 需要強(qiáng)制類型轉(zhuǎn)換,,否則格式為 {"a":"2","b":"3"}
data: JSON.stringify({ 
a: 1,
b: '2',
now: new Date().getTime() // 注意不要在此行增加逗號(hào)
}),
headers: {
'Authentication':'xxxxxx'
},
contentType: "text/plain",
dataType: "json",
success: function(data) {
console.log(data)
} // 注意不要在此行增加逗號(hào)
});
復(fù)制代碼

 


后端實(shí)現(xiàn)(SpringBoot):

復(fù)制代碼
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
//設(shè)置允許跨域的路徑
registry.addMapping("/**")
//設(shè)置允許跨域請(qǐng)求的域名
.allowedOrigins("*")
//是否允許證書 不再默認(rèn)開啟
.allowCredentials(true)
//設(shè)置允許的方法
.allowedMethods("GET", "POST")
//跨域允許時(shí)間
.maxAge(3600);

}
}
復(fù)制代碼

CORS與JSONP的使用目的相同,,但是比JSONP更強(qiáng)大,。

JSONP只支持GET請(qǐng)求,CORS支持所有類型的HTTP請(qǐng)求,。JSONP的優(yōu)勢(shì)在于支持老式瀏覽器,,以及可以向不支持CORS的網(wǎng)站請(qǐng)求數(shù)據(jù)。

 

四,、跨域會(huì)話保持

對(duì)于前端來說,,seesion字段是存在cookie中的。在跨域過程中,,Cookie是默認(rèn)不發(fā)送的,。就算后端返回set-Cookie字段,前端也不會(huì)保存Cookie,更不會(huì)在下一次訪問的時(shí)候發(fā)送到后端了,。
因此只要前端可以把cookie發(fā)送到后端,,后端就可以根據(jù)cookie拿到seeion字段進(jìn)行會(huì)話驗(yàn)證。
進(jìn)過重新對(duì)CORS的學(xué)習(xí),,只要通過3步,,就可以讓會(huì)話保持。

1,、在ajax中設(shè)置,,withCredentials: true。
默認(rèn)情況下,,跨源請(qǐng)求不提供憑據(jù)(cookie,、HTTP認(rèn)證及客戶端SSL證明等)。通過將withCredentials屬性設(shè)置為true,,可以指定某個(gè)請(qǐng)求應(yīng)該發(fā)送憑據(jù),。

$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});

第二第三步,就是上面的服務(wù)端CORS的跨域技術(shù)

服務(wù)端的 Access-Control-Allow-Credentials: true,,代表服務(wù)器接受Cookie和HTTP認(rèn)證信息,。

 

參考資料:

(1)前后端分離-跨域會(huì)話如何保持?

https://www.jianshu.com/p/26f877d2b315?tdsourcetag=s_pcqq_aiomsg

(2)Session與Token認(rèn)證機(jī)制 前后端分離下如何登錄

https://www.cnblogs.com/eret9616/p/9661314.html?tdsourcetag=s_pcqq_aiomsg

(3)理解Cookie和Session機(jī)制

https://www.cnblogs.com/andy-zhou/p/5360107.html

 

轉(zhuǎn): https://blog.csdn.net/kevinxxw/article/details/90547184

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多