什么是跨域?如何解决?

什么是跨域?如何解决?一、什么是跨域?跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;二、跨域访问示例假设有两个网站,A网站部署在:.

大家好,又见面了,我是你们的朋友全栈君。

一、什么是跨域?

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!

同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;

什么是跨域?如何解决?

 

二、跨域访问示例

假设有两个网站,A网站部署在:http://localhost:81 即本地ip端口81上;B网站部署在:http://localhost:82 即本地ip端口82上。现在A网站的页面想去访问B网站的信息,A网站页面的代码如下(这里使用jquery的异步请求)

$(function (){

    $.get(“http://localhost:82/api/values”, {},function (result) {

          $(“#show”).html(result);

  })});

 什么是跨域?如何解决?

从错误信息可以看出以上出现了跨域问题!

 

三、如何解决跨域问题?

由之前的介绍我们已经知道错误的原因,既然跨域会产生问题,那么我们就不跨域不就完了嘛!!!

先上图:

什么是跨域?如何解决?

首先我们用nginx作为代理服务器和用户交互,这样用户就只需要在80端口上进行交互就可以了,这样就避免了跨域问题,因为我们都是在80端口上进行交互的;

下面我们看一下利用nginx作为反向代理的具体配置:

server {

        listen      80; #监听80端口,可以改成其他端口

        server_name  localhost; # 当前服务的域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            proxy_pass http://localhost:81;

            proxy_redirect default;

        }

location /apis { #添加访问目录为/apis的代理配置

rewrite  ^/apis/(.*)$ /$1 break;

proxy_pass  http://localhost:82;

      }

#以下配置省略

1.当用户发送localhost:80/时会被nginx转发到http://localhost:81服务;

2.当界面请求接口数据时,只要以/apis 为开头,就会被nginx转发到后端接口服务器上;

总结:nginx实现跨域的原理,实际就是把web项目和后端接口项目放到一个域中,这样就不存在跨域问题,然后根据请求地址去请求不同服务器(真正干活的服务器);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143928.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux修改文件内容【命令】

    Linux修改文件内容【命令】在/opt/hello/world.txt文件中增加一行 hellolinuxworld!方法一:命令是:vi,vimvi编辑器,相当于记事本,有编辑功能,但较弱vim复杂的编辑器,相当于windows的editplus,notepad++等————————步骤:1、执行viworld.txt 进入编辑器(默认

    2022年7月26日
    22
  • 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件「建议收藏」

    深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件「建议收藏」在求解最优化问题中,拉格朗日乘子法(LagrangeMultiplier)和KKT(KarushKuhnTucker)条件是两种最常用的方法。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。  我们这里提到的最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值(因为最小值与最大值可以很容易转化,即最大值问题可以转化成最小值问题)。提到KKT条件一般会附带的…

    2022年10月8日
    4
  • 2020最新eclipse安装教程,配有每一步的安装过程和细节!「建议收藏」

    2020最新eclipse安装教程,配有每一步的安装过程和细节!「建议收藏」已经下过好几次了,现在还是忘了。就把过程直接放上面了。下次再换电脑就直接可以看。。。1.先到官网下载:下载地址:https://www.eclipse.org/downloads/

    2022年6月10日
    36
  • Java开发手册之 ORM映射

    Java开发手册之 ORM映射Java开发手册之 ORM映射

    2022年4月22日
    40
  • android课程设计小项目_app界面模板

    android课程设计小项目_app界面模板1课程格子试用:建立课程表又是一年开学季,相信有不少太平洋的读者都已经结束了暑假迈进了校门,脱离高三党的同学也为数不少。作为一个大学新生,你在未来数年里想要找基友也好,泡妹子也好,都免不掉主要的任务——学习。在大学里学习和高中完全不同,没有人像高中那样天天提醒你今天要上什么课。这里小编为大家推荐一款Android平台上的课程表App课程格子,好让大家记得什么时候该上什么课。软件名称:…

    2022年10月4日
    3
  • sql的嵌套查询_sql子查询嵌套优化

    sql的嵌套查询_sql子查询嵌套优化最近在做各类小应用,用到了MYSQL,有时候会用到一些比较复杂的嵌套查询,在研究怎么通过SQL实现这些。假设下面这张表(stu)描述学生的基本信息:idnamegrade1Jim72Tom83Cake9………另外一张表(sco)描述学生的成绩信息:stu_idsubjectscore1

    2022年8月10日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号