我正在使用jQuert .ajax函数来调用页面方法.该网站正在使用FormsAuthentication.因此,当身份验证票证到期时,对页面方法的调用显然会导致重定向到登录页面.
现在,编写System.Web.Handlers.ScriptModule的天才决定,如果出于某种原因对页面方法或Web服务方法进行REST样式调用,从JavaScript导致302重定向,他们只是简单地转向回应401未经授权.这导致浏览器弹出一个完全误导的登录UI,因为用户试图输入他们的用户名和密码,这意味着什么,因为使用了FormsAuthentication.最后,当用户单击"取消"时,401将进入错误处理程序.
那么,问题是,如何以任何方式禁用浏览器的登录UI提示?网上有些人建议在XHR请求中使用用户名和密码,但它似乎不起作用.
我正在寻找一些东西(最好是Firefox扩展程序),它可以让我看到所有的AJAX子请求.基本上,无论何时生成XMLHTTPRequest(),我都想知道正在请求什么URL以及与它一起传递了什么(如果有的话)GET和POST变量.
除非我错过了,否则我在Firebug或Web Developer Toolbar中看不到任何类似的内容.
(如果你很好奇,想要这个的主要原因是我想要抓一个使用JS加载其所有内容的网站的本地副本,我不想花费数小时挖掘他们的JS代码当我能看到正在制作的子请求时.)
我正在评估使用GWT-RPC和HTTP Call进行的调用之间是否存在性能差异.
我的appln服务作为Java servlet托管,我目前正在使用HTTPProxy连接从它们获取数据.我希望将它们转换为GWT-RPC调用,如果这会带来性能提升.
我想知道每个人的利弊...
还有关于衡量异步调用性能的工具的任何建议......
[ 关于可以与GWT一起使用的各种服务器通信策略的好文章.]
通过node.js模块发送的HTTPS请求与XMLHttpRequest之间有什么区别?
我正在尝试向amazon aws发送HTTPS GET请求以从javascript(XMLHttpRequest)获取安全令牌,并且它始终失败,并且"来源控制 - 允许 - 来源"不允许"来源http:// my_ip ",但是如果我通过node.js模块发送相同的HTTPS GET请求它工作正常.
我对此感到困惑,因为如果服务器确实支持CORS,那么来自任何地方的任何请求都应该失败,但是它通过node.js,但不是通过XMLHttpRequest.
这失败
var url_ = "https://sts.amazonaws.com/?Action=GetSessionToken" +
"&DurationSeconds=3600" +
"&AWSAccessKeyId=XXXXXXXXXXXXXXX" +
"&Version=2011-06-15" +
"&Timestamp=" + encode(timestamp) +
"&Signature=" + encode(hash) +
"&SignatureVersion=2&SignatureMethod=HmacSHA256";
// Simple GET request
$.get(url_, function(data) {
alert("response: " + data);
});
Run Code Online (Sandbox Code Playgroud)
这个工作
var https = require('https');
var options = {
host : 'sts.amazonaws.com',
method : 'GET',
path : '/?Action=GetSessionToken' +
'&DurationSeconds=3600' +
'&AWSAccessKeyId=XXXXXXXXXXXXXX' +
'&Version=2011-06-15' +
'&' + timestamp +
'&' + signature +
'&SignatureVersion=2&SignatureMethod=HmacSHA256' …Run Code Online (Sandbox Code Playgroud) 使用"旧"Dojo,可以将第二个参数传递给Xhr请求ioargs的load函数(参见此处的示例6).这ioargs提供了(除其他外)请求的时间戳和状态代码.
但是,如何通过新的"更清洁"(和向前兼容)Dojo实现这一目标?
不幸的是,我在当前的文档中找不到任何提示.
以下应该是上面引用的"新"Dojo示例的端口.但是,ioargs将是未定义的:
require( "dojo/request/xhr", "dojo/dom", "dojo/domReady!",
function(request, dom){
// Look up the node we'll stick the text under.
var targetNode = dom.byId("getLicenseStatus");
// The parameters to pass to xhrGet, the url, how to handle it, and the callbacks.
request.get(
"{{dataUrl}}dojo/LICENSE",
{
handleAs: "text",
preventCache: true
}
).then(
function(data, ioargs){
// FIXME: ioargs is undefined
targetNode.innerHTML = "XHR returned HTTP status: " + ioargs.xhr.status;
},
function(error){
targetNode.innerHTML …Run Code Online (Sandbox Code Playgroud) 最近我意识到我需要使用easyXDM而不是jQuery $.ajax来进行跨域发布请求.在设置easyXDM后,我发现这些功能非常接近:
jQuery的:
$.ajax({
url: "/ajax/",
method: "POST",
data: myData
});
Run Code Online (Sandbox Code Playgroud)
easyXDM:
xhr.request({
url: "/ajax/",
method: "POST",
dataType: 'json', // I added this trying to fix the problem, didn't work
data: myData
});
Run Code Online (Sandbox Code Playgroud)
myData设置如下:
myData = {};
myData[1] = 'hello';
myData[2] = 'goodbye';
myData[3] = {};
myData[3][1] = 'sub1';
myData[3][2] = 'sub2';
myData[3][3] = 'sub3';
Run Code Online (Sandbox Code Playgroud)
当我使用jQuery发出请求时,它正确处理子字段,但不使用easyXDM.
以下是POST请求如何通过jQuery进入服务器:
screenshot-with-shadow.png http://img37.imageshack.us/img37/4526/screenshotwithshadow.png
以下是easyXDM的用法:
screenshot-with-shadow.png http://img204.imageshack.us/img204/4526/screenshotwithshadow.png
如何通过像jQuery这样的easyXDM/XHR请求发送javascript对象/键值对数组?
我试过阅读Guzzle文档,但我无法解决这个问题.
我想使用Guzzle代替cURL以下内容:
protected $url = 'https://secure.abcdef.com/cgi/xml_request_server.php';
$xml = "<ABCRequest>\n";
$xml .= "<Authentication>\n";
$xml .= "<ABLogin>$this->gwlogin</ABLogin>\n";
$xml .= "<ABKey>$this->gwkey</ABKey>\n";
$xml .= "</Authentication>\n";
$xml .= "<Request>\n";
$xml .= "<RequestType>SearchABC</RequestType>\n";
$xml .= "</Request>\n";
$xml .= "</ABCRequest>\n";
$header = "POST $this->url HTTP/1.1\n";
$header .= "Host: domain.com\n";
$header .= "Content-Length: ".strlen($xml)."\n";
$header .= "Content-Type: text/xml; charset=UTF8\n";
$header .= "Connection: close; Keep-Alive\n\n";
$header .= $xml;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
$response = curl_exec($ch);
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)
我试过这个,但我还是新来的......:
$client …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Javascript中编写一个"fileExists"函数,它只是向服务器发送请求,如果发回404状态则返回false.
该功能完美无缺,但我似乎无法抑制我在谷歌Chrome控制台中收到的错误信息:GET /something/foobar 404 (Not Found).
有没有人知道解决这个问题的方法?
作为参考,这是我正在使用的代码:
var fileExists = function(url) {
var req = new XMLHttpRequest();
req.open('GET', url, false);
req.send();
return req.status === 200;
};
Run Code Online (Sandbox Code Playgroud)
提前致谢!
I need to download a large file with JavaScript using XMLHttpRequest or fetch without saving the file first in the RAM-Memory.
Normal link download doesn't work for me, because I need to send a Bearer Token in the header of the request.
我可以设法下载一个文件,但是这个“解决方案”,它首先将文件保存在 RAM 内存中,然后再出现保存对话框,这样如果文件大于可用的 RAM 内存,浏览器就会刹车。
这是我使用 fetch 的“解决方案”:
var myHeaders = new Headers();
myHeaders.append('Authorization', `Bearer ${token}`);
var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };
var a = document.createElement('a');
fetch(url,myInit)
.then((response)=> {
return response.blob(); …Run Code Online (Sandbox Code Playgroud) 我有一个用Node.js编写的服务器,以及一个在浏览器中运行的Web客户端。客户端应从服务器上载一些文件并将其下载到服务器。服务器不是最初交付客户端的服务器,因此这里存在跨域情况。
服务器使用cors中间件来启用跨域请求。由于我还使用了许多自定义标头,因此将其与如下配置一起使用:
api.use(cors({
origin: '*',
allowedHeaders: [ 'content-type', 'authorization', 'x-metadata', 'x-to' ],
exposedHeaders: [ 'content-type', 'content-disposition', 'x-metadata' ]
}));
Run Code Online (Sandbox Code Playgroud)
相反,客户端使用axios,并且上传文件的代码如下所示:
await axios({
method: 'post',
url: 'https://localhost:3000/api/v1/add-file',
data: content,
headers: {
// ...
}
});
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都按预期工作,并且特别适用于CORS。
现在,我想跟踪上传的进度,因此,如其文档onUploadProgress所述axios,我将回调添加到了调用中:
await axios({
method: 'post',
url: 'https://localhost:3000/api/v1/add-file',
data: content,
headers: {
// ...
},
onUploadProgress (progressEvent) {
console.log({ progressEvent });
}
});
Run Code Online (Sandbox Code Playgroud)
如果我现在运行客户端,则上载仍然有效–但onUploadProgress永远不会调用回调。我已经了解到,并不是所有的浏览器都支持此功能(内部仅绑定到onprogress基础XmlHttpRequest对象的事件),但是最新的Chrome应该可以做到这一点(如果我尝试使用不涉及CORS的其他设置,则一切似乎都可以做到)工作)。因此,我认为这是一个CORS问题。
我读到,一旦您向onprogress事件添加侦听器,就会发送预检请求。这又意味着服务器必须接受OPTIONS请求。为此, …