angular 跨域的解决方案

2023-10-31

方法一:修改浏览器参数

  • 使浏览器容许跨域,主要时用于本到开发中,生产中用nginx来解决
  1. 在chrome浏览器的快捷方式中选择右键属性,在目标选项哪里修改为如下:
    "C:\Program Files\Google\Chrome\Application\chrome.exe" --args --disable-web-security --user-data-dir=C:\Program Files\Google\Chrome\Application\
  2. 从新打开chrome浏览器,会有的安全问题提示在这里插入图片描述

方法二: angular的配置解决跨域(本地开发中使用)

  1. 在angular的工程目录,和angular.json 同级的目录下面的新建proxy.config.json 文件,内容如下:
{
	"/api": {
		"target": "http://localhost:8080",
		"secure": false
	}
}

说明:当我们访问angular的web服务地址:http://localhost:4200/api的时候,其实就相等于访问http://localhost:8080的地址;如下,在angular的服务中配置地址,其实就是访问http://localhost:8080/ctp/trades

    return this.http.get(`/api/ctp/trades`);
  1. 配置angular.json文件,在对象key 等于 serve 中的 options 下增加一项
"options": {
    "proxyConfig": "proxy.config.json"
  }
  1. 修改package.json, 使上面的配置启动生效
    "start": "ng serve --proxy-config proxy.config.json",
  1. 重新启动 npm start

方法三:通过nginx来设置反向代理解决跨域(生产环境中使用)

架设环境,实现的需求,及解决的办法

  • 架设环境: nginx提供http服务,同时提供反向代理
  • 实现的需求:我们在做前后端分离的应用,就必须去解决浏览器的跨域问题,主要是前端如(angular,vue…)访问后端的时候,就会产生跨域的情况
  • 解决办法:通过nginx来实现

