test.html:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
</head>
<body></body>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
url: "./test.php",
type: "POST",
data: {"user" : "min", "pass" : "he"},
error: function(jqXHR, textStatus, errorThrown) {
if (textStatus == "error") {
alert(textStatus + " : " +errorThrown)
} else {
alert(textStatus)
}
},
success: function(data, textStatus, jqXHR) {
alert(jqXHR.getResponseHeader("Server"))
alert(jqXHR.getResponseHeader("Content-Type"))
alert(jqXHR.getResponseHeader("X-Powered-By"))
alert(jqXHR.getResponseHeader("Content-Encoding"))
alert(jqXHR.getAllResponseHeaders())
alert(jqXHR.getResponseHeader("Set-Cookie")) //返回null,不能获取Set-Cookie的值
alert(data + textStatus)
}
})
})
</script>
</html>
test.php:
<?php
if (isset($_COOKIE["time"])) {
$time = $_COOKIE["time"] + 1
} else {
$time = 1
}
setcookie("time", $time)
$user = $_REQUEST["user"]
$pass = $_REQUEST["pass"]
print $user.$pass." ".$time
注意:jQuery通过XMLHttpRequest的getResponseHeader或getAllResponseHeaders()可以获取指定的HTTP header field的值,但规定不能获取Set-Cookie和Set-Cookie2的值。
// ajax 对象function ajaxObject() {
var xmlHttp
try {
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest()
}
catch (e) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
} catch (e) {
alert("您的浏览器不支持AJAX!")
return false
}
}
}
return xmlHttp
}
// ajax post请求:
function ajaxPost ( url , data , fnSucceed , fnFail , fnLoading ) {
var ajax = ajaxObject()
ajax.open( "post" , url , true )
ajax.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" )
ajax.onreadystatechange = function () {
if( ajax.readyState == 4 ) {
if( ajax.status == 200 ) {
fnSucceed( ajax.responseText )
}
else {
fnFail( "HTTP请求错误!错误码:"+ajax.status )
}
}
else {
fnLoading()
}
}
ajax.send( data )
}
HTTP协议中的 Authorization 请求消息头含有服务器用于验证用户代理身份的凭证,通常会在服务器返回 401 Unauthorized 状态码以及 WWW-Authenticate 消息头之后在后续请求中发送此消息头。
格式是Basic字符串+空格+ 用户名:密码 的Base64编码。
将凭证<credentials>部分进行Base64编码,然后再拼接字符串'Basic ',就可以生成基础验证方案。
因为DOMString 是16位编码的字符串,如果有字符超出了8位ASCII编码的字符范围时,在大多数的浏览器中对Unicode字符串调用 window.btoa将会造成一个 Character Out Of Range 的异常。
所以下列方法将UTF-16的 DOMStrin 转码为UTF-8的字符数组然后再编码。
将UTF-16的 DOMString 转码成UTF-8的字符串进行base64编码
使用 eoLinker 发送Basic Auth,输入用户名scar 密码123456
PS: eoLinker是一个很好用的接口管理网站,前端测试很方便
在JS Bin运行后,发现和eoLinker结果一致,成功!!
Authorization
Authentication
Javascript base64
Base64的编码与解码
Base64笔记-阮一峰老师
btoa方法