Javascript 浏览器不通过AJAX发送Cookie,但在其他方面它';太好了

Javascript 浏览器不通过AJAX发送Cookie,但在其他方面它';太好了,javascript,ajax,cookies,Javascript,Ajax,Cookies,我目前正在localhost域下设置cookies-我将其称为example.com(当然它不是真正的example.com) 我的api位于example.com:8888/api/myApi 当我通过ajax从example.com:8080请求上述api时 即- 我在我的chrome浏览器中进入example.com:8080,我有一个js代码,它向example.com:8888/api/myApi 我的浏览器不发送任何cookie。我在chrome开发工具的网络选项卡上看到了这一点,但

我目前正在localhost域下设置cookies-我将其称为
example.com
(当然它不是真正的
example.com

我的api位于
example.com:8888/api/myApi

当我通过ajax从
example.com:8080
请求上述api时

- 我在我的chrome浏览器中进入
example.com:8080
,我有一个js代码,它向
example.com:8888/api/myApi

我的浏览器不发送任何cookie。我在chrome开发工具的网络选项卡上看到了这一点,但在请求标题部分下没有看到任何cookie

另一方面,如果我在“其他”选项卡中打开相同的URL,没有其他更改,所有cookie都会被发送,我会得到完美的响应

我不认为这可能是跨原产地问题,因为我已经得到了以下与原产地相关的核心标题的回应-

Access-Control-Allow-Headers: *

Access-Control-Allow-Methods: GET,POST,OPTIONS

Access-Control-Allow-Origin: *

额外资料-

我的Ajax代码:

var httpRequest = new XMLHttpRequest();

            httpRequest.onreadystatechange = function () {
                var data;
                if (httpRequest.readyState === 4) {
                    if (httpRequest.status === 200) {
                        if (httpRequest.response) {
                            data = httpRequest.response;
                        } else if (httpRequest.responseType && (httpRequest.responseType === '' || httpRequest.responseType === 'text')) {
                            data = httpRequest.responseText;
                        }
                        if (args.dataType && args.dataType === 'json' && typeof data === 'string') {
                            data = JSON.parse(data);
                        }
                        args.done(data, xdr);
                    } else {
                        args.fail(httpRequest);
                    }
                    args.always(httpRequest, data);
                }
            };
            httpRequest.open(args.type, fullUrl);
            httpRequest.setRequestHeader('Content-Type', args.contentType);
            httpRequest.responseType = args.dataType;
            httpRequest.send();
验证-我的问题截图-

如果您的浏览器为
example.com:8080
(以前的会话中)设置了cookie,则当您通过地址栏打开URL时,浏览器会将cookie一起发送。但是,如果您从另一台主机请求,而该主机仅在您允许CORS时才起作用,那么由于您允许CORS,cookie将不再发送。为了防止这种情况,您需要设置
req.withCredentials=true
其中
req
是XMLHttpRequest实例。如果使用jQuery,则可能会重复,请参阅:端口更改是否会跨源@ChrisG,因为当我通过浏览器直接点击相同的URL时,会发送相同的cookies。cookie、api和page这三个东西的主域是相同的,所以在通过ajax调用时不发送cookie实际上没有意义,而是在用户直接命中时发送cookie。是的,不同的端口是一个单独的源。通过地址栏主动打开某个内容与在您不知情的情况下加载任意资源的网站截然不同。