国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

跨域解決方案

這篇具有很好參考價(jià)值的文章主要介紹了跨域解決方案。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

因?yàn)闉g覽器可以同時(shí)打開很多頁面,可以同時(shí)保存很多授權(quán)信息,瀏覽器為了安全問題,采用了同源策略(瀏覽器存在跨域問題,服務(wù)器不存在跨域問題)

同源策略:是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSRF等攻擊。同源是指"協(xié)議+域名+端口"三者相同,即便兩個(gè)不同的域名指向同一個(gè)ip地址,也非同源。

比如,瀏覽器的地址是baidu.com,頁面通過ajax請求京東,就存在跨域,瀏覽器就阻止了該行為

現(xiàn)在有一個(gè)需求,兩個(gè)服務(wù)器A和B,瀏覽器通過請求服務(wù)器A獲取頁面A,然后在頁面A下通過ajax請求訪問網(wǎng)頁B,瀏覽器是不允許這樣操作的,但是可以通過一些條件可以去實(shí)現(xiàn)

1.瀏覽器的頁面A通過Ajax請求訪問B頁面時(shí),瀏覽器可以先詢問服務(wù)器B是否同意

如果頁面A通過ajax直接訪問頁面B,會報(bào)錯(cuò) cors -> cross origin resources sharing error,MissingAllowOriginHeader(跨域資源共享,丟失了允許跨域的頭)

解決方案:

@RestController
public class UserController {
    

    //方式一:手動添加請求頭
    @RequestMapping("/user")
    public User getUser(HttpServletResponse response){
        //第一個(gè)參數(shù)是添加一個(gè)請求頭,第二個(gè)參數(shù)是允許請求的來源地址
        response.addHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8081");
        
        //10秒鐘之內(nèi)再次請求的時(shí)候,就不用發(fā)送預(yù)檢請求了
        response.addHeader("Access-Control-Max-Age", "10");

        //允許你發(fā)送的請求是GET請求還是POST請求
        response.addHeader("Access-Control-Allow-Method", "GET");

        return new User("java", "java");
    }


    //方式二:添加注解@CROSSORIGIN
    @RequestMapping("/user")
    @CROSSORIGIN(origin = {"http://127.0.0.1:8081"})//添加來源地址
    public User getUser(HttpServletResponse response){

        return new User("java", "java");
    }


}

瀏覽器的頁面A訪問頁面B的時(shí)候,會發(fā)送兩個(gè)請求,第一個(gè)請求是option——預(yù)檢請求,第二請求是get——獲取數(shù)據(jù)

2.服務(wù)器與服務(wù)器之間是不存在跨域問題的,因?yàn)闉g覽器可以同時(shí)打開十幾個(gè)網(wǎng)站,這時(shí),瀏覽器既有A頁面的授權(quán)信息,也有B頁面的授權(quán)信息,而服務(wù)器不可能打開十幾個(gè)網(wǎng)站,并獲取到別的頁面的授權(quán)信息,否則A網(wǎng)站就相當(dāng)于做了B網(wǎng)站的認(rèn)證了,瀏覽器使得客戶端能夠?qū)⒍鄠€(gè)網(wǎng)站的用戶信息都存在同一物理環(huán)境,而服務(wù)器只能保存自己所提供服務(wù)的信息

解決方案:瀏覽器通過網(wǎng)頁A訪問服務(wù)器A,服務(wù)器A再去訪問服務(wù)器B,這樣服務(wù)器A就相當(dāng)于一個(gè)中間代理,去獲取服務(wù)器B的網(wǎng)頁信息

實(shí)現(xiàn)一:可以通過http請求服務(wù)器B獲取網(wǎng)頁B的數(shù)據(jù),例如restTemplate,相當(dāng)于手寫一個(gè)方向代理服務(wù)器

實(shí)現(xiàn)二:nginx(方向代理,動靜分離,負(fù)載均衡),修改配置文件

server {
? ? ? ? listen ? ? ? 80;
? ? ? ? server_name ?localhost;

? ? ? ? ##添加以下標(biāo)紅的部分

? ? ? ? location /api {
? ? ? ? ? ? proxy_pass http://127.0.0.1:8082;? ? ##路徑帶有api的請求轉(zhuǎn)發(fā)到端口為8082的服務(wù)器
? ? ? ? }

? ? ? ? location / {
? ? ? ? ? ? root ? html;
? ? ? ? ? ? index ?index.html index.htm;
? ? ? ? }

? ? ? ? error_page ? 500 502 503 504 ?/50x.html;
? ? ? ? location = /50x.html {
? ? ? ? ? ? root ? html;
? ? ? ? }
? ? }

