最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端和后端解決跨域問題的方法詳細(xì)講解

 更新時(shí)間:2025年01月13日 10:19:20   作者:web13688565871  
這篇文章主要介紹了前端和后端解決跨域問題的相關(guān)資料,跨域問題主要源于瀏覽器的同源策略,為防止CSRF攻擊,可以采用多種防御措施,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

目前很多java web開發(fā)都是采用前后端分離框架進(jìn)行開發(fā),相比于單體項(xiàng)目容易產(chǎn)生跨域問題。

一、跨域問題CORS

1.什么是跨域問題?

后端接收到請(qǐng)求并返回結(jié)果了,瀏覽器把這個(gè)響應(yīng)攔截了。

2.跨域問題是怎么產(chǎn)生的?

瀏覽器基于同源策略,如果請(qǐng)求的網(wǎng)頁和當(dāng)前的服務(wù)不是同源的,并且發(fā)送的是XHR(XMLHttpRequest)請(qǐng)求,就會(huì)產(chǎn)生跨域問題。

同源策略:url中的協(xié)議、域名、端口號(hào)任意一個(gè)不同就不同源。注意兩個(gè)不同的域名指向同一個(gè)主機(jī)ip也叫不同源。

3.為什么要有同源策略?

CSRF攻擊:借助本地瀏覽器緩存的cookie信息,以當(dāng)前登陸者的身份模擬發(fā)送請(qǐng)求,完成攻擊者期待的操作。當(dāng)攻擊者拿到管理員的信息時(shí)可能對(duì)整個(gè)web程序造成重大打擊。

csrf防御:

  • 規(guī)范使用各個(gè)請(qǐng)求方法,比如get請(qǐng)求只能檢索信息,不能修改信息。
  • 當(dāng)用戶訪問站點(diǎn)時(shí)生成一個(gè)隨機(jī)數(shù),并設(shè)置成用戶發(fā)送請(qǐng)求時(shí)的cookie。用戶提交表單時(shí),要攜帶隨機(jī)數(shù)。當(dāng)csrf攻擊者發(fā)送請(qǐng)求時(shí),由于沒有這個(gè)隨機(jī)數(shù),所以請(qǐng)求失敗。
  • 在非get請(qǐng)求中增加token并使用攔截器校驗(yàn)。
  • HTTP頭中有一個(gè)Referer字段,這個(gè)字段用以標(biāo)明請(qǐng)求來源于哪個(gè)地址,在訪問敏感數(shù)據(jù)時(shí),先檢查referer字段,查看請(qǐng)求來源于哪個(gè)地址。如果是本頁面的url就可以訪問,如果是別的網(wǎng)頁的url就禁止訪問。
  • 自定義屬性加到請(qǐng)求頭。通過 XMLHttpRequest 這個(gè)類,一次性給所有該類請(qǐng)求加上 csrftoken 這個(gè) HTTP 頭屬性。
  • 客戶端中RequestRodeo 工具通過在客戶和服務(wù)器之間充當(dāng)代理來防止CSRF攻擊
  • 客戶端下載某些插件,對(duì)于攔截的請(qǐng)求用戶可以自己設(shè)置白名單。

二、解決方法

前端解決方式

1.JSONP方案:(只能解決get請(qǐng)求不能解決post請(qǐng)求)

不受同源策略影響的標(biāo)簽:img、script、link 、iframe

通過在前端動(dòng)態(tài)創(chuàng)建script標(biāo)簽,指定跨域資源的URL,服務(wù)器返回的是一段JavaScript代碼,前端通過回調(diào)函數(shù)處理數(shù)據(jù)。

2.vue解決devServer配置

module.exports = {
    devServer: {
        proxy: {
            '/api': { // 請(qǐng)求的代稱,寫在Axios里的BaseUrl
                target: 'http://localhost:8088/spring', // 真實(shí)請(qǐng)求URl
                ws: true,
                changeOrigin: true, // 允許跨域
                pathRewrite: { //替換,通配/api的替換成對(duì)應(yīng)字符
                //     /* 重寫路徑,當(dāng)我們?cè)跒g覽器中看到請(qǐng)求的地址為:http://localhost:8080/api/core/getData/userInfo 時(shí)
                //       實(shí)際上訪問的地址是:http://localhost:8088/spring/core/getData/userInfo,因?yàn)橹貙懥?/api
                //      */
                    '^/api': '' //當(dāng)你的接口中沒有/api字眼時(shí),采用這種,直接替換成空即可
                //     '^/api': '/api'   //當(dāng)你的接口中剛好有/api 時(shí),采用這種方式
                }
            }
        }
    }
}

3.Nginx代理

正向代理:順著請(qǐng)求方向代理,由用戶配置,為用戶代理服務(wù)。拿到要訪問的資源。

反向代理:充當(dāng)響應(yīng)服務(wù)器,對(duì)目標(biāo)服務(wù)器提供了請(qǐng)求轉(zhuǎn)發(fā)的功能。

nginx使用的是反向代理:瀏覽器訪問A服務(wù)器,A服務(wù)器再將請(qǐng)求發(fā)送到B瀏覽器,拿到內(nèi)容返回給瀏覽器。

下載negix,完成配置

服務(wù)器監(jiān)聽80端口,請(qǐng)求帶著“/api”就代理到指定的服務(wù)器,也可以配置重寫url。

上面的場(chǎng)景:前端發(fā)送一個(gè)api/xxx請(qǐng)求,negix代理對(duì)請(qǐng)求做處理。將這個(gè)請(qǐng)求代理到后端服務(wù)器,并重寫了請(qǐng)求的url。

ssm項(xiàng)目后端表現(xiàn)層解決方案

1.在響應(yīng)頭中添加屬性

在controller代碼中寫下面這行代碼。

response.addHeader("Access-Control-Allow-Origin","http://127.0.0.1:8081");

springboot項(xiàng)目中,跨域問題后端怎么解決?

CORS:跨域同源共享。在響應(yīng)頭中設(shè)置一些配置。access-control-allow-origin屬性設(shè)置

1.在目標(biāo)方法上添加@CrossOrigin注解

2.添加cors的過濾器統(tǒng)一解決,不用每個(gè)方法都加注解

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter(){
        CorsConfiguration corsConfiguration=new CorsConfiguration();
        //允許那些域訪問
        corsConfiguration.addAllowedOrigin("*");
        //允許請(qǐng)求頭字段
        corsConfiguration.addAllowedHeader("*");
        //允許請(qǐng)求的方法
        corsConfiguration.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
        //添加映射路徑
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsFilter(source);
    }
}

3.實(shí)現(xiàn)WebMvcConfigurer接口,重寫addCorsMappings方法

   @Override
    public void addCorsMappings(CorsRegistry registry){
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowCredentials(true)  //是否允許攜帶cookie
                .maxAge(3600) //有效時(shí)間
                .allowedHeaders("*");
    }

4.使用代理工具。

到此這篇關(guān)于前端和后端解決跨域問題的文章就介紹到這了,更多相關(guān)前端和后端解決跨域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript中值類型與引用類型實(shí)例說明

    JavaScript中值類型與引用類型實(shí)例說明

    JavaScript中值類型與引用類型說明,需要的朋友可以參考下。
    2010-12-12
  • 原生javascript實(shí)現(xiàn)圖片彈窗交互效果

    原生javascript實(shí)現(xiàn)圖片彈窗交互效果

    這篇文章主要介紹了原生javascript實(shí)現(xiàn)圖片彈窗交互效果的方法及的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • 前端接口報(bào)錯(cuò)302問題解決辦法

    前端接口報(bào)錯(cuò)302問題解決辦法

    這篇文章主要介紹了前端接口報(bào)錯(cuò)302的問題,并提供了多種解決方法和代碼案例,幫助開發(fā)者更好地應(yīng)對(duì)這一常見問題,需要的朋友可以參考下
    2025-01-01
  • 一文教你如何優(yōu)雅的使用WebSocket

    一文教你如何優(yōu)雅的使用WebSocket

    WebSocket最大特點(diǎn)就是服務(wù)器可以主動(dòng)向客戶端推送信息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息,是真正的雙向平等對(duì)話,屬于服務(wù)器推送技術(shù)的一種,下面這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅的使用WebSocket的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • javascript利用canvas實(shí)現(xiàn)鼠標(biāo)拖拽功能

    javascript利用canvas實(shí)現(xiàn)鼠標(biāo)拖拽功能

    這篇文章主要為大家詳細(xì)介紹了javascript利用canvas實(shí)現(xiàn)鼠標(biāo)拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼

    JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼

    這篇文章主要介紹了JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 詳解JavaScript中的作用域

    詳解JavaScript中的作用域

    作用域是JavaScript中一個(gè)重要的概念,它決定了變量和函數(shù)在代碼中的可訪問性和可見性,了解JavaScript的作用域?qū)τ诰帉懜咝?、可維護(hù)的代碼至關(guān)重要,本文將深入介紹JavaScript作用域相關(guān)的知識(shí)點(diǎn),其中包括作用域類型,作用域鏈,變量提升以及閉包等
    2023-08-08
  • layui 點(diǎn)擊重置按鈕, select 并沒有被重置的解決方法

    layui 點(diǎn)擊重置按鈕, select 并沒有被重置的解決方法

    今天小編就為大家分享一篇layui 點(diǎn)擊重置按鈕, select 并沒有被重置的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • javascript封裝簡單實(shí)現(xiàn)方法

    javascript封裝簡單實(shí)現(xiàn)方法

    這篇文章主要介紹了javascript封裝簡單實(shí)現(xiàn)方法,涉及javascript中方法與屬性的相關(guān)設(shè)置與使用技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-08-08
  • 轉(zhuǎn)換json格式的日期為Javascript對(duì)象的函數(shù)

    轉(zhuǎn)換json格式的日期為Javascript對(duì)象的函數(shù)

    項(xiàng)目中碰到了用jQuery從后臺(tái)獲取的json格式的日期的字符串,需要將此字符串轉(zhuǎn)換成JavaScript的日期對(duì)象,記在此處,以備后用。
    2010-07-07

最新評(píng)論

鄄城县| 建水县| 田阳县| 龙江县| 高雄县| 崇阳县| 开封市| 偏关县| 弥渡县| 江达县| 汪清县| 宝坻区| 龙陵县| 紫阳县| 湖北省| 甘谷县| 高邮市| 汉源县| 达州市| 武定县| 双桥区| 桑日县| 台江县| 信阳市| 宁阳县| 长治市| 汤原县| 旬邑县| 封开县| 当涂县| 天门市| 大埔区| 阳江市| 霍城县| 丹棱县| 扎兰屯市| 汉川市| 隆回县| 库伦旗| 伊春市| 建阳市|