JS能获取HTTP头么

JavaScript014

JS能获取HTTP头么,第1张

当然能了,下面附代码

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方法