正向代理:用戶A訪問Google,由于存在墻,用戶A只能通過先訪問香港的服務(wù)器,由香港的服務(wù)器轉(zhuǎn)發(fā)請求到Google服務(wù)器,這種代理模式是,用戶明確要訪問的地址,由于無法直接訪問到最終的服務(wù)器,只能通過中間服務(wù)器去訪問,直接輸入Google的地址就可以了??

反向代理:用戶B訪問代理服務(wù)器,但是服務(wù)器B要訪問哪獲取數(shù)據(jù),用戶不知道

3.jsonp利用瀏覽器天然支持跨域的標(biāo)簽<script>

<script>標(biāo)簽天然支持跨域,只支持GET請求,例如

前端代碼

<script>
    function callback(data){
        console.log(data)
    }
</script>
<script src="http://127.0.0.1:8082/cross"></script>

后端代碼

@RequestMapping("/cross")
public String cross(HttpServletResponse response){
    return "callback('123')"
}

請求返回后,返回的字符串會調(diào)用前端方法cross,最終打印出123

當(dāng)使用script請求地址時(shí),會將返回的字符串,默認(rèn)當(dāng)成js解析。由于后端返回是的callback(xxx),所以會調(diào)用本地的callback函數(shù)。

從原理上來看,要使用JSONP,必須要后端返回相應(yīng)的數(shù)據(jù),這個(gè)就是JSONP的模式了,允許客戶端傳遞一個(gè)callback函數(shù),后端將數(shù)據(jù)包裹在callback函數(shù)中返回。

從原理也能看出,JSONP并不要求必須傳遞JSON格式的數(shù)據(jù),只要是JS函數(shù)能夠認(rèn)可的數(shù)據(jù)都是可以傳遞的文章來源地址http://www.zghlxwxcb.cn/news/detail-477190.html

