wikipedia 上说:
==============
这一个典型的HTTP客户端和HTTP服务器的对话,服务器安装在同一台计算机上(localhost),包含以下步骤:
客户端请求一个需要身份认证的页面,但是没有提供用户名和口令。这通常是用户在地址栏输入一个URL,或是打开了一个指向该页面的链接。
服务端响应一个401应答码,并提供一个认证域。
接到应答后,客户端显示该认证域(通常是所访问的计算机或系统的描述)给用户并提示输入用户名和口令。此时用户可以选择确定或取消。
用户输入了用户名和口令后,客户端软件会在原先的请求上增加认证消息头(值是base64encode(username+":"+password)),然后重新发送再次尝试。
在本例中,服务器接受了该认证屏幕并返回了页面。如果用户凭据非法或无效,服务器可能再次返回401应答码,客户端可以再次提示用户输入口令。
注意:客户端有可能不需要用户交互,在第一次请求中就发送认证消息头。
==============
那么问题来了:
1. 假如客户端是浏览器,当认证成功之后,后续的请求还有 auth header 吗?还是保存在 cookie 里?如果没有,server 怎样判断是否同一用户?
2. 典型的程序用 httpclient 又是如何实现的?在所有请求里都添加 auth header 吗?
==============
这一个典型的HTTP客户端和HTTP服务器的对话,服务器安装在同一台计算机上(localhost),包含以下步骤:
客户端请求一个需要身份认证的页面,但是没有提供用户名和口令。这通常是用户在地址栏输入一个URL,或是打开了一个指向该页面的链接。
服务端响应一个401应答码,并提供一个认证域。
接到应答后,客户端显示该认证域(通常是所访问的计算机或系统的描述)给用户并提示输入用户名和口令。此时用户可以选择确定或取消。
用户输入了用户名和口令后,客户端软件会在原先的请求上增加认证消息头(值是base64encode(username+":"+password)),然后重新发送再次尝试。
在本例中,服务器接受了该认证屏幕并返回了页面。如果用户凭据非法或无效,服务器可能再次返回401应答码,客户端可以再次提示用户输入口令。
注意:客户端有可能不需要用户交互,在第一次请求中就发送认证消息头。
==============
那么问题来了:
1. 假如客户端是浏览器,当认证成功之后,后续的请求还有 auth header 吗?还是保存在 cookie 里?如果没有,server 怎样判断是否同一用户?
2. 典型的程序用 httpclient 又是如何实现的?在所有请求里都添加 auth header 吗?