做题遇到的网页,源代码只有一个 html
文件,内容如下:
1 |
|
在没有任何 JavaScript 代码的情况下,打开网页时有一弹窗,有两个输入框分别输入账号密码,下方有“登录”或“取消”两选项。该网页源代码没有任何涉及弹窗的内容,所以出现弹窗看起来很反常。
其实是利用了 HTTP Basic 认证协议:
当服务器返回
401 Unauthorized
状态码时,浏览器会强制自动弹出账号密码输入框。这是 HTTP 协议规定的标准行为,无需前端代码。用户输入的账号密码会被浏览器自动拼接为
username:password
格式,并进行 Base64 编码,最终添加到请求头的Authorization
字段中:1
Authorization: Basic base64(username:password)
上述
base64(username:password)
实际替换为账号、冒号与密码拼接成的字符串的 Base64 编码。Basic
是认证方式,表示 HTTP Basic Authentication (基本认证),还有Digest
、Bearer Token (Token-Based)
以及其他许多认证方式。
全过程由浏览器原生实现,不需要任何 JavaScript 代码。