跨域怎么通过POST方式传数据

跨域怎么通过POST方式传数据

阅读 21.7k
15 个回答

Cross-Origin Resource Sharing 跨域资源共享

Cross-Origin Resource Sharing,跨域资源共享,简称 CORS。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。跨域资源共享是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。

简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。

由于有同源策略,跨域请求是被禁止。

我们需要在服务器端设置允许不同域的请求。

Apache配置方法

Apache需要使用mod_headers模块来激活HTTP头的设置,它默认是激活的。你只需要在Apache配置文件的<Directory><Location><Files><VirtualHost>的配置里加入以下内容即可

Header set Access-Control-Allow-Origin *  

PHP配置方法

header("Access-Control-Allow-Origin:*");

以上的配置的含义是允许任何域发起的请求都可以获取当前服务器的数据。当然,这样有很大的危险性,恶意站点可能通过XSS攻击我们的服务器。所以我们应该尽量有针对性地设置安全的来源,例如下面的设置使得只有http://www.shihj.com这个域才能跨域访问服务器的API。

header("Access-Control-Allow-Origin:http://www.shihj.com");

对于通配符*,它可以直接Access-Control-Allow-Origin:*这样使用,但它是不允许通配子域名的,如:Access-Control-Allow-Origin:*.shihj.com

nginx转代为同域名才是最终解决办法,CORS的一个致命的缺点就是AJAX不会把cookie中session id也发过去,于是很多事情干不了。

js的安全策略里有提到为了安全考虑,在js代码中不能对其他域名的js脚本进行调用,跨域一般用jsonp. jquery的$.ajax的jsonp 是get方式。 原理就是动态引入script标签,而script标签的src是可以跨域的,指定一个服务端的程序url,比方是一PHP文件, 在PHP文件里输出你本地函数的调用.

如上所说 jsonpget 方式

有一个思路是 先发送到同域名的某个方法下 如www.a.com/a.php之后通过 a.php 文件 CURL 到接口文件请求数据

jsonp是get
可以试试cros

为啥不用nginx直接做一个转发?性能好,还能监控,还能控制行为。

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);//用获取到的对象属性给文本框赋值
}
})

没懂,POST不本来就是跨域的吧,用表单提交不行吗?

已经说了很多次,地球上解决跨域问题,最好的方法是使用Apache做转发。

ajax封装的jsonp,或者自己用原生的方法实现

跨域可以直接使用 hprose-html5,简单方便,支持的语言多。

JSONP好像是这样的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