扫码关注官方订阅号
跨域怎么通过POST方式传数据
闭关修行中......
Cross-Origin Resource Sharing 跨域资源共享
Cross-Origin Resource Sharing,跨域资源共享,简称 CORS。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。跨域资源共享是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。
简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。
由于有同源策略,跨域请求是被禁止。
我们需要在服务器端设置允许不同域的请求。
Apache需要使用mod_headers模块来激活HTTP头的设置,它默认是激活的。你只需要在Apache配置文件的<Directory>,<Location>,<Files>或<VirtualHost>的配置里加入以下内容即可
mod_headers
<Directory>
<Location>
<Files>
<VirtualHost>
Header set Access-Control-Allow-Origin *
header("Access-Control-Allow-Origin:*");
以上的配置的含义是允许任何域发起的请求都可以获取当前服务器的数据。当然,这样有很大的危险性,恶意站点可能通过XSS攻击我们的服务器。所以我们应该尽量有针对性地设置安全的来源,例如下面的设置使得只有http://www.shihj.com这个域才能跨域访问服务器的API。
危险性
http://www.shihj.com
header("Access-Control-Allow-Origin:http://www.shihj.com");
对于通配符*,它可以直接Access-Control-Allow-Origin:*这样使用,但它是不允许通配子域名的,如:Access-Control-Allow-Origin:*.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文件里输出你本地函数的调用.
如上所说 jsonp 为 get 方式
jsonp
get
有一个思路是 先发送到同域名的某个方法下 如www.a.com/a.php之后通过 a.php 文件 CURL 到接口文件请求数据
www.a.com/a.php
a.php
CURL
jsonp是get 可以试试cros
jsonp是get请求 可参考这篇文章 http://p.io/topic/1103
为啥不用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不本来就是跨域的吧,用表单提交不行吗?
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
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。nginx转代为同域名才是最终解决办法,CORS的一个致命的缺点就是AJAX不会把cookie中session id也发过去,于是很多事情干不了。
js的安全策略里有提到为了安全考虑,在js代码中不能对其他域名的js脚本进行调用,跨域一般用jsonp. jquery的$.ajax的jsonp 是get方式。 原理就是动态引入script标签,而script标签的src是可以跨域的,指定一个服务端的程序url,比方是一PHP文件, 在PHP文件里输出你本地函数的调用.
如上所说
jsonp为get方式有一个思路是 先发送到同域名的某个方法下 如
www.a.com/a.php之后通过a.php文件CURL到接口文件请求数据jsonp是get
可以试试cros
jsonp是get请求可参考这篇文章 http://p.io/topic/1103
为啥不用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不本来就是跨域的吧,用表单提交不行吗?