corspost请求失败_利用CORS实现POST方式跨域请求数据

CORS全名Cross-Origin Resource Sharing,顾名思义:跨域分享资源,这是W3C制定的跨站资源分享标准。

目前包括IE10+、chrome、safari、FF都提供了XMLHttpRequest对象对该标准的支持,在更老的IE8中则提供了xDomainRequest对象,部分实现了该标准。

下面是创建request对象的代码:

var url = "http://www.111cn.net /1.php";

if (XMLHttpRequest) {

var req = new XMLHttpRequest();

// 利用withCredentials属性来判断是否支持跨域请求

if (!("withCredentials" in req)) { // w3c先行

if (window.XDomainRequest) {

req = new XDomainRequest();

}

}

req.open('POST', url, true);

req.onload = function (data) {

alert(this.responseText);

};

req.send();

}

注意xDomainRequest对象只支持http和https协议

在利用XMLHttpRequest对象发POST请求前会发一个options嗅探来确定是否有跨域请求的权限;同时在header头上带上Origin信息来指示来源网站信息,服务器响应时需要带上Access-Control-Allow-Origin头的值是否和Origin信息相匹配。

header("Access-Control-Allow-Origin: http://localhost"); // *为全部域名

一、使用php代码实现

#

# CORS config for php

# Code by anrip[mail@anrip.com]

#

function make_cors($origin = '*') {

$request_method = $_SERVER['REQUEST_METHOD'];

if ($request_method === 'OPTIONS') {

header('Access-Control-Allow-Origin:'.$origin);

header('Access-Control-Allow-Credentials:true');

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

header('Access-Control-Max-Age:1728000');

header('Content-Type:text/plain charset=UTF-8');

header('Content-Length: 0',true);

header('status: 204');

header('HTTP/1.0 204 No Content');

}

if ($request_method === 'POST') {

header('Access-Control-Allow-Origin:'.$origin);

header('Access-Control-Allow-Credentials:true');

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

}

if ($request_method === 'GET') {

header('Access-Control-Allow-Origin:'.$origin);

header('Access-Control-Allow-Credentials:true');

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

}

}

二、使用nginx配置实现

# CORS config for nginx

# Code by anrip[mail@anrip.com]

#

location / {

set $origin '*';

if ($request_method = 'OPTIONS') {

add_header 'Access-Control-Allow-Origin' $origin;

#

# Om nom nom cookies

#

add_header 'Access-Control-Allow-Credentials' 'true';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

#

# Custom headers and headers various browsers *should* be OK with but aren't

#

add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

#

# Tell client that this pre-flight info is valid for 20 days

#

add_header 'Access-Control-Max-Age' 1728000;

add_header 'Content-Type' 'text/plain charset=UTF-8';

add_header 'Content-Length' 0;

return 204;

}

if ($request_method = 'POST') {

add_header 'Access-Control-Allow-Origin' $origin;

add_header 'Access-Control-Allow-Credentials' 'true';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

}

if ($request_method = 'GET') {

add_header 'Access-Control-Allow-Origin' $origin;

add_header 'Access-Control-Allow-Credentials' 'true';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值