1.什么是跨域 

javascript跨域post js跨域jsonp_跨域

2.常见跨域方式

1)JSONP

JSONP是JSON with padding(填充式JSON或参数是JSON)的简写,是应用JSON的一种新方法,JSONP看起来和JSON差不多,只不过是被包含在函数调用的JSON,像这样:callback({name: 'nany'})。

百度的搜索就是用的这个原理,首先看一下

javascript跨域post js跨域jsonp_json_02

输入一个s然后打开网络

javascript跨域post js跨域jsonp_javascript跨域post_03

将这个地址复制打开并且保存

javascript跨域post js跨域jsonp_JSON_04

 打开刚才的文件

javascript跨域post js跨域jsonp_JSON_05

 对照着看一下他的地址

javascript跨域post js跨域jsonp_json_06

接下来我们自己写一个简单的例子理解一下jsonp

首先创建一个jsonp.js

javascript跨域post js跨域jsonp_javascript跨域post_07

jsonp.html

javascript跨域post js跨域jsonp_json_08

运行一下就会弹出miaov

接下来动态创建一下

javascript跨域post js跨域jsonp_跨域_09

 接下来我们动态创建jsonp.js的文件名

javascript跨域post js跨域jsonp_javascript跨域post_10

2)cors

javascript跨域post js跨域jsonp_JSON_11

https://zhuanlan.zhihu.com/p/25778815   看这篇有详细例子

这里看一下miaov的例子

前端

javascript跨域post js跨域jsonp_json_12

 

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
window.onload = function() {
	
	/*
	在标准浏览器下,XMLHttpRequest对象已经是升级版本,支持了更多的特性,可以跨域了
	但是,如果想实现跨域请求,还需要后端的相关配合才可以
	
	XMLHttpRequest : 增加很多功能,他也不推荐使用onreadystatechange这个事件来监听,推荐使用onload
	
	XDomainRequest : IE如果想实现跨域请求,则需要使用另外一个对象去实现
	*/
	var oBtn = document.getElementById('btn');
	
	oBtn.onclick = function() {
		
		/*var xhr = new XMLHttpRequest();
		xhr.onreadystatechange = function() {
			if (xhr.readyState == 4) {
				if (xhr.status == 200) {
					alert(xhr.responseText);
				}
			}
		}
		xhr.open('get', 'http://www.b.com/ajax.php', true);
		xhr.send();*/
		
		var oXDomainRequest = new XDomainRequest();
		oXDomainRequest.onload = function() {
			alert(this.responseText);
		}
		oXDomainRequest.open('get', 'http://www.b.com/ajax.php', true);
		oXDomainRequest.send();
		
	}
	
}
</script>
</head>

<body>
	<input type="button" value="获取同域下内容" id="btn" />
</body>
</html>

服务器端代码

<?php
header('Access-Control-Allow-Origin:http://www.a.com');	//这是允许访问该资源的域
echo 'hello';

这样就可以正常访问了

 

  • 如何解决跨域的问题
  • 表单可以跨域吗(可以)
  • 对跨域的了解
  • 介绍下浏览器跨域
  • 怎么去解决跨域问题
  • jsonp方案需要服务端怎么配合

在服务器端,需要对script的src进行url解析,将data作为参数放入回调函数中,最后通过res.end(callback(data))中将要执行的函数放入客户端的script中,在客户端对该函数进行执行。

javascript跨域post js跨域jsonp_json_13

看下面例子

javascript跨域post js跨域jsonp_JSON_14

 

  • Ajax发生跨域要设置什么(前端) 

CORS  不需要设置,由后端设置

  • 加上CORS之后从发起到请求正式成功的过程

对于简单请求

javascript跨域post js跨域jsonp_跨域_15

对于非简单请求

 

javascript跨域post js跨域jsonp_跨域_16

javascript跨域post js跨域jsonp_javascript跨域post_17

  •  
  • Access-Control-Allow-Origin在服务端哪里配置

使用headers属性