成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

跨域問題及常用的四種解決方案

開發(fā) 前端
跨域問題指的是在Web開發(fā)中,由于瀏覽器的同源策略限制,當(dāng)一個(gè)網(wǎng)頁嘗試訪問與它不同源(協(xié)議、域名或端口不同)的資源時(shí),可能會(huì)遇到安全限制導(dǎo)致無法正常訪問的問題。這種策略旨在防止惡意網(wǎng)站讀取或修改其他網(wǎng)站的數(shù)據(jù),保護(hù)用戶信息安全。


圖片圖片

前言

跨域問題指的是在Web開發(fā)中,由于瀏覽器的同源策略限制,當(dāng)一個(gè)網(wǎng)頁嘗試訪問與它不同源(協(xié)議、域名或端口不同)的資源時(shí),可能會(huì)遇到安全限制導(dǎo)致無法正常訪問的問題。這種策略旨在防止惡意網(wǎng)站讀取或修改其他網(wǎng)站的數(shù)據(jù),保護(hù)用戶信息安全。

這樣說可能有點(diǎn)抽象,下面具體展開說明。

跨域問題演示

通常情況下,我們主流的開發(fā)模式是:前后端分離。當(dāng)我們從瀏覽器80訪問服務(wù)端81應(yīng)用

圖片圖片

下面我們用一個(gè)Web工程,一個(gè)后端工程具體簡單演示下。

1、Web工程結(jié)構(gòu):

圖片圖片

  • application.properties
spring.application.name=springboot-cross-web
server.port=8080
  • index.html 頁面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>測試跨域請(qǐng)求頁面</title>
    <script src="js/jquery-3.5.1.min.js"></script>
</head>
<body>
<div>
    <input type="button" onclick="crossSubmit()" value="跨域測試">
</div>
<script>
    function crossSubmit() {
        // 發(fā)送跨域請(qǐng)求
        jQuery.ajax({
            url: "http://localhost:8081/api/cross",
            type: "POST",
            data: {"key": "Cross"},
            success: function (result) {
                alert("返回?cái)?shù)據(jù):" + result.data);
            }
        });
    }
</script>
</body>
</html>

2、后端工程結(jié)構(gòu):

圖片圖片

  • application.properties
spring.application.name=springboot-cross
server.port=8081
  • 測試應(yīng)用
@RestController
public class CrossAppController {

    @RequestMapping("/api/cross")
    public HashMap<String, Object> crossTest() {
        return new HashMap<String, Object>() {{
            put("state", 200);
            put("data", "success");
        }};
    }
}

3、啟動(dòng)并測試

圖片圖片

瀏覽器報(bào)錯(cuò)產(chǎn)生跨域問題。

為什么產(chǎn)生跨域問題?

一般來講,通常產(chǎn)生跨域問題有以下幾種原因:

  1. 協(xié)議不同:如 https和http;
  2. 端口不同
  3. 域名不同

圖片圖片

這就是常說的同源策略的問題。產(chǎn)生跨域問題的根源就是請(qǐng)求不同源。

如何解決跨域問題?

從上邊的問題來看,主要在于瀏覽器保護(hù),對(duì)參數(shù) "Access-Control-Allow-Origin"的設(shè)置。

主要有下解決方案:

一、使用@CrossOrigin注解

@RestController
@CrossOrigin(origins = "*")
public class CrossAppController {

    @RequestMapping("/api/cross")
    public HashMap<String, Object> crossTest() {
        return new HashMap<String, Object>() {{
            put("state", 200);
            put("data", "success");
        }};
    }
}

演示結(jié)果:

圖片圖片

二、使用全局跨域配置

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/cross")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*");
                //.allowCredentials(true);
    }
}

三、使用CorsFilter跨域

@Component
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        // 設(shè)置允許的來源
        response.setHeader("Access-Control-Allow-Origin", "*");
        // 處理預(yù)檢請(qǐng)求
        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(req, res);
        }
    }
}

四、使用Nginx來實(shí)現(xiàn)跨域

server {  
    listen 80;  

    server_name your.domain.com;  

    location / {  
        # 添加CORS相關(guān)的響應(yīng)頭  
        add_header 'Access-Control-Allow-Origin' '*';  
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';  
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';  

        # 對(duì)于OPTIONS請(qǐng)求,直接返回204狀態(tài)碼  
        if ($request_method = 'OPTIONS') {  
            return 204;  
        }  

        # 其他配置...  

        # 代理到后端服務(wù)或其他配置...  
        # proxy_pass http://your_backend/;  
        # 其他proxy_...指令...  
    }  
}

總結(jié)

  • 跨域問題指的是在Web開發(fā)中,由于瀏覽器的同源策略限制,導(dǎo)致無法正常訪問的問題。
  • 主要原理就是請(qǐng)求參數(shù)Access-Control-Allow-Origin

參考文章: https://mp.weixin.qq.com/s/YQr0q4qeZb5p1s-FVEdJvg


責(zé)任編輯:武曉燕 來源: 碼易有道
相關(guān)推薦

2018-12-12 15:50:13

2024-12-02 14:30:20

2010-01-12 12:15:25

SOA安全解決方案

2024-05-20 09:28:44

Spring客戶端瀏覽器

2009-12-14 15:29:48

解決方案SOA安全

2025-02-18 16:27:01

2025-01-06 08:33:10

2021-07-05 08:09:54

@AutowiredSpringMapper

2023-05-06 15:32:04

2021-06-25 09:04:39

Cors跨域JSONP vs CO

2017-02-28 14:28:37

數(shù)據(jù)跨庫分頁架構(gòu)

2025-01-15 12:43:23

2024-09-26 14:27:14

2023-11-17 09:38:21

2009-07-23 19:17:06

微軟Windows7IT

2010-02-24 10:55:01

WCF跨域訪問

2010-07-30 12:40:00

Flex跨域訪問

2018-01-26 08:39:03

2023-04-12 16:01:51

智能廢物管理垃圾分類機(jī)器人

2019-11-11 17:34:16

前端開發(fā)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 噜久寡妇噜噜久久寡妇 | 在线不卡视频 | 国产女人与拘做受免费视频 | 久草网站 | 中文字幕一区二区三区不卡 | аⅴ资源新版在线天堂 | 久久久久久一区 | 日本aa毛片a级毛片免费观看 | 国产精品美女一区二区 | 成人在线免费电影 | 国产偷录叫床高潮录音 | 夜夜艹 | 欧美日高清 | 国精日本亚洲欧州国产中文久久 | 羞羞视频在线观免费观看 | 密室大逃脱第六季大神版在线观看 | 国产一二三区电影 | 日本免费一区二区三区视频 | 91精品国产91久久久久久吃药 | www.亚洲区| 天天综合网永久 | 96av麻豆蜜桃一区二区 | 国产乱码久久久久久 | 国产99视频精品免费播放照片 | 国产成人福利在线观看 | 欧美成人激情 | av在线播放不卡 | 国产乱码久久久久久 | 日韩欧美国产电影 | 日韩精品一区二区三区视频播放 | 超碰精品在线 | 久久激情网| 91成人免费看 | 国产91丝袜在线熟 | 91精品久久久久久久久 | 在线观看亚洲一区二区 | 日本一区二区高清不卡 | 成人亚洲片 | 国产精品综合一区二区 | 国产精品久久久久久久久久 | 中文字幕一区二区三区乱码图片 |