跨域的四种方式

news/2024/7/1 4:09:41

本文主要是关于跨域的几种方式,关于什么是跨域这里就不多说了,写这个也是为了记住一些知识点的。

一. jsonp

jsonp的跨域方式很容易理解,页面的的每一个script标签浏览器都会发送get请求获取对应的文本资源,获取到了之后,会将获取回来的脚本直接执行,jsonp就是利用这个原理,在服务器写一个接口,接收请求的参数和结果回调的函数,在请求接口前应该要事先定义好要回调的函数,通过script标签请求之后得到的script会直接执行,大概的流程如下:

// 浏览器端,已经定义好了函数A
function A(str) {console.log(str);
}//服务器端
function getData(method) {return method + '("Hello Jsonp")';
}浏览器端会动态添加某个script标签
<script src="....../getData?method=A"></script>
请求这个script标签返回的就是 A("Hello Jsonp")
会立即执行这个函数,A("Hello Jsonp")里面的"Hello Jsonp"就是实际要取的数据

二.Cors

这种跨域方式需要后端的支持,需要在后端返回接口之前设置返回的头部Access-Control-Allow-Origin
具体的实现方法要根据你用的后端的方法来设置,我用的是asp.net mvc,实现的方法有很多,其中实现的一个方法如下:

1、创建一个attribute
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{public override void OnActionExecuting(ActionExecutingContext filterContext){filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");base.OnActionExecuting(filterContext);}
}
2、应用到Controller中的Action
[AllowCrossSiteJson]
public ActionResult YourMethod()
{return Json("data");
}

三.配置服务器反向代理

此种跨域方式需要服务器,如nginx和IIS的支持,nginx的反向代理我不是很了解,网上看的别人的配置是这样的,有需要的可以了解一下:

// proxy服务器
server {listen       80;server_name  www.domain1.com;location / {proxy_pass   http://www.domain2.com:8080;  #反向代理proxy_cookie_domain www.domain2.com www.domain1.com; #修改cookie里域名index  index.html index.htm;# 当用webpack-dev-server等中间件代理接口访问nignx时,此时无浏览器参与,故没有同源限制,下面的跨域配置可不启用add_header Access-Control-Allow-Origin http://www.domain1.com;  #当前端只跨域不带cookie时,可为*add_header Access-Control-Allow-Credentials true;}
}

IIS的话,可以参考一下这个iis7.5做反向代理配置方法实例图文教程

四.使用websocket

websocket和http都是基于tcp的应用层协议,websocket协议和tttp协议的主要区别是websocket支持跨域,建立的是长连接,连接是双向的。我自己用c#和nodejs的socket.io写过一些demo,但是没有在实际工作中用过,所以对这一块了解不深。


http://lihuaxi.xjx100.cn/news/236144.html

相关文章

使用WinPcap和libpcap类库读写pcap文件(001)开发环境配置

最近的项目要求写一个读写pcap文件的小程序&#xff0c;用来修改pcap中的部分信息&#xff0c;实现pcap的定制。 所以必须学会使用wireshark并能有利用WinPcap库和libpcap库进行开发。 虽然本文记录的都是windows下使用WinPcap进行开发&#xff0c;但是由于希望程序能够跨平台…

洛谷P3723 [AH2017/HNOI2017]礼物(FFT)

传送门 首先&#xff0c;两个数同时增加自然数值相当于只有其中一个数增加&#xff08;此增加量可以小于0&#xff09; 我们令$x$为当前的增加量&#xff0c;${a},{b}$分别为旋转后的两个数列&#xff0c;那么$$ans\sum_{i1}^n(a_ix-b_i)^2$$ 然后把第$i$项提出来并展开&#x…

Java类加载器详解

Java虚拟机中的类加载有三大步骤&#xff1a;&#xff0c;链接&#xff0c;初始化&#xff0e;其中加载是指查找字节流&#xff08;也就是由Java编译器生成的class文件&#xff09;并据此创建类的过程&#xff0c;这中间我们需要借助类加载器来查找字节流&#xff0e; Java虚拟…

使用WinPcap和libpcap类库读写pcap文件(002)PCAP文件格式

本文基本翻译自https://wiki.wireshark.org/Development/LibpcapFileFormat&#xff0c;主要分析pcap文件的格式。 其中一些字段可能和现在的WinPcap类库里的字段不同&#xff0c;请结合当前WinPcap库分析。 libpcap文件格式 libpcap文件格式是TcpDump/WinDump&#xff0c;Wir…

精通Spring Boot —— 第十五篇:使用@ControllerAdvice处理异常

在Spring 3.2中&#xff0c;新增了ControllerAdvice、RestControllerAdvice 注解&#xff0c;可以用于定义ExceptionHandler、InitBinder、ModelAttribute&#xff0c;并应用到所有RequestMapping、PostMapping&#xff0c; GetMapping注解中。接下来我将通过代码展示如何使用这…

「前端面试题系列7」Javascript 中的事件机制(从原生到框架)

前言 这是前端面试题系列的第 7 篇&#xff0c;你可能错过了前面的篇章&#xff0c;可以在这里找到&#xff1a; 理解函数的柯里化ES6 中箭头函数的用法this 的原理以及用法伪类与伪元素的区别及实战如何实现一个圣杯布局&#xff1f;今日头条 面试题和思路解析最近&#xff0c…

Win7使用Visual Studio 2010编译用于Qt4.8.6的MySQL驱动

其实编译过程在Qt Creator 的帮助文档里有&#xff0c;我就是照着做的&#xff0c;但是没成功&#xff0c;因为不能照搬照抄&#xff01; 1.确保path环境变量里有QTDIR&#xff0c;这个就不细说了。 2.打开"开始"->"Microsoft Visual Studio 2010"->…

Android学习路线

Android学习路线 第一阶段&#xff1a;Java面向对象编程 1.Java基本数据类型与表达式&#xff0c;分支循环。 2.String和StringBuffer的使用、正则表达式。 3.面向对象的抽象&#xff0c;封装&#xff0c;继承&#xff0c;多态&#xff0c;类与对象&#xff0c;对象初始化和回…