什么是跨域?跨域请求资源的方法有哪些?

1、什么是跨域?

由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。存在跨域的情况:

  • 网络协议不同,如http协议访问https协议。
  • 端口不同,如80端口访问8080端口。
  • 域名不同,如qianduanblog.com访问baidu.com。
  • 子域名不同,如abc.qianduanblog.com访问def.qianduanblog.com。
  • 域名和域名对应ip,如www.a.com访问20.205.28.90.

2、跨域请求资源的方法:

(1)、porxy代理

定义和用法:proxy代理用于将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前端。

实现方法:通过nginx代理;

注意点:1、如果你代理的是https协议的请求,那么你的proxy首先需要信任该证书(尤其是自定义证书)或者忽略证书检查,否则你的请求无法成功。

(2)、CORS 【Cross-Origin Resource Sharing】

定义和用法:是现代浏览器支持跨域资源请求的一种最常用的方式。

使用方法:一般需要后端人员在处理请求数据的时候,添加允许跨域的相关操作。如下:

res.writeHead(200, {
    "Content-Type": "text/html; charset=UTF-8",
    "Access-Control-Allow-Origin":‘http://localhost‘,
    ‘Access-Control-Allow-Methods‘: ‘GET, POST, OPTIONS‘,
    ‘Access-Control-Allow-Headers‘: ‘X-Requested-With, Content-Type‘
});

(3)、jsonp

定义和用法:通过动态插入一个script标签。浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)。

特点:通过情况下,通过动态创建script来读取他域的动态资源,获取的数据一般为json格式。

实例如下:

<script>
    function testjsonp(data) {
       console.log(data.name); // 获取返回的结果
    }
</script>
<script>
    var _script = document.createElement(‘script‘);
    _script.type = "text/javascript";
    _script.src = "http://localhost:8888/jsonp?callback=testjsonp";
    document.head.appendChild(_script);
</script>

缺点:

  1、这种方式无法发送post请求(这里)

  2、另外要确定jsonp的请求是否失败并不容易,大多数框架的实现都是结合超时时间来判定。

原文地址:https://www.cnblogs.com/cjx-web/p/9377095.html

时间: 2024-07-30 20:14:28

什么是跨域?跨域请求资源的方法有哪些?的相关文章

【spring】【spring mvc】【spring boot】获取spring cloud项目中所有spring mvc的请求资源

实现的方法: 1.在父级项目中 或者 每个微服务都引用的项目中添加实体类Resource 2.在父级项目中 或者 每个为服务都引用的项目中写一个工具类,作用是用来获取请求资源 3.在每一个微服务的启动类添加注解@RestController ,并且写一个请求方法调用 工具类的请求资源的方法 4.将获取到的JSON字符串 保存在文件中 5.最后,在需要存储这些信息到数据库中的对应微服务 提供一个请求方法,参数就传递这一个一个的JSON字符串,而请求方法做的事情就是解析JSON,并批量保存到对应数据

跨域请求资源的几种方式

跨域请求资源的几种方式 由于浏览器同源策略,凡是发送请求URL的协议.域名.端口三者之间任意一与当前页面地址不同即为跨域. (1)JSONP(jsonp跨域get请求) 这种方式主要是通过动态创建一个script标签,浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行:(创建script标签向不同域提交http请求的不会被拒绝的方法,jsonp标签的src属性是没有跨域限制的) 实际项目中JSONP通常用来获取json格式数据,这时前后端通常约定一个参数callback,

ajax 跨域请求资源问题

其实相当的简单:只需要在服务端设置一下响应头: header("Access-Control-Allow-Origin: *");就可以了!! nice,有木有? 下面两句也可以带上: header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"); header('Access-Control-Allow-Methods: GET, POST, PUT')

探讨跨域请求资源的几种方式

什么是跨域 JSONP proxy代理 cors xdr 由于浏览器同源策略,凡是发送请求url的协议.域名.端口三者之间任意一与当前页面地址不同即为跨域.具体可以查看下表(来源) JSONP 这种方式主要是通过动态插入一个script标签.浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下). 1 <script> 2 var _script = document.createElement('script'); 3 _script.type = &

妥善的ajax跨域提交post请求的解决方案,结合PHP与jquery

开发背景: 在开发中采用了一个新的架构,将大部分客户的留言功能集成到一个公共API提交保存,采用不同的用户名区分,供客户查询自己网站的留言,这样节约了客户网站的资源,也提升了维护性. 那么在提交时不能采用直接的post提交,否则会产生跳转,使访客混乱,所以采用ajax提交留言内容至公共服务器:http://wx.igooda.cn/index.php/messagesave,但尝试后发现不能提交post请求,百度后查询结果是跨域只能是get请求,这对留言内容多的来说,是不可行的.还有一种解决方案

跨域发送HTTP请求详解

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述几种跨域发HTTP请求的几种方法,POST请求,GET请求 目录: 一,采用JsonP的方式(只能是GET) 二,采用CROS的方式(需要在接收的一端也有配置) 三,采用form表单的方式(有些时候会存在问题,一会详细说明) 四,采用代理网站帮忙转(不推荐,不安全,性能低,不做解释) 五,后台JAVA后端通过net方式发送 一,jsonP的方式: $.ajax({ url: "http://lo

中止请求和超时 跨域的HTTP请求 认证方式 JSONP

中止请求和超时 一个栗子在上传多少秒以后直接终止请求 // 发起HTTP GEt请求获取指定URl的内容 // 如果响应成功到达,将会传入responseText给回调函数 // 如果响应在timeout毫秒内没有到达,将会中止这个请求 function timedGetText(url, timeout, callback) { var request = new XMLHttpRequest(); // 创建新请求 var timedout = false; // 是否超时,设置标志 //

记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑

我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来. 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的服务器上的服务.域名b上的服务也是我开发的,因此我将域名a加到了该服务的HTTP响应结构的头文件里,这样就允许了域名a上的JavaScript代码用AJAX访问域名b的服务. 域名b上的服务是一个Servlet,允许域名a跨域访问的代码就一行: protected void doGet(HttpServletRequest req

跨域问题的产生及解决方法

域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation).信任关系是连接在域与域之间的桥梁.当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理. 有一种简明的说法来解释广域跨域:跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容.由于安全原因,跨域访问是被各大浏览器所默认禁止的.