到了這里,關(guān)于跨域解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • B站提示:“當(dāng)前瀏覽器版本較低……”可行的解決方案(edge瀏覽器)

    B站提示:“當(dāng)前瀏覽器版本較低……”可行的解決方案(edge瀏覽器)

    問題:使用最新版瀏覽器訪問B站,首頁總是有一條橫幅提示:當(dāng)前瀏覽器版本較低,為保證您的使用體驗(yàn),建議使用最新版本的瀏覽器訪問。但是沒有禁止訪問,可以正常使用,但是一致提示 分析 通過網(wǎng)絡(luò)資料查詢和推測應(yīng)該是:使用IE8或舊版IE訪問B站的時(shí)候,提示“當(dāng)前

    2024年01月20日
    瀏覽(27)
  • idea修改 項(xiàng)目代碼,瀏覽器頁面不生效 解決方案

    idea修改 項(xiàng)目代碼,瀏覽器頁面不生效 解決方案

    1、問題描述 idea修改前端項(xiàng)目代碼,運(yùn)行谷歌瀏覽器不起作用。 我也試過 rebuild project, 重啟idea,等方法都不管用。 再次運(yùn)行谷歌瀏覽器,還是沒有變化。 2、嘗試了以下方法,還是不管用 2.1、rebuild project 2.2、設(shè)置idea自動編譯 File-Settings-Build,Execution,Deployment-Compiler-勾選Buil

    2024年02月07日
    瀏覽(19)
  • 前端瀏覽器的兼容性問題探討和解決方案

    解決不同瀏覽器之間的兼容性問題,可以采取以下一些常用的解決方案: 使用 CSS Reset:不同瀏覽器對于默認(rèn)樣式的定義存在差異,使用 CSS Reset 可以將不同瀏覽器的默認(rèn)樣式重置為統(tǒng)一的基準(zhǔn)樣式,從而減少瀏覽器之間的差異。 使用 CSS Hack 或?yàn)g覽器前綴:某些 CSS 屬性或值

    2024年02月14日
    瀏覽(21)
  • Selenium 無頭瀏覽器被知乎限制訪問的解決方案

    Selenium 無頭瀏覽器被知乎限制訪問的解決方案

    我嘗試使用如下代碼爬取知乎的有關(guān)內(nèi)容,出現(xiàn)知乎安全驗(yàn)證界面: 添加啟動參數(shù) 在網(wǎng)上的許多文章中,反復(fù)提到了如下三行代碼,然而我將他們加入代碼后沒有什么效果: JavaScript特殊全局變量 有一些文章提到,通過 WebDriver 啟動的網(wǎng)頁會存在一些特殊的 JS 變量,這些變

    2024年02月14日
    瀏覽(90)
  • 微信H5下載文件、微信瀏覽器無法下載文件解決方案

    微信H5下載文件、微信瀏覽器無法下載文件解決方案

    手機(jī)端的微信訪問網(wǎng)頁的時(shí)候,是禁止直接下載文件的 但是IOS端可以預(yù)覽.txt/.doc/.docx/.xls/xlsx/.pdf等格式的文件,Android端在下載這些格式的文件時(shí),可以喚起 ‘即將離開微信,在瀏覽器打開’ 提示 所以,根據(jù)手機(jī)微信的這些限制,考慮在下載文件時(shí),使Android微信在下載任何

    2024年02月16日
    瀏覽(32)
  • 前端開發(fā)中常見的瀏覽器兼容性問題及解決方案

    前端開發(fā)中常見的瀏覽器兼容性問題及解決方案

    提示:這里主要闡述瀏覽器兼容性產(chǎn)生的環(huán)境: 所謂的瀏覽器兼容性問題,是指 因?yàn)椴煌瑸g覽器對同一段代碼有著不同的解析,所造成頁面顯示效果不統(tǒng)一的情況。 為此,解決瀏覽器兼容,也成為了跨瀏覽器開發(fā)的一個(gè)核心問題。 當(dāng)初微軟不加入W3C,使得后者不采用IE的方

    2023年04月18日
    瀏覽(28)
  • Python+Selenium程序執(zhí)行完,chrome瀏覽器自動關(guān)閉解決方案

    因?yàn)榘裠river = webdriver.Chrome()放在了函數(shù)內(nèi)部,在函數(shù)執(zhí)行完畢之后,程序內(nèi)所有的步驟都結(jié)束了,關(guān)于這段程序的進(jìn)程也就結(jié)束了,瀏覽器包含在內(nèi),所以才會自動退出。 設(shè)置全局變量,即把打開瀏覽器的操作放在函數(shù)外部,函數(shù)執(zhí)行完畢,瀏覽器就不會關(guān)閉 關(guān)閉瀏覽器代

    2024年02月16日
    瀏覽(98)
  • web瀏覽器在線預(yù)覽Excel,PDF,world文檔解決方案

    web瀏覽器在線預(yù)覽Excel,PDF,world文檔解決方案

    眾所周知啊,在web瀏覽器中是無法直接預(yù)覽Excel、world文檔等文件的,PDF有的瀏覽器是打開預(yù)覽,有的瀏覽器是跳轉(zhuǎn)到下載頁,行為不一致也是讓開發(fā)者頭疼的事情。 今天給大家提供一個(gè)解決方案,實(shí)現(xiàn)office文件在線預(yù)覽的解決方案,這個(gè)在開發(fā)OA,推送通知觸達(dá)的應(yīng)用非常有

    2024年02月17日
    瀏覽(93)
  • java實(shí)現(xiàn)瀏覽器下載附件時(shí)文件名中文亂碼解決方案

    方案一:URLEncoder 解決 IE 和 谷歌瀏覽器的附件中文名問題。 如果客戶端瀏覽器是 IE 瀏覽器 或者 是谷歌瀏覽器。我們需要使用 URLEncoder 類先對中文名進(jìn)行 UTF-8 的編碼 操作。 因?yàn)?IE 瀏覽器和谷歌瀏覽器收到含有編碼后的字符串后會以 UTF-8 字符集進(jìn)行解碼顯示。 方案二:B

    2024年03月09日
    瀏覽(88)
  • vue項(xiàng)目版本打包更新后文件及瀏覽器存在緩存問題解決方案

    在vue.config.js中配置output,打包后的文件會帶時(shí)間戳 在public/static目錄下新建version.json文件 ?在src中新建 utils文件夾 文件夾中新建versionUpdate.js文件 ?在src文件夾下創(chuàng)建addVersion.js ?寫法二 修改package.json中scripts中的打包命令 版本號自加使用fs修改文件來實(shí)現(xiàn) 具體思路是:在執(zhí)行

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包