Rootop 服务器运维与web架构

ajax请求跨域问题

比如当前浏览的地址为 http://www.a.com/login.php
login.php 里有个 ajax 的 post 请求到 http://www.a.com/login.php ,post数据中有用户名、密码,
后台判断是否正确,返给客户端处理结果,浏览器再接着跳转。

这是正常的处理流程,如果post到另一个域名下,就产生跨域问题了。浏览器会停止执行。

下面是本地测试代码:
访问地址为:http://cp/admin/login.php
ajax请求地址是:http://test/cross.php

<script>
function login(){
 var postdata = $(".form-signin").serialize();
 $.post("http://test/cross.php", postdata, function(data){
 if(data.s == 0){
 location.href = "/admin/index.php";
 }else{
 $(".alert").text(data.err).slideDown(200);
 $(".form-signin .form-control").addClass("refuse");
 }
 }, "json");
}
</script>

cross.php代码如下:

<?php
echo json_encode(array('s'=>0));

这样测试以后,打开chrome调试,发现是无法触发跳转。浏览器发现是跨域请求(不安全),在浏览器中就直接不执行了。

把cross.php添加一个响应头。

<?php
header('Access-Control-Allow-Origin:*');
echo json_encode(array('s'=>0));

再次测试发生了跳转。
*号代表所有域

还有一种方法就是在nginx或者apache中,添加一个响应头。
如nginx下:
server {
listen 80 default_server;
add_header Access-Control-Allow-Origin ‘*’ ;

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/3989.html

作者:Venus

服务器运维与性能优化

评论已关闭。