为什么CORS似乎不适用于POST?

时间:2010-04-01 19:25:38

标签: xmlhttprequest w3c cors

Mozilla自己的specification说简单的GETPOST应该是原生的CORS而没有预检,但到目前为止,我所做的每次POST尝试都产生{{1}标头出去了。当我从OPTIONS更改它以获取代码时立即发送一个正确的POST请求,以便跨站点部分正常工作。

这是我在firefox中所做的一个简洁的样本:

GET

以下是我在chrome和IE中的工作原理:

 var destinationUrl = 'http://imaginarydevelopment.com/postURL';
 var invocation = new XMLHttpRequest();
            if (invocation) {
                invocation.open('POST', destinationUrl, true);
                //tried with and without this line
                //invocation.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

                invocation.onreadystatechange = (function Handler() {
                if (invocation.readyState == 4)
                        alert('Request made');
                });
                invocation.send(/* tried with and without data*/);
            }

2 个答案:

答案 0 :(得分:1)

我有同样的问题

https://developer.mozilla.org/En/HTTP_Access_Control

说enctype必须是text / plain或者你需要使用Fx4 + 必须正确设置所有访问标头

答案 1 :(得分:0)

好吧,我不知道所有内容类型实际上有什么用,但text/plain在所有3个浏览器上都有效:

var destination = { url: destinationUrl, type: 'POST', success: AjaxSuccess, error: AjaxError,
             contentType: 'text/plain'
        };
var postData={ 'anArray': theArray, 'token': token };
            destination.data=JSON.stringify(postData);

$jq.ajax(destination);

然而到目前为止,我还没有弄清楚除了运行成功方法之外什么阻止了执行任何操作,即使返回505代码也是如此。添加Access-Control-Allow-Origin: *的响应标头解决了浏览器不想读取返回数据的问题。