Ajax/Jquery请求未发送cookie



我使用blueimp/jQuery File Upload脚本进行跨域(子域)上传。主页是www.example.com,我将文件上传到st2.example.com.

一切都很好,但问题是我需要在每个ajax请求中发送cookie,出于某种原因,这是不可能的。该脚本的文档中写道:

如果您需要发送cookie(例如用于身份验证),请设置withCredentials$.ajax()设置为文件上传小部件选项:

$('#fileupload').fileupload('option', {
xhrFields: {
withCredentials: true
}
});

这对我不起作用。我试图添加行

withCredentials: true

在三个不同的地方:

  • 到$('#fileupload').fileupload({
  • 到$('#fileupload').fileupload('选项'{
  • 到$.ajax({

前2个根本不起作用。第三种仅适用于HEAD请求HEAD请求发送cookie,但选项POST不发送。我在Firefox和Chrome的浏览器控制台中检查了这一点。

我的问题是:OPTIONS和POST请求不发送任何cookie的问题在哪里?

下面是我的剧本。这个例子在我测试过的所有3个地方都包含"withCredentials:true"

    <script>
    var defaultthumbnail = '<img class="thum5" src="/upload.png">';
    $(function () {
    var formData = $('#fileupload').serializeArray();
    'use strict';
    $('#fileupload').fileupload({
xhrFields: {withCredentials: true},
    url:'//st2.example.com/',
    });
    $('#fileupload').fileupload('option', {
    acceptFileTypes: /(.|/)(jpe?g)$/i,
    autoUpload:true,
    maxNumberOfFiles:20,
    maxFileSize:4000000,
  xhrFields: {withCredentials: true},
    disableImageResize: /Android(?!.*Chrome)|Opera/
    .test(window.navigator.userAgent)
    });
    if ($.support.cors) {
    $.ajax({
xhrFields: {withCredentials: true},
    url: $('#fileupload').fileupload('option', 'url'),
    type: 'HEAD'
    }).fail(function () {
    $('<div class="error"/>')
    .text('Server is not available')
    .appendTo('#fileupload');
    });
    } 
    });
    </script>

st2.example.com上的文件包含:

header('Access-Control-Allow-Origin: http://www.example.com');
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: HEAD, GET, PUT, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');

问题出在Cloudflare上。首先,浏览器向服务器发送OPTIONS请求,看看是否可以上传文件。OPTIONS请求总是没有cookie,这就是为什么Cloudflare会发出另一个captcha质询页面,而不是将请求转发到服务器。

相关内容

  • 没有找到相关文章

最新更新