跨域的四种方式

栏目: Html5 · 发布时间: 7年前

内容简介:本文主要是关于跨域的几种方式,关于什么是跨域这里就不多说了,写这个也是为了记住一些知识点的。jsonp的跨域方式很容易理解,页面的的每一个script标签浏览器都会发送get请求获取对应的文本资源,获取到了之后,会将获取回来的脚本直接执行,jsonp就是利用这个原理,在服务器写一个接口,接收请求的参数和结果回调的函数,在请求接口前应该要事先定义好要回调的函数,通过script标签请求之后得到的script会直接执行,大概的流程如下:这种跨域方式需要后端的支持,需要在后端返回接口之前设置返回的头部Access

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

一. 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,但是没有在实际工作中用过,所以对这一块了解不深。


以上所述就是小编给大家介绍的《跨域的四种方式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

奈飞文化手册

奈飞文化手册

[美] 帕蒂·麦考德 / 范珂 / 浙江教育出版社 / 2018-10-1 / 69

一本对奈飞文化进行深入解读的力作。2009年,奈飞公开发布了一份介绍企业文化的PPT文件,在网上累计下载量超过1500万次,被Facebook的CFO谢丽尔·桑德伯格称为“硅谷重要文件”。本书是奈飞前CHO,PPT的主要创作者之一帕蒂·麦考德对这份PPT文件的深度解读。 本书系统介绍奈飞文化准则,全面颠覆20世纪的管人理念。在这本书中,帕蒂·麦考德归纳出8条奈飞文化准则,从多个角度揭示了奈飞......一起来看看 《奈飞文化手册》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码