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

前端和后端解決跨域問題的一些方式詳解

 更新時間:2024年07月12日 09:57:26   作者:石以砥焉,以銳為利  
跨域?qū)τ谡趯W(xué)習(xí)或者已經(jīng)就業(yè)的前端同學(xué)而言,就是老朋友,只要涉及請求,前后端交互,開發(fā)階段等關(guān)鍵字,都避不開跨域,這篇文章主要給大家介紹了關(guān)于前端和后端解決跨域問題的一些方式,需要的朋友可以參考下

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

一、跨域問題CORS

1.什么是跨域問題?

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

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

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

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

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

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

csrf防御:

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

二、解決方法

前端解決方式

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

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

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

2.vue解決devServer配置

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

3.Nginx代理

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

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

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

下載negix,完成配置

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

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

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

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

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

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

springboot項目中,跨域問題后端怎么解決?

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

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

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

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("*");
        //允許請求頭字段
        corsConfiguration.addAllowedHeader("*");
        //允許請求的方法
        corsConfiguration.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
        //添加映射路徑
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsFilter(source);
    }
}

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

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

4.使用代理工具。

總結(jié)

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

相關(guān)文章

  • Java多線程輪流打印ABC的四種實現(xiàn)方式

    Java多線程輪流打印ABC的四種實現(xiàn)方式

    在Java中實現(xiàn)多線程輪流打印ABC的操作是一種常見的并發(fā)編程練習(xí),它展示了如何利用多線程提高程序執(zhí)行的效率和并行性,本文將深入探討如何用Java實現(xiàn)這一任務(wù),需要的朋友可以參考下
    2025-08-08
  • 詳解如何判斷Java線程池任務(wù)已執(zhí)行完

    詳解如何判斷Java線程池任務(wù)已執(zhí)行完

    線程池的使用并不復(fù)雜,麻煩的是如何判斷線程池中的任務(wù)已經(jīng)全部執(zhí)行完了,所以接下來,我們就來看看如何判斷線程中的任務(wù)是否已經(jīng)全部執(zhí)行完吧
    2023-08-08
  • 一文徹底理清SpringBoot CURD處理邏輯、順序

    一文徹底理清SpringBoot CURD處理邏輯、順序

    這篇文章主要給大家介紹了關(guān)于如何一文徹底理清SpringBoot CURD處理邏輯、順序的相關(guān)資料,CURD是一個數(shù)據(jù)庫技術(shù)中的縮寫詞,一般的項目開發(fā)的各種參數(shù)的基本功能都是CURD,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • SpringBoot實現(xiàn)優(yōu)雅停機(jī)的多種方式

    SpringBoot實現(xiàn)優(yōu)雅停機(jī)的多種方式

    優(yōu)雅停機(jī)(Graceful Shutdown)在現(xiàn)代微服務(wù)架構(gòu)中是非常重要的,它幫助我們確保在應(yīng)用程序停止時,不會中斷正在進(jìn)行的請求或?qū)е聰?shù)據(jù)丟失,讓我們以通俗易懂的方式來講解這個概念以及如何在 Spring Boot 中實現(xiàn)它,需要的朋友可以參考下
    2025-01-01
  • SpringBoot自帶模板引擎Thymeleaf使用示例詳解

    SpringBoot自帶模板引擎Thymeleaf使用示例詳解

    Thymeleaf是一款用于渲染XML/HTML5內(nèi)容的模板引擎,類似JSP,它可以輕易的與SpringMVC等Web框架進(jìn)行集成作為Web應(yīng)用的模板引擎,本文給大家介紹SpringBoot自帶模板引擎Thymeleaf使用示例,感興趣的朋友一起看看吧
    2023-12-12
  • 比較java中Future與FutureTask之間的關(guān)系

    比較java中Future與FutureTask之間的關(guān)系

    在本篇文章里我們給大家分享了java中Future與FutureTask之間的關(guān)系的內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2018-10-10
  • Java8 使用流抽取List<T>集合中T的某個屬性操作

    Java8 使用流抽取List<T>集合中T的某個屬性操作

    這篇文章主要介紹了Java8 使用流抽取List<T>集合中T的某個屬性操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 基于SpringBoot+AOP實現(xiàn)操作日志記錄

    基于SpringBoot+AOP實現(xiàn)操作日志記錄

    本文介紹了使用日志記錄的實現(xiàn)方法,步驟包括明確記錄信息、搭建基礎(chǔ)環(huán)境、創(chuàng)建操作日志實體類和自定義注解、創(chuàng)建AOP切面,重點在于精準(zhǔn)控制需要記錄日志的接口,通過自定義注解和使用、切點表達(dá)式、環(huán)繞通知實現(xiàn)實現(xiàn)日志記錄邏輯,需要的朋友可以參考下
    2026-04-04
  • Spring如何消除代碼中的if-else/switch-case

    Spring如何消除代碼中的if-else/switch-case

    這篇文章主要給大家介紹了關(guān)于Spring如何消除代碼中if-else/switch-case的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Springboot集成JSR303參數(shù)校驗的方法實現(xiàn)

    Springboot集成JSR303參數(shù)校驗的方法實現(xiàn)

    這篇文章主要介紹了Springboot集成JSR303參數(shù)校驗的方法實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

巩留县| 横山县| 柯坪县| 大城县| 安龙县| 包头市| 景德镇市| 镇雄县| 兰溪市| 元阳县| 延安市| 三门县| 乐山市| 涟水县| 邻水| 洱源县| 山阴县| 五华县| 攀枝花市| 抚宁县| 左云县| 伊金霍洛旗| 乌兰县| 镶黄旗| 西乌| 外汇| 榆社县| 安泽县| 会东县| 隆安县| 黄骅市| 吴旗县| 阳春市| 宁武县| 沙坪坝区| 静宁县| 泰顺县| 集安市| 福建省| 旺苍县| 井陉县|