JS 跨域请求知多少

跨域

当两个域不同时,基于同源策略资源将不能共享。而采用技术使得不同域的网站能资源交互的方式叫跨域

怎么跨域

1.JSONP

借助的是script标签有能力不受限制从其他域加载资源,通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的回调函数,并且会把我们需要的json数据作为参数传入

举个例子,服务器希望有个叫callback的参数来启用JSONP的功能。我们的请求如下

http://www.example.net/sample.aspx?callback=mycallback

如果没有JSONP,可能返回的是JS对象

{ foo: 'bar' }

但有JSONP的话,服务器一旦接受到叫callback的参数,就会把JS对象包含在函数调用中返回

mycallback({ foo: 'bar' })

你会发现,将调用mycallback,所以你在页面里需要定义mycallback函数

mycallback = function(data){
  alert(data.foo);//'bar'
};

当script载入成功后会执行mycallback,并且会把我们需要的json数据作为参数传入

优点

  • 兼容性更好,在更加古老的浏览器中都可以运行,并且在请求完毕后可以通过调用callback的方式回传数据。

缺点

  • 只支持GET请求而不支持其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题

2.CORS

For simple CORS requests, the server only needs to add the following header to its response: Access-Control-Allow-Origin: *,如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问

举个例子,CORS on ExpressJS

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

Access-Control-Allow-Origin:
该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。

优点

  • JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。

  • 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。

  • 支持cookie

缺点

  • 兼容性 :JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS

demo及学习链接

JSONP-demo
CORS-demo
jsonp 介绍
cors 应用
每天都努力一点点
谢谢你看完


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:对于跨域请求,很早之前就有去了解过,但因为一直关注的都是服务器后端开发,故也就仅仅停留在概念的理解上而没有机...
    ken_ljq阅读 90,011评论 6 128
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    他在发呆阅读 834评论 0 0
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    w_zhuan阅读 562评论 0 0
  • 一、文件操作常用命令 1.touch命令 用于创建普通文本文件,一次性创建多个文件,文件名用逗号隔开 格式:tou...
    迷糊银儿阅读 314评论 0 0
  • 我就是个小迷糊,突然发现总是无心做错事,原来每个人的思想都不一样,大雨滂沱,累了,睡觉,
    沁沐阅读 218评论 0 0