zoukankan      html  css  js  c++  java
  • ajax设置Access-Control-Allow-Origin实现跨域访问

    ajax跨域访问

    1、jsonp方法,jsonp方法是一种非官方方法,这种方法只支持GET方式,

    不如POST方式安全。(即使使用jquery的jsonp方法,type设为POST,

    也会自动变为GET)。

       如果跨域使用POST方式,可以使用创建一个隐藏的iframe来实现,

      与ajax上传图片原理一样,但这样会比较麻烦。

       因此,通过设置Access-Control-Allow-Origin来实现跨域访问比较简单。

      例如:客户端的域名是www.client.com,而请求的域名是www.server.com

    如果直接使用ajax访问,会有以下错误。

    XMLHttpRequest cannot load http://www.server.com/server.PHP. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://www.client.com' is therefore not allowed access.

    在被请求的Response header中加入

    //指定允许其他域名访问

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

    //响应类型

    header('Access-Control-Allow-Methods:POST');

    //响应头设置

    header('Access-Control-Allow-Headers:x-requested-with,content-type');

    就可以实现ajax POST跨域访问了。

    client.html

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
    <html> 
     <head> 
     <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
     <title> 跨域测试 </title> 
     <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> 
     </head> 
     <body> 
     <div id="show"></div> 
     <script type="text/javascript"> 
     $.post("http://www.server.com/server.php",{name:"fdipzone",gender:"male"}) 
      .done(function(data){ 
      document.getElementById("show").innerHTML = data.name + ' ' + data.gender; 
      }); 
     </script> 
     </body> 
    </html> 

    server.php

    <?php 
    $ret = array( 
     'name' => isset($_POST['name'])? $_POST['name'] : '', 
     'gender' => isset($_POST['gender'])? $_POST['gender'] : '' 
    ); 
    header('content-type:application:json;charset=utf8'); 
    header('Access-Control-Allow-Origin:*'); 
    header('Access-Control-Allow-Methods:POST'); 
    header('Access-Control-Allow-Headers:x-requested-with,content-type'); 
    echo json_encode($ret); 
    ?> 

    Access-Control-Allow-Origin:*表示允许任何域名跨域访问

    如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*

    改为Access-Control-Allow-Origin:允许的域名

    例如:header('Access-Control-Allow-Origin:http://www.client.com');

    server.php

    <?php 
    $ret = array( 
     'name' => isset($_POST['name'])? $_POST['name'] : '', 
     'gender' => isset($_POST['gender'])? $_POST['gender'] : '' 
    ); 
    header('content-type:application:json;charset=utf8'); 
    $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; 
    $allow_origin = array( 
     'http://www.client.com', 
     'http://www.client2.com' 
    ); 
    if(in_array($origin, $allow_origin)){ 
     header('Access-Control-Allow-Origin:'.$origin); 
     header('Access-Control-Allow-Methods:POST'); 
     header('Access-Control-Allow-Headers:x-requested-with,content-type'); 
    } 
    echo json_encode($ret); 
    ?> 
  • 相关阅读:
    POJ 1222 POJ 1830 POJ 1681 POJ 1753 POJ 3185 高斯消元求解一类开关问题
    POJ 3237 Tree (树链剖分)
    2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
    HDU 4685 Prince and Princess (2013多校8 1010题 二分匹配+强连通)
    HDU 4678 Mine (2013多校8 1003题 博弈)
    HDU 4679 Terrorist’s destroy (2013多校8 1004题 树形DP)
    HDU 4681 String(2013多校8 1006题 DP)
    1036: [ZJOI2008]树的统计Count (树链剖分)
    HDU 3966 Aragorn's Story (树链剖分+树状数组)
    PHP服务端支付宝支付及回调
  • 原文地址:https://www.cnblogs.com/guoyinglichong/p/7089960.html
Copyright © 2011-2022 走看看