我不是要尝试使用xmlhttprequest发送cookie数据,而是尝试使用xmlhttprequest为会话设置cookie而无需用户交互.
我想关闭在Windows机器上的应用程序中运行的VBScript对服务器进行URL调用时使用的缓存.我用什么函数/方法/对象来做这个?
当第一次进行调用时,我的基于Linux的Apache服务器从正在运行的CGI Perl脚本返回响应.但是,后续运行的脚本似乎使用了与第一次相同的响应,因此数据正在某处缓存.我的服务器日志确认在以后的那些时间内没有调用服务器,仅在第一次.
这就是我在做的事情.我在商业应用程序中使用以下代码(不想提及此应用程序,可能与我的问题无关):
With CreateObject("MSXML2.XMLHTTP")
.open "GET", "http://myserver/cgi-bin/nsr/nsr.cgi?aparam=1", False
.send
nsrresponse =.responseText
End With
Run Code Online (Sandbox Code Playgroud)
在上面的对象上是否有一个函数/方法来关闭缓存,或者我应该在创建URL之前调用一个方法/函数来关闭响应对象的缓存?
我在这里寻找解决方案:http://msdn.microsoft.com/en-us/library/ms535874(VS.85).aspx - 不是很有帮助.在这里:http://www.w3.org/TR/XMLHttpRequest/ - 非常不友好,难以阅读.
我也试图强制不使用http标头设置和html文件头元数据缓存:
服务器端Perl CGI脚本的片段,它将响应返回给调用客户端,将expiry设置为0.
print $httpGetCGIRequest->header(
-type => 'text/html',
-expires => '+0s',
);
Run Code Online (Sandbox Code Playgroud)
响应中的Http头设置发送回客户端:
<html><head><meta http-equiv="CACHE-CONTROL" content="NO-CACHE"></head>
<body>
response message generated from server
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
上面的http标头和html文档头设置都没有用,因此我的问题.
我收到以下错误.
未捕获错误:INVALID_STATE_ERR:DOM异常11
这是我得到Error RUN TIME的代码.
xhttp.setRequestHeader("Content-type","application/xhtml+xml");<br>
xhttp.open("POST",xmlFile,true);<br>
xhttp.send(postData);
Run Code Online (Sandbox Code Playgroud)
我尝试使用falsexhttp.open的第三个参数.
有谁能告诉我是什么原因造成的?
我花了最后3天研究如何使用XMLHttpRequest创建跨域请求.最好的替代方案确实是我已经使用的JSONP.
但我还有一个问题,我无法找到答案.我阅读了数百个帖子(包括SO),没有人有一个很好的可靠回答(很好的参考).希望有人可以提供帮助.
说,我在许多网站上读到,由于安全原因,我无法从域aaa.com向bbb.com发出Ajax请求并获取我想要的数据.这很清楚,我对此毫无疑问.但问题是当我在我的localhost中运行下面的代码时(所以我的域名是"localhost",我不应该从另一个域请求任何数据).
xhReq = new XMLHttpRequest();
xhReq.open("GET","http://domain.com?parameter",true);
xhReq.send(null);
Run Code Online (Sandbox Code Playgroud)
当我检查Firebug Net选项卡时,我发现请求未被阻止!明确要求.我简直不敢相信.所以我在domain.com/log.php中创建了一个文件,在那里我可以记录任何访问我域名的请求.令人惊讶的是,我解雇localhost的所有请求都是我的域名网站.当我尝试获取响应时,由于我的Chrome和FIrebug浏览器的原始策略相同,我实在无法得到它.但我真的很惊讶,尽管我无法操纵响应,但请求真的打到了网络服务器.
更令人惊讶的是,如果domain.com/log.php生成一个像1MB这样大的响应,我的firebug告诉我浏览器确实从网络服务器下载了所有1MB,并且最后它按预期显示"拒绝访问"消息.因此,如果相同的原始策略禁止读取该数据,为什么要下载所有文件.
最后,我让我惊讶的是,我读到的所有网站和规范都说非常清楚,当目标域与源域不匹配时,使用Ajax阻止了请求.但显然,通过我的实验,尽管我无法访问响应数据,但请求仍在完成.
令我不安的是,它可能会打开一个大的安全漏洞,每天有数千个视图的网站可以运行这个3行代码,并在一个不友好的网站上引起巨大的Ddos攻击,只是让用户在另一个网站请求一个页面由于浏览器不会阻止请求,因此间隔较小.
我在IE 7,8和9以及Chrome最新和Firefox最新版本中测试了这个脚本,行为是相同的:请求已完成,浏览器下载了所有响应,但没有让它可以执行SOP.
希望有人可以解释为什么规格是如此错误或者我理解错误!
我试图在同一网站内从一个页面导航到另一个页面之前显示进度条.
我的函数将updateProgress函数绑定到XMLHttpRequest onprogress事件,并将用户重定向到新页面(xhr.readyState == 4 && xhr.status == 200)似乎工作正常,但Chrome显示"总计"为零,赢得了' t让进度条正常运行.我的代码如下.
先感谢您...
$('.ajaxNavi').click(function (e) {
e.preventDefault();
var url = $(this).attr('href');
var xhr = new XMLHttpRequest();
xhr.onprogress = updateProgress;
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200)
// REDIRECT HERE
}
});
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-Type", "text/html");
xhr.send();
});
function updateProgress(e) {
console.log(e.loaded + ' ' + e.total);
}
Run Code Online (Sandbox Code Playgroud) 是否有类似XHR的浏览器API可用于通过HTTP将二进制文件流式传输到服务器?
我希望随着时间的推移制作HTTP PUT请求并以编程方式创建数据.我不想一次创建所有这些数据,因为它可能会在内存中出现.一些psueudo代码来说明我所得到的:
var dataGenerator = new DataGenerator(); // Generates 8KB UInt8Array every second
var streamToWriteTo;
http.put('/example', function (requestStream) {
streamToWriteTo = requestStream;
});
dataGenerator.on('data', function (chunk) {
if (!streamToWriteTo) {
return;
}
streamToWriteTo.write(chunk);
});
Run Code Online (Sandbox Code Playgroud)
我现在有一个Web套接字解决方案,但更喜欢常规HTTP,以便更好地与一些现有的服务器端代码互操作.
编辑:我可以使用最前沿的浏览器API.我正在查看Fetch API,因为它支持请求体的ArrayBuffers,DataViews,Files等.如果我能以某种方式伪造其中一个对象,以便我可以使用动态数据的Fetch API,这对我有用.我尝试创建一个Proxy对象,看看是否有任何方法被调用,我可以修补.不幸的是,似乎浏览器(至少在Chrome中)正在使用本机代码而不是JS版本进行读取.但是,如果我错了,请纠正我.
为什么以下代码基于Mozilla示例不起作用?尝试使用Firefox 3.5.7和Chrome.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
</body>
<script>
var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', false);
req.send();
if(req.status == 200) {
alert(req.responseText);
}
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
请浏览器从本地磁盘中提取html(文件:/// C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)
在Firefox上它会出现以下错误:
uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no]
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我想向远程主机提交请求并提醒结果(稍后添加到div中).
我在NodeJS上运行SocketIO,我不太关心广泛的浏览器支持,因为这是我的宠物项目,我想利用新技术的所有功能来简化开发.我关心的是如何将大量的JSON数据从服务器发送到客户端并返回.嗯,这些数量不像视频或图像二进制数据那么大,我想每个请求不超过几百千字节.
我看到的两个场景是:
我在Meteor.js中看到了第一个案例,所以我想知道它的原因.请分享您的意见.
我正在尝试制作"许多" xhr请求,但似乎每次在提出另一个请求之前等待答案.这就像XHR组成队列并始终等待前一个请求完成.
如何同时运行更多xhr请求?
$('body').delegate('.download','click', function(evt){
evt.preventDefault(); // Not related
var xhr = new XMLHttpRequest();
xhr.open('GET', "proxy.php?" + this.href, true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status == 200) {
var blob = new Blob([this.response], {type:'audio/mp4'});
console.log(blob.size);
if(blob.size > 0){
$("<a>").attr({
download: name,
href: URL.createObjectURL(blob),
target: "_blank"
})[0].click();
}
}
};
xhr.send();
});
Run Code Online (Sandbox Code Playgroud) 使用WebAPI后端服务器处理新项目,我无法从实际网站发布到控制器,尽管Postman没有问题发布到控制器.我收到错误415,浏览器控制台记录:
HTTP415: UNSUPPORTED MEDIA TYPE - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.
(XHR)OPTIONS - http://localhost:5000/api/Users
Run Code Online (Sandbox Code Playgroud)
来自Kestrel的日志是
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 OPTIONS http://localhost:5000/api/Users 0
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 OPTIONS http://localhost:5000/api/Users 0
info: Microsoft.AspNetCore.Mvc.StatusCodeResult[1]
Executing HttpStatusCodeResult, setting HTTP status code 415
Microsoft.AspNetCore.Mvc.StatusCodeResult:Information: Executing HttpStatusCodeResult, setting HTTP status code 415
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
Executed action SchoolsChat.Controllers.UserContoller.Post (SchoolsChat) in 2.5323ms
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed …Run Code Online (Sandbox Code Playgroud) xmlhttprequest ×10
javascript ×7
ajax ×2
android ×1
asp.net ×1
asp.net-core ×1
asynchronous ×1
browser ×1
c# ×1
caching ×1
cookies ×1
cordova ×1
domexception ×1
http ×1
jquery ×1
node.js ×1
response ×1
socket.io ×1
typescript ×1
vbscript ×1
websocket ×1