我试图加载一个图像客户端和base64编码服务器返回的字节,以传递它来执行一些处理.IE具有XMLHttpRequest对象的RequestBody属性,但我似乎无法使用它,并且RequestText被截断.在Firefox中,RequestText存在,但似乎已损坏.
我想在我的网页上显示网络摄像头的图像,但图像位于HTTP基本认证服务器后面.
在Firefox和Chrome中,我可以这样做:
<img width="320" height="200" src="http://username:password@server/Path" />
Run Code Online (Sandbox Code Playgroud)
但在Internet Explorer 8中,我得到一个空的图像框.如果我使用JQuery设置src属性,IE8会显示一个空白的src.看起来IE8正在检查字符串并拒绝它.
有没有办法将基本身份验证凭据放在img标记中?
我目前在使用IE10进行跨域ajax调用时遇到问题(在IE10模式下,不兼容).
情况:我有两个域名,http://a和http://b.我有一个cookie设置http://b.我目前在页面上http://a.
我想做一个http://b使用XMLHttpRequest 的CORS请求(根据http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx,这应该可行.),并在请求中包含cookie.JS如下:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://b', true);
xhr.withCredentials = true;
xhr.send();
Run Code Online (Sandbox Code Playgroud)
这应该确保cookie附加到请求; 然而,Fiddler跟踪显示没有附加cookie,我得到了401: Access Denied.
服务器配置为使用CORS,它包括Access-Control标头:
Access-Control-Allow-Origin: http://a
Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)
(这不应该有任何区别,因为没有OPTIONS预检请求,并且IE发送的第一个请求是GET,并且cookie不存在,从而导致401).
此外,JS代码段在Firefox和Opera中均可正常运行.
我设法成功调用Apache中受基本身份验证(htpasswd等)保护的目录后面的URL.Ajax GET请求正常工作并返回受保护的内容:
var encoded = Base64.encode(username + ':' + password);
$.ajax({
url: "/app/test",
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic ' + encoded);
},
success: function() {
window.location.href = '/app/test.html';
}
});
Run Code Online (Sandbox Code Playgroud)
我最初的假设是,一旦网络会话成功授权了一个请求,它就可以在"成功"块中重定向,而无需询问用户凭据.调用此代码块时,用户已在非受保护环境中输入用户名和密码.但是,当调用重定向时,浏览器将弹出登录/密码窗口.
关于如何预先授权用户提供的基本授权会话的任何建议?
我有以下资源:
function _arrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[ i ]);
}
return window.btoa(binary);
}
var API = $resource(server + 'album', {}, {
get: {
url: server + 'album/:albumId/photo/:photoId',
method: 'GET',
responseType: 'arraybuffer',
headers: {
'AuthToken': 'the secret',
'Accept': 'image/*'
},
interceptor: {
response: function(resp) {
return 'data:'+ resp.headers('Content-Type') + ';base64,' + _arrayBufferToBase64(resp.data)};
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
它的作用是从服务器接收文件的二进制内容,并返回带有base64数据的数据uri.
我不得不说这个调用不能被简单的src标记替换为url,因为还有一些身份验证头也被发送. …