跨域怎么通过POST方式传数据
js的安全策略里有提到为了安全考虑,在js代码中不能对其他域名的js脚本进行调用,跨域一般用jsonp. jquery的$.ajax的jsonp 是get方式。 原理就是动态引入script标签,而script标签的src是可以跨域的,指定一个服务端的程序url,比方是一PHP文件, 在PHP文件里输出你本地函数的调用.
如上所说 jsonp
为 get
方式
有一个思路是 先发送到同域名的某个方法下 如www.a.com/a.php
之后通过 a.php
文件 CURL
到接口文件请求数据
AJAX中XMLHttpRequest(XHR)受浏览器同源策略限制,要解除限制,可以设置CORS头(Access-Control-Allow-Origin)或者使用GET实现的JSONP.
值得注意的是,直接通过FORM表单提交的POST/GET请求并不会被浏览器同源策略限制,这也是为什么要设置csrf_token防范CSRF攻击.
跨域访问使用JSONP,是支持JSON格式的非官方跨域交互协议,很好用
下面展示一个使用JSONP协议访问豆瓣API,并渲染页面的过程
$.ajax({
url:'https://api.douban.com/v2/movie/subject/'+movie_id;
cache:true,
type:get, //你可以换成post,这个看接口
jsonp:'callback',
crossDomain:true,
success:function(data){
$('#inputTitle').val(data.title);//用获取到的对象属性给文本框赋值
}
})
8 回答5.9k 阅读✓ 已解决
9 回答9.3k 阅读
6 回答4.9k 阅读✓ 已解决
4 回答13.3k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
5 回答7.8k 阅读✓ 已解决
4 回答8k 阅读✓ 已解决
Cross-Origin Resource Sharing,跨域资源共享,简称 CORS。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。跨域资源共享是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。
简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。
由于有同源策略,跨域请求是被禁止。
我们需要在服务器端设置允许不同域的请求。
Apache配置方法
Apache需要使用
mod_headers
模块来激活HTTP头的设置,它默认是激活的。你只需要在Apache配置文件的<Directory>
,<Location>
,<Files>
或<VirtualHost>
的配置里加入以下内容即可PHP配置方法
以上的配置的含义是允许任何域发起的请求都可以获取当前服务器的数据。当然,这样有很大的
危险性
,恶意站点可能通过XSS攻击我们的服务器。所以我们应该尽量有针对性地设置安全的来源,例如下面的设置使得只有http://www.shihj.com
这个域才能跨域访问服务器的API。对于通配符
*
,它可以直接Access-Control-Allow-Origin:*
这样使用,但它是不允许通配子域名的,如:Access-Control-Allow-Origin:*.shihj.com
。