举例:

  • 我们来看一个最简单的跨域请求, 默认时通过nginx来提供http服务,在根路径下面有个ajax.html, 通过 `http://localhost/ajax.html可以访问到,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">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <title>Document</title>
</head>
<body>

<button id="button">ajax request</button>

</body>
<script type="text/javascript">
$("button").click(function (){
    let url
    url = "http://localhost:8080/api/admin/users"
    $.get(url, function (result) {
        console.log(result)
    })
    console.log("clicked")
})
</script>
</html>
  • 假如当你在浏览器访问:http://localhost/ajax.html,然后点击请求按钮的时候, 就是访问http://localhost:8080的后端,服务器相同,端口不同,就会出现跨域请求错误的问题;那怎么解决呢?
  • 通过nginx来解决,我们不要直接在上面代码url地址写url = "http://localhost:8080/api/admin/users", 把它改成url = "http://localhost/api/admin/users" 或者 /api/admin/users,改完之后,正确的代码为:
<!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">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <title>Document</title>
</head>
<body>

<button id="button">ajax request</button>

</body>
<script type="text/javascript">
$("button").click(function (){
    let url = "/api/admin/users"
    $.get(url, function (result) {
        console.log(result)
    })
    console.log("clicked")
})
</script>
</html>
  • 我们在到nginx的配置文件nginx.conf 中 ,修改server字段的某些东西
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root D:\web\
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
			# proxy_pass http://MyServers;
        }
		
        location /api/ {
            proxy_pass http://localhost:8080;      
        }

我们看最后面的三行,具体的意思就是:当我们访问地址http://localhost/api/的时候,其实访问的是:http://localhost:8080的这个地址,通过这么一层转换,浏览器就不会报跨域错误的问题了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

angular 跨域的解决方案 的相关文章

随机推荐

  • STM32控制电机简易教程

    STM32控制电机简易教程 包教包会 近期 电赛临近 来补习一下电机的使用方式 使用起来非常的方便 首先是在CUBEMX里面配置一些基本内容 然后是使用PWM去调速 其他的时钟和调试配置就不多说了 然后就是初始化了 同样的 这里使用的是结构
  • 【华为OD机试真题 python】最大报酬【2022 Q4

    题目描述 最大报酬 小明每周上班都会拿到自己的工作清单 工作清单内包含 n 项工作 每项工作都有对应的耗时时间 单位 h 和报酬 工作的总报酬为所有已完成工作的报酬之和 那么请你帮小明安排一下工作 保证小明在指定的工作时间内工作收入最大化
  • 如何在SYSTEM权限下实现屏幕监控

    屏幕监控是远控软件的基本功能之一 现在很多远控程序的服务端通常为DLL形式 通过远程线程注入等方法插入到services svchost等SYSTEM权限的进程中去 而此时常规的屏幕监控就会失效 这是因为与SYSTEM权限进程关联的窗口站
  • Springboot 各种常用配置

    目录 数据库配置 常用 sql 数据源 spring 配置 druid 依赖 基础配置 统一错误处理 统一响应信息处理 Swagger 配置 Spring security 配置 抽象业务配置 实体类的父类 控制器父类 mybatis pl
  • 【统计模型】ToothGrowth数据集双因素方差分析

    目录 ToothGrowth数据集双因素方差分析 一 研究目的 二 数据来源和相关说明 三 描述性分析 3 1 样本描述 3 2 样本均值 3 3 箱线图 四 数学建模 五 结论与建议 5 1 结论 5 2 建议 六 代码 ToothGro
  • 111. 二叉树的最小深度

    给定一个二叉树 找出其最小深度 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 说明 叶子节点是指没有子节点的节点 Definition for a binary tree node public class TreeNode in
  • android so劫持,防劫持SDK

    防劫持SDK 一 产品简介 防劫持SDK是具备防劫持兼防截屏功能的SDK 可有效防范恶意程序对应用进行界面劫持与截屏的恶意行为 二 iOS版本 2 1 环境要求条目说明兼容平台iOS 8 0 开发环境XCode 4 0 CPU架构armv7
  • 四、设计工程

    软件设计开始于软件需分析和规约之后 是把需求转化为软件系统的重要环节 软件需求解决 做什么 的问题 软件设计解决 怎么做 的问题 一 概述 早期设计工程分为概要设计和详细设计 概要设计 将需求转换为数据结构 软件体系结构及其接口 详细设计或
  • 另一种排序方法 C#

    private void button27 Click object sender EventArgs e int array new int 10 3 2 4 90 50 20 34 22 49 int newArray new int
  • 125道Python面试题总结

    Pyhton面试宝典 提高编程能力的最有效办法就是 敲代码 1 一行代码实现1 100之和 res sum range 1 101 print res 5050 Python精华知识点手册 完整版 下载 2 如何在一个函数内部修改全局变量
  • Java嵌入式数据库H2学习总结(一)——H2数据库入门

    只为成功找方法 不为失败找借口 Java嵌入式数据库H2学习总结 一 H2数据库入门 一 H2数据库介绍 常用的开源数据库有 H2 Derby HSQLDB MySQL PostgreSQL 其中H2和HSQLDB类似 十分适合作为嵌入式数
  • ios(六)sqlite3以及FMDB

    SQLite 一种轻量的本地数据库 方便嵌入系统 支持跨平台 根据工作经验来看 无论是Android还是iOS大多都采用SQLite 首先我们需要新建一个数据库 我们给他起名personinfo sqlite 创建一张叫做person的表
  • HashMap 与HashTable的区别

    HashMap 与HashTable的区别 HashMap与Hashtable的区别是面试中经常遇到的一个问题 这个问题看似简单 但如果深究进去 也能了解到不少知识 本文对两者从来源 特性 算法等多个方面进行对比总结 力争多角度 全方位的展
  • python绘图坐标轴

    转载很好的学习资料 https zhuanlan zhihu com p 448571003
  • MySQL必知必会 学习笔记 第二十七章 全球化和本地化

    不同的语言和字符集需要以不同的方式存储和检索 MySQL需要适应不同的字符集 以及排序和检索这些数据的方法 术语 1 字符集 字母和符号的集合 2 编码 某个字符集成员的内部表示 3 校对 规定字符如何比较 查看MySQL支持的字符集列表
  • WebGL开源框架列举概述

    一 概述 WebGL是基于OpenGL的JavaScript API 库 允许Web浏览器在浏览器中渲染3D 2D图形 而无需安装额外的插件 桌面应用程序 任何第三方插件或浏览器扩展 WebGL允许通过浏览器使用机器GPU将3D图形渲染为H
  • 域更改目录服务器状态 不可用,active directory域服务当前不可用怎么解决

    基本上每个在win7系统用过打印机的用户都会遇到过 active directory域服务当前不可用 这个问题 那到底是什么导致现在的问题诞生呢 那要怎么设置才可以恢复active directory域服务呢 下面就跟着小编一起来看看吧 步
  • Flask 学习-73.Flask-SQLAlchemy 分页查询paginate

    前言 Flask SQLAlchemy 提供了一个分页查询方法 paginate 方便我们实现在后端查询分页 分页查询 在django 框架里面有个rest framework pagination 分页器 只需简单的配置就可以实现分页 f
  • 谈谈javaSE中的==和equals的联系与区别

    前言 和equals是我们面试中经常会碰到的问题 那么它们之间有什么联系和区别呢 今天我们就来聊聊吧 问题 这里先抛出一些比较典型笔试问题 int x 10 int y 10 String str1 new String abc Strin
  • angular 跨域的解决方案

    angular 跨域的解决方案 方法一 修改浏览器参数 方法二 angular的配置解决跨域 本地开发中使用 方法三 通过nginx来设置反向代理解决跨域 生产环境中使用 架设环境 实现的需求 及解决的办法 举例 方法一 修改浏览器参数 使