为什么 wget 第一次不在 URL 中使用用户名和密码

Sau*_*abh 6 authentication wget curl

下面是wget的命令和响应,它第一次不使用提供的用户名和密码得到401,后来它使用auth得到200。

这对 curl 很有效,但同样的事情也会通过 Postman 发生,这是什么现象以及为什么会发生?

$> wget 'http://userName:password@host:port/v1/api'
--2018-08-31 16:06:01--  http://userName:password@host:port
Connecting to host:port... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Authentication selected: Basic realm="myApp", API-Key realm="myApp"
Reusing existing connection to host:port.
HTTP request sent, awaiting response... 200 OK
Length: 146 [application/json]
Saving to: 'api'

api 100%[==================================================================================================================>]     146  --.-KB/s   in 0s

2018-08-31 16:06:01 (9.28 MB/s) - 'api' saved [146/146]
Run Code Online (Sandbox Code Playgroud)

pLu*_*umo 8

wget和大多数其他程序在发送凭据之前从服务器端请求基本身份验证质询

这是wget自 1.10.2 版以来的默认行为。
您可以使用--auth-no-challenge选项更改该行为:

如果给定此选项,Wget 将为所有请求发送基本 HTTP 身份验证信息(明文用户名和密码),就像 Wget 1.10.2 和以前的默认情况一样。

不推荐使用此选项,并且仅用于支持一些不知名的服务器,这些服务器从不发送 HTTP 身份验证质询,但接受未经请求的身份验证信息,例如,除了基于表单的身份验证之外。


这是 HTTP 身份验证的一般默认工作流程:

在此处输入图片说明

阅读有关 HTTP 身份验证的更多信息。