作者davichang (davi.chang)
看板Web_Design
标题[问题]浏览器对http 基础认证的处理
时间Sat Feb 18 09:41:37 2017
目前手边有一台webserver,当ie浏览器连线到此server时,如果浏览器未通过认证则会
发出一个401状态给浏览器,观察伺服器里面回应401状态的code如下
void send_r_unauthorized(request * req, const char *realm_name)
{
SQUASH_KA(req);
req->response_status = R_UNAUTHORIZED;
if ((req->http_version != HTTP09) )
{
req_write(req, http_ver_string(req->http_version));
req_write(req, " 401 Unauthorized" CRLF);
print_http_headers(req);
req_write(req, "WWW-Authenticate: Basic realm=\".\"" );
req_write(req, realm_name);
req_write(req, CRLF);
req_write(req, "Content-Type: " HTML CRLF CRLF); /* terminate header */
}
#if 1
if (req->method != M_HEAD )
{
req_write(req,"<HTML><HEAD><TITLE>401 Unauthorized</TITLE></HEAD>\n"
"<BODY> 入力されたユーザー名、あるいはパスワードに误りがあり、本制品の管理画面
にアクセス できません。以下の内容を参考にして、再度入力を试みてください 。・・
・\n</BODY></HTML>\n");
}
req_flush(req);
#else
if (req->method != M_HEAD)
{
req_write(req,
"<HTML><HEAD><TITLE>401 Unauthorized</TITLE></HEAD>\n"
"<BODY><H1>401 Unauthorized</H1>\nYour client does not "
"have permission to get URL ");
req_write_escape_html(req, req->request_uri);
req_write(req, " from this server.\n</BODY></HTML>\n");
}
req_flush(req);
#endif
}
我发现当ie浏览器3次认证错误後,它会显示server所回应的错误讯息页面
而chrome浏览器则会一直尝试输入帐密
想问一下ie浏览器在3次认证错误後是对server回应的401状态做了甚麽处理?
有没有软体可以观察到浏览器做了甚麽处理?
还有为何错误讯息的页面只有在认证视窗下按下取消或者是ie浏览器3次认证错误才会出
现?我看server程式只要没通过认证它每次都有送出那段错误讯息页面的html给浏览器。
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.30.31
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1487382100.A.2E6.html
1F:→ ssccg: 要知道做了什麽处理,看文件或source code啊 02/18 09:53
2F:→ ssccg: 为什麽页面在取消才会出现,不就浏览器设计成这个样子? 02/18 10:07
3F:→ ssccg: 通常浏览器收到401,是依照WWW-Authenticate指定的认证方式 02/18 10:23
4F:→ ssccg: (显示UI向使用者)取得认证要的资讯然後再送一次,读不读 02/18 10:26
5F:→ ssccg: response body、读了要不要显示那就浏览器自己的事,就像 02/18 10:26
6F:→ ssccg: 301 redirect就算有body,浏览器也是看header就直接转址了 02/18 10:27
7F:→ ssccg: 不会显示什麽东西,至於IE设计成送3次放弃显示body,那就是 02/18 10:27
8F:→ ssccg: IE设计成这样而已啊 02/18 10:27
9F:→ davichang: 了解,那浏览器相关文件跟source code网路上找的到吗? 02/18 11:36