精华内容
下载资源
问答
  • 在IIS中在401的基础上定义了一系列的子状态码来表明各类不一样状况下未经受权访问的具体缘由。html401.1 - Logon failed.-登录失败windows401.2 - Logon failed due to server configuration.-基于服务器配置的登录...

    根据http协议对状态码的定义,401表明未经受权的访问。在IIS中在401的基础上定义了一系列的子状态码来表明各类不一样状况下未经受权访问的具体缘由。

    html

    401.1 - Logon failed.-登录失败windows

    401.2 - Logon failed due to server configuration.-基于服务器配置的登录失败浏览器

    401.3 - Unauthorized due to ACL on resource.-资源访问控制列表返回未受权安全

    401.4 - Authorization failed by filter.-服务器filter返回未受权服务器

    401.5 - Authorization failed by ISAPI/CGI application.-服务器ISAPI/CGI返回未受权架构

    这篇文章中主要来介绍各类常见401错误的重现方法相应的解决方案。在这以前首先介绍一下对于401问题的定位方式,即如何知道发生了401错误。app

    401问题的定位方式

    对于401问题的定位咱们要区分咱们是在客户端仍是在服务器端访问页面,由于服务器对于错误返回消息的配置不一样使咱们在浏览器中看到的结果截然不同。dom

    客户端对于401问题的定位

    在客户端咱们遇到401问题时常常会见到的页面以下,这是一个IIS 7及以上版本的默认401错误页面。ide

    247d224953264748a411c80a.html

    服务器也能够配置使用不一样的错误页面来呈现这个问题。因此更为精确的定位方式咱们仍是要参考服务器返回的状态码。

    工具

    在IE中打开F12开发者工具,切换到network选项卡,而后点start capturing。访问该网页,抓取的network追踪记录中就能够看到401的返回码。

    247d224953264748a411c80a.html

    服务端对于401问题的定位

    在服务器端访问出错页面的结果以下,通常默认配置状况下服务器会显示详细的错误信息。

    247d224953264748a411c80a.html

    另外咱们也能够经过查看IIS日志来肯定详细的出错码。

    打开IIS - Loggingfeature,注意须要肯定SelectFields中选中了Protocal Status和Protocal Substatus (默认状况下是选中的)。

    247d224953264748a411c80a.html

    而后到日志记录中查找相应的请求记录,从而肯定返回状态码与子码分别是什么。

    #Software:Microsoft Internet Information Services 8.0

    #Version:1.0

    #Date:2012-10-05 04:34:24

    #Fields:date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ipcs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken

    2012-10-0504:34:24 ::1 GET /iisstart.htm - 80 - ::1Mozilla/5.0+(compatible;+MSIE+10.0;+Windows+NT+6.2;+WOW64;+Trident/6.0) -401 2 5 753

    401.1 - Logon Failed

    问题重现

    401.1问题通常是由于用户名和密码没法在服务器经过认证致使。要重现这个问题能够在服务器禁用匿名访问方式。启用basic认证方式。

    247d224953264748a411c80a.html

    再次访问页面,就会弹出以下须要输入用户名和密码的对话框。

    247d224953264748a411c80a.html

    若是三次输入的用户名和密码出错的话,你就会获得这样一个页面

    247d224953264748a411c80a.html

    若是是服务器端详细的信息是这样的

    247d224953264748a411c80a.html

    解决方案

    这种问题通常发生的缘由就是用户名和密码不正确。能够尝试重置用户密码或经过另一个用户登录来定位是不是用户名密码的问题。

    另外还有一种较为常见的在服务器的应用程序池运行在一个本地或者域帐户的状况下,由于kerberos认证失败而致使401.1错误。这种问题的解决办法能够参照这里。

    401.2 - Logon failed due to server configuration

    问题重现

    401.2问题通常是由于服务器配置缘由致使的,好比最多见的服务器启用了基于401Challenge的认证方式,那么客户端尝试发送匿名请求给服务器,服务器就会返回401 Challenge给客户端,客户端受到这个回复以后就会弹出认证对话框,如上面重现401.1问题时的认证对话框。而这个401Challenge请求在服务器日志里面会记录成401.2。

    因此当在日志中发现下面这种401.2错误的时候不用担忧,由于能够看到用户名为空的请求返回了401.2,以后又有带了用户名的请求返回了200(请求成功)。

    2012-10-0507:26:40 ::1 GET /iisstart.htm - 80 - ::1Mozilla/5.0+(compatible;+MSIE+10.0;+Windows+NT+6.2;+WOW64;+Trident/6.0) -401 2 5 7

    2012-10-0507:27:08 ::1 GET /iisstart.htm - 80 - ::1Mozilla/5.0+(compatible;+MSIE+10.0;+Windows+NT+6.2;+WOW64;+Trident/6.0) -401 2 5 8

    2012-10-0507:27:26 ::1 GET /iisstart.htm - 80domain\user1::1Mozilla/5.0+(compatible;+MSIE+10.0;+Windows+NT+6.2;+WOW64;+Trident/6.0) - 200 0 0 409

    另一种401.2的重现方式很是简单,是把全部的认证方式所有禁用,再次访问网页就会返回401.2错误消息。在第一节问题通常定位方式截图中显示的401.2错误就是把全部的认证方式禁用获得的。

    第三种方式比较特殊,咱们能够经过服务器端配置authorization rule来禁止或者容许特定的用户访问。为了重现问题咱们禁用全部的用户。

    247d224953264748a411c80a.html

    访问网页以后发现返回401.2错误,在服务器详细错误中在这里咱们要关注的一点是Module中显示的信息,这里咱们能够看到是UrlAuthorizationModule,而不是前面禁用了全部认证方式的IISWeb Core,这就告诉咱们出错的地方在于配置的的Authorization Rules。

    247d224953264748a411c80a.html

    解决方案

    第一种状况属于正常现象,不是问题

    第二种状况即没有启用任何认证方式,只须要在IIS Manager里面启用须要的认证方式便可。

    第三种状况即被Authorization Rule阻挡,则须要分析这个authorization rule是不是否必须来决定对他的更改。

    还有第四种状况,就是在配置文件中指定了认证方式可是相应的认证模块没有安装。这种状况多发生在系统迁移的过程当中。解决方案就是把相应的认证模块安装上。

    401.3 - Unauthorized due to ACL on resource

    问题重现

    401.3问题是最明显的一个,即没有权限访问文件(夹),要重现这个问题咱们能够将要访问的文件的安全性设置为拒绝任何人访问。而后请求该文件就会获得如下出错信息。

    247d224953264748a411c80a.html

    在这里须要关注的错误显示的Logon User,这样能够知道你正在以什么身份访问文件。

    解决方案

    调试401.3须要知道两件事,

    第一是什么资源组织了访问,问题出在上级文件夹仍是文件自己。

    第二是咱们以什么样的身份访问资源的时候被阻止了。

    调试这个问题最好的工具是Process Monitor。打开Process Monitor过滤w3wp进程对文件的访问。就能够看到access deny被记录下来。同时还有访问身份信息。这样咱们就能够在文件系统作相应的更改来解决问题。

    247d224953264748a411c80a.html

    401.4 - Authorization failed by filter

    问题重现

    401.4问题重现比起前面要更加费些周折,由于这个错误的意思是自定义filter返回了拒绝访问的错误。因此咱们要先建立一个自定义filter。

    这里值得注意的是在IIS6上只能建立自定义ISAPI Filter来处理进入的各类请求,建立ISAPI Extension来处理特定的请求。而这两种扩展方式在IIS7及以上的版本再也不被推荐使用,取而代之的是建立Http Module和HttpHandler来扩展IIS的功能,并且支持托管和非托管两种模式,开发和调试都更加方便。

    为了更形象的重现这个问题,咱们仍是采用ISAPI Filter的方式。建立ISAPI Filter须要两个文件。

    401-4-Filter.def

    LIBRARY 401-4-Filter

    ;DESCRIPTION 'filter to return 401.4'

    EXPORTS

    HttpFilterProc

    GetFilterVersion401-4-Filter.C

    #include

    #include

    #define DEFAULT_BUFFER_SIZE 1024

    #define MAX_BUFFER_SIZE 4096

    DWORD

    OnPreprocHeaders(

    IN HTTP_FILTER_CONTEXT * pfc,

    IN HTTP_FILTER_PREPROC_HEADERS * pPPH

    );

    BOOL

    WINAPI

    GetFilterVersion(

    HTTP_FILTER_VERSION * pVer

    )

    {

    pVer->dwFilterVersion = HTTP_FILTER_REVISION;

    lstrcpyn( pVer->lpszFilterDesc,

    "Filter to return 401.4 error",

    SF_MAX_FILTER_DESC_LEN );

    pVer->dwFlags =

    SF_NOTIFY_ORDER_HIGH |

    SF_NOTIFY_PREPROC_HEADERS

    ;

    return TRUE;

    }

    DWORD

    WINAPI

    HttpFilterProc(

    IN HTTP_FILTER_CONTEXT * pfc,

    DWORD dwNotificationType,

    LPVOID pvNotification

    )

    {

    switch ( dwNotificationType )

    {

    case SF_NOTIFY_PREPROC_HEADERS:

    return OnPreprocHeaders(

    pfc,

    (HTTP_FILTER_PREPROC_HEADERS *) pvNotification );

    }

    return SF_STATUS_REQ_NEXT_NOTIFICATION;

    }

    DWORD

    OnPreprocHeaders(

    HTTP_FILTER_CONTEXT * pfc,

    HTTP_FILTER_PREPROC_HEADERS * pPPH

    )

    {

    SetLastError( ERROR_ACCESS_DENIED );

    return SF_STATUS_REQ_ERROR;

    }

    将其编译成与application pool CPU架构(x86|x64)相同的classlibrary。而后经过IIS Manager功能视图中ISAPI Filter中加入编译产生的Dll。以后请求页面就会获得以下返回。

    247d224953264748a411c80a.html

    解决方案

    能够看到详细信息中并无显示出出问题的模块,这里就须要咱们经过必定的调试手段来定位这个出错的模块在哪里。比较方便的方式是经过failed request tracing追踪请求,找到出错的模块。

    详细的方法能够参考这里

    401.5 - Authorization failed by ISAPI/CGI application

    问题重现

    401.5问题的出现缘由可能源于如下几个方面阻止了请求。

    自定义的ISAPIextension

    CGI程序

    ASP页面

    自定义handler

    这里经过一个managedhttp handler来重现这个问题,将如下代码放在网站根目录下App_Code文件夹,而后在IISManager功能视图里选在Handler Mapping,添加Managed Handler,选择一个对应的请求路径,咱们这里用它来处理全部*.aa的文件请求,以后在网站里面加入一个test.aa文件,经过浏览器发送请求。

    using System.Web;

    namespace 4015Handler

    {

    public class 4015Handler: IHttpHandler

    {

    public bool IsReusable

    {

    get { return true; }

    }

    public void ProcessRequest(HttpContext context)

    {

    context.Response.StatusCode = 401;

    context.Response.SubStatusCode = 5;

    context.Response.End();

    }

    }

    }

    就会获得这样的结果。

    247d224953264748a411c80a.html

    解决方案

    对于这个问题的定位方式与401.4同样,能够经过failedrequest tracing来跟踪消息,找到出错的模块。

    详细方法以下

    展开全文
  • 这几天,新来了一些小伙伴, 在他们接下来的一些工作中, 也发现了一些比较有意思的bug, 有些bug确属不应该,不过也有些bug比较有意思, 有时间了,我会慢慢的整理一些发上来和大家分享, 今天先分享一个: HTTP: 401介绍: ...

    说在前面的话:

    最近工作确实比较忙了一些, 毕竟是年初,很多事情都需要重新布置, 一年之计在于春嘛;

    这几天,新来了一些小伙伴, 在他们接下来的一些工作中, 也发现了一些比较有意思的bug, 有些bug确属不应该,不过也有些bug比较有意思, 有时间了,我会慢慢的整理一些发上来和大家分享, 今天先分享一个: HTTP: 401

    介绍: 什么是HTTP: 401

    时常做应用开发的伙伴们,估计大家对这个数字并不陌生, 毕竟只要你的应用需要申请服务器数据, 那么难免会遇到它, 当然我的新来的这批小伙伴们也比较幸运的遇到了它, 嗯, 确实比较幸运, 因为bug出现,就是学习和进步的时候到了!

    所以,我也就花了一些空余时间来为大家整理了一下;

    常见的HTTP:401错误码:

    401.1 - Logon failed. -登陆失败

    401.2 - Logon failed due to server configuration.-基于服务器配置的登陆失败

    401.3 - Unauthorized due to ACL on resource.-资源访问控制列表返回未授权

    401.4 - Authorization failed by filter.-服务器filter返回未授权

    401.5 - Authorization failed by ISAPI/CGI application.-服务器ISAPI/CGI返回未授权

    对于401,我们可以用一句话描述它:那就是 HTTP 401 错误 - 未授权: (Unauthorized) [绝大多数情况下]

    简单的来说: 就是你的Web服务器认为,客户端发送的 HTTP 数据流是正确的,但进入网址 (URL) 资源 , 需要用户身份验证 , 而相关信息 尚未被提供, 或 已提供但没有通过授权测试。

    这就是通常所知的“ HTTP 基本验证 ”。

    而需客户端提供的验证请求在 HTTP 协议中被定义为 WWW – 验证标头字段 (WWW-Authenticate header field) 。

    那这个401错误码 什么时候会产生呢?

    HTTP 循环中的 401错误

    任何客户端 ( 比如浏览器,比如APP等等 ) ,都需要通过以下循环去向服务器请求数据:

    1.首先从你的站点的 IP 名称 ( 即您站点的网址-URL, 不带起始的 ‘http://') 获得一个 IP 地址。这是由DNS来解析的;

    2.接着, 打开一个 IP 套接字 (socket) 连接到该 IP 地址。

    3.通过该套接字写 HTTP 数据流。

    4.从您的Web服务器接受响应的 HTTP 数据流。该数据流包括状态编码, 其值取决于 HTTP 协议 。 解析该数据流得到 状态编码和其他有用信息。

    而401错误在容易在以上所述的最后一步产生,即当客户端收到 HTTP 状态编码并识别其为 ‘401‘ 时

    例如我这里做了一个测试: 大家看代码 ,(由于请求网络服务器比较不好操作,所以,这个测试我用了自己电脑搭建的本地服务器;)

    首先我给自己电脑的本地服务器(webDav)发送一个put请求, 准备上传一张图片到webDav服务器

    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/uploads/123.jpg"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    request.HTTPMethod =@"put";

    然后获取一张本地的图片,

    //本地文件

    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"head2.png"withExtension:nil];

    [[[NSURLSession sharedSession] uploadTaskWithRequest:request fromFile:

    fileUrl completionHandler:^(NSData *_Nullabledata, NSURLResponse *_Nullableresponse, NSError *_Nullableerror) {

    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    }] resume];

    接着开始执行:

    这里就会出现问题:

    输出结果:

    ca3e561e09ae

    输出结果

    通过输出结果,可以明显的看得到 服务器返回的是401, 因为我们没有授权, 那么怎样授权呢?

    解决 401 错误 – 情景一 : 有防御性的安全策略

    通常情况下

    每个Web服务器都有自己的方式管理用户验证。通常由该网站的网络安全员(例如,系统管理员)决定哪些用户被允许访问该网址。 该人员使用 Web 服务器软件来建立这些用户的用户名及其密码。 因此, 如果您需要访问某个网址(或您忘记了自己的用户名和密码), 只有该网站的网络安全员可以帮助您。任何安全问题需直接提交给他们。

    如果你认为该网站上的网页 应该 是对任何互联网用户开放的, 那么 401 信息就表明了一个更深层问题。 首先,您可以通过一个浏览器检查您的网址。 该浏览器应该运行在一台您以前从未使用过, 也不包含任何有关您的信息的计算机上, 同时, 您还应避免使用您以前用过的身份验证(密码等)。 理想情况是, 这一切应该通过一个完全不同于任何您用过的互联网连接(例如由不同的互联网服务供应商- ISP 提供的拨号连接)。 简而言之,您要模拟一个完全陌生的人通过网上冲浪访问您的网页的情况。

    如果这种通过浏览器的检查表明没有授权问题,则可能是您的 Web 服务器 ( 或周边系统 ) 被设置为不允许某种 HTTP 传输模式。 换句话说就是, 来自一个知名浏览器的 HTTP 通讯是允许的, 但来自其他系统的自动通讯则被拒绝, 并生成 401 错误代码。这是一种异常情况, 但是也许表明您的 Web 服务器周围 采取了非常具有防御性的安全策略。

    比如: iOS9.0之后,就统一规定,对于http请求,只有经过苹果认可的证书且是https:// 的,才可以直接通过访问,如果还是http:// 或者,不是苹果认可的证书的https,都是不可以直接访问的, 所以,通常情况下,解决这类问题,我们会事先在info.plist文件中做一些配置, 也就是我们常说的ATS配置: 我们可以把下面这几行配置添加到info.plist文件中, 首先用源代码方式打开info.plist文件, 然后拷贝下面的几行代码: 如下:

    NSAppTransportSecurity

    NSAllowsArbitraryLoads

    解决 401 错误 – 情景二: 密码,账户名错误

    情景二: 需要提供密码和账号

    当服务器需要验证您的帐户时,您可以有选择性地提供两项信息

    网站用户名,

    网站密码。

    当然只有当您的站点使用 HTTP 基本验证时您才应该提供这些信息。 如果您不提供这些信息,服务器是通不过的,您也会得到 401 错误。

    就如最上面的put请求的代码, 在服务器端,其实我是设定了需要密码和账号才能通过的,

    所以,这种情况下,我们就需要提供账号和密码给服务器了,

    当然,实际开发中,密码和账号是需要严格加密的,都是需要和服务器人员沟通一套非常保密的加密的方法的, 整个过程是比较复杂的,

    不过由于我这里只是做一个演示, 那么就不需要特别复杂了, 就简单一点,说明一个思路即可:

    这里,我就手动来拼接一个账号和密码, 密码加密就用最简单的base64编码;

    假设我们的账号是admin,密码也是123456, 那么我们怎样来设定密码呢?

    首先我们需要定义方法,来拼接密码,并转化为base64编码;

    //定义一个方法: 获取授权的字符串

    - (NSString *)getAuth:(NSString *)name pwd:(NSString *)pwd {

    //拼字符串 admin:123456

    NSString *tmpStr = [NSString stringWithFormat:@"%@:%@",name,pwd];

    //base64编码

    tmpStr = [self base64Encode:tmpStr];

    return [NSString stringWithFormat:@"Basic %@",tmpStr];

    }

    //base64编码

    - (NSString *)base64Encode:(NSString *)str {

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    return [data base64EncodedStringWithOptions:0];

    }

    然后我们在发送put请求的时候, 就同时提供授权

    //上传文件

    - (void)uploadTask {

    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/uploads/123.jpg"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    request.HTTPMethod = @"put";

    //设置账号和密码

    //Authorization: Basic YWRtaW46MTIzNDU2

    // admin:123456

    [request setValue:[self getAuth:@"admin" pwd:@"123456"] forHTTPHeaderField:@"Authorization"];

    //本地文件

    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"head2.png" withExtension:nil];

    [[[NSURLSession sharedSession] uploadTaskWithRequest:request fromFile:fileUrl completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    NSLog(@"--%@",str);

    }] resume];

    }

    执行结果:

    ca3e561e09ae

    执行结果:

    通过结果,我们可以看出, 已经上传成功了, 也就是说,我们顺利的解决了401问题,

    总结解决bug的思路:

    如果遇到401问题, 我们解决的思路,可以这样来考虑:

    优先考虑是否是需要验证,也就是是否需要授权账号和密码信息;

    如果是开放的服务器资源, 需要考虑的是是否有防御性的安全策略;

    一般情况下,都属于这两种原因,

    以上属于我整理的,如有不足之处,望大家斧正! 感谢!!

    展开全文
  • jquery ajax是个很常用接口,而在请求时候,可能存在响应401的情况(身份认证过期或未登录),比较容易出现在混合应用上,如何进行身份认证,重发失败请求,还是值得注意的。ajax请求有两种方式1. 回调最常写的方式,...

    jquery ajax是个很常用接口,而在请求时候,可能存在响应401的情况(身份认证过期或未登录),比较容易出现在混合应用上,如何进行身份认证,重发失败请求,还是值得注意的。

    ajax请求有两种方式

    1. 回调

    最常写的方式,成功失败处理以回调方式传入。

    $.ajax({

    ajax参数...

    success : xxxxxx

    error: xxxxxx

    });

    2. Deferred方式

    Deferred模式我在《js异步编程》有说明, ajax调用本身返回就是一个Deferred对象,成功失败回调不以参数传入。

    $.ajax({

    ajax参数...

    }).then(function(res){

    //成功处理片段

    },function(err){

    //失败处理片段

    });

    既然有这两种方式,那应对处理401的方式也是有两种。

    401处理的两种方式

    1. 回调

    这种方式的处理比较简单,在失败回调里面判断401,如果是则进行身份认证,成功重发请求。

    function getXXXX(type, url, data, success, error){

    $.ajax({

    ajax参数...

    success : xxxxxx

    error : function(xhr,textStatus,errorThrown){

    if (xhr.status == 401) {

    刷新身份认证方法(function(){

    getXXXX(type, url, data, success, error);

    });

    } else{

    // 调用外部的error

    error && error(xhr,textStatus,errorThrown);

    }

    }

    });

    }

    2. Deferred方式

    这种方式目前我找到的处理方式需要修改jquery源码。

    //全局设置一个方法

    $.ajaxSetup({

    authError : function(callback){

    刷新身份认证方法( function(){

    callback && callback();

    });

    }

    });

    //jquery2.1.4版本源码,大概是8261行

    // Success/Error

    if ( isSuccess ) {

    deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );

    } else {

    if(( jqXHR.status == 401 || jqXHR .status == 403) && callbackContext.authError){

    callbackContext.authError(function (){

    state = 0;

    jqXHR.setRequestHeader( "Authorization", XXXXXX);

    jqXHR.readyState = 1;

    try {

    state = 1;

    transport.send( requestHeaders, done );

    } catch ( e ) {

    // Propagate exception as error if not done

    if ( state < 2 ) {

    done( -1, e );

    // Simply rethrow otherwise

    } else {

    throw e;

    }

    }

    });

    return;

    } else {

    deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );

    }

    }

    这里说下为什么不能像第一种方式那样进行请求。

    有两个原因:

    1. then这种链式写法,导致这请求的回调不是在参数里,而是在jQuery.Callbacks一个optionsCache全局变量里,我们无法在ajax error里拿到回调函数进行重发。

    2. 写在then里的回调触发一次就会被销毁,当触发了error时,回调执行后就销毁。

    最后的处理方式就是在要触发error之前,拦截401的错误,重新进行身份认证,然后重置状态,重发请求。

    本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

    jQuery&period;ajax&lpar; options &rpar; &colon; 通过 HTTP 请求加载远程数据

    jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据 这个是jQuery 的底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等. $.ajax() ...

    用JQuery Ajax 与一般处理程序 请求数据无刷新,以及如何调试错误

    通过 ajax() 与 一般处理程序,请求数据库数据,实现界面无刷新. Jquery ajax 请求参数详细说明 http://www.w3school.com.cn/jquery/ajax_ajax ...

    简单的jquery ajax文件上传功能

    /* * 图片上传 * 注意如果不加processData:false和contentType:false会报错 */ function uploadImage(image) { var imageF ...

    兼容ie的jquery ajax文件上传

    Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...

    ASP&period;NET 异步Web API &plus; jQuery Ajax 文件上传代码小析

    该示例中实际上应用了 jquery ajax(web client) + async web api 双异步. jquery ajax post $.ajax({ type: "POST&q ...

    struts2&plus;jquery&plus;ajax实现上传&amp&semi;&amp&semi;校验实例

    一直以为ajax不能做上传,直到最近看了一些文章.需要引入AjaxFileUploaderV2.1.zip,下载链接:http://pan.baidu.com/s/1i3L7I2T 代码和相关配置如下 ...

    jQuery ajax中的get请求方法汇总

    $.get() Defination and Usage 从服务端以HTTP GET方式获取数据 Examples 请求test.php,但是忽略返回的数据 $.get("test.php& ...

    Struts2 使用Jquery&plus;ajax 文件上传

    话不多说 直接上代码 前台js: var formData = new FormData(); formData.append("file1",$("#file1&quo ...

    jQuery选择器遇上一些特殊字符

    学习jQuery过程中,发现一些特殊字符,如“.”,“#”,"(","]"等.它在选择器应用时,按照普通处理就会出错.解决办法,就是使用转义字符来处理,这有点象 ...

    随机推荐

    u-boot 流程分析

    u-boot 介绍: 对于计算机来说 , 从一开始上机通电是无法直接启动操作系统的 , 这中间需要一个引导过程 , 嵌入式Linux系统同样离不开引导程序 ,  这个启动程序就叫启动加载程序(Boot ...

    c&num; 获取 webbrowser 完整 cookie

    下面的代码实现的功能确实如标题所言,但要求是获取的是当前进程内的webbrowser,跨进程或引用的ShellWindows对象无效, 哎我本来两种情况都要用,只把前者代码先记下: internal ...

    POJ C程序设计进阶 编程题#1:寻找下标

    编程题#1:寻找下标 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一 ...

    苹果开发——App内购以及验证store的收据(二)

    原地址:http://zengwu3915.blog.163.com/blog/static/2783489720137605156966?suggestedreading 三. 客户端使用Store ...

    Struts2文件下载浅析

    Struts2极大的简化了文件上传和下载,本文将主要介绍一下Struts2文件下载的实现1.功能主要是,在下载页面点击下载后,则下载相应的文件 2.代码部分jsp页面downloadPage:< ...

    Jar包转成Dll的方式&lpar;带嵌套的jar也能做&rpar; (转)

    研究很好几天,终于成功了.因为写了一个Java的项目,现在要求要改写成C#版本的.但是其中用到了svnkit,svnkit是java平台的.改写成C#的话,要使用SharpSVN,但是SharpSVN ...

    mysql 打开sql日志,记录所有sql

    我使用的mysql版本为:5.7.11 win7环境 记录下下载地址,省得每次百度搜了:http://dev.mysql.com/downloads/installer/ mysql 默认没有开启sq ...

    MySQL 快速复数据库的方法

    为了方便快速复制一个数据库,可以用以下命令将db1数据库的数据以及表结构复制到newdb数据库 创建新的数据库 #mysql -u root -p123456 mysql>CREATE DATA ...

    什么是XML RPC?

    # -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...

    展开全文
  • 这几天,新来了一些小伙伴, 在他们接下来的一些工作中, 也发现了一些比较有意思的bug, 有些bug确属不应该,不过也有些bug比较有意思, 有时间了,我会慢慢的整理一些发上来和大家分享, 今天先分享一个: HTTP: 401介绍: ...

    说在前面的话:

    最近工作确实比较忙了一些, 毕竟是年初,很多事情都需要重新布置, 一年之计在于春嘛;

    这几天,新来了一些小伙伴, 在他们接下来的一些工作中, 也发现了一些比较有意思的bug, 有些bug确属不应该,不过也有些bug比较有意思, 有时间了,我会慢慢的整理一些发上来和大家分享, 今天先分享一个: HTTP: 401

    介绍: 什么是HTTP: 401

    时常做应用开发的伙伴们,估计大家对这个数字并不陌生, 毕竟只要你的应用需要申请服务器数据, 那么难免会遇到它, 当然我的新来的这批小伙伴们也比较幸运的遇到了它, 嗯, 确实比较幸运, 因为bug出现,就是学习和进步的时候到了!

    所以,我也就花了一些空余时间来为大家整理了一下;

    常见的HTTP:401错误码:

    401.1 - Logon failed. -登陆失败

    401.2 - Logon failed due to server configuration.-基于服务器配置的登陆失败

    401.3 - Unauthorized due to ACL on resource.-资源访问控制列表返回未授权

    401.4 - Authorization failed by filter.-服务器filter返回未授权

    401.5 - Authorization failed by ISAPI/CGI application.-服务器ISAPI/CGI返回未授权

    对于401,我们可以用一句话描述它:那就是 HTTP 401 错误 - 未授权: (Unauthorized) [绝大多数情况下]

    简单的来说: 就是你的Web服务器认为,客户端发送的 HTTP 数据流是正确的,但进入网址 (URL) 资源 , 需要用户身份验证 , 而相关信息 尚未被提供, 或 已提供但没有通过授权测试。

    这就是通常所知的“ HTTP 基本验证 ”。

    而需客户端提供的验证请求在 HTTP 协议中被定义为 WWW – 验证标头字段 (WWW-Authenticate header field) 。

    那这个401错误码 什么时候会产生呢?

    HTTP 循环中的 401错误

    任何客户端 ( 比如浏览器,比如APP等等 ) ,都需要通过以下循环去向服务器请求数据:

    1.首先从你的站点的 IP 名称 ( 即您站点的网址-URL, 不带起始的 ‘http://') 获得一个 IP 地址。这是由DNS来解析的;

    2.接着, 打开一个 IP 套接字 (socket) 连接到该 IP 地址。

    3.通过该套接字写 HTTP 数据流。

    4.从您的Web服务器接受响应的 HTTP 数据流。该数据流包括状态编码, 其值取决于 HTTP 协议 。 解析该数据流得到 状态编码和其他有用信息。

    而401错误在容易在以上所述的最后一步产生,即当客户端收到 HTTP 状态编码并识别其为 ‘401‘ 时

    例如我这里做了一个测试: 大家看代码 ,(由于请求网络服务器比较不好操作,所以,这个测试我用了自己电脑搭建的本地服务器;)

    首先我给自己电脑的本地服务器(webDav)发送一个put请求, 准备上传一张图片到webDav服务器

    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/uploads/123.jpg"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    request.HTTPMethod =@"put";

    然后获取一张本地的图片,

    //本地文件

    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"head2.png"withExtension:nil];

    [[[NSURLSession sharedSession] uploadTaskWithRequest:request fromFile:

    fileUrl completionHandler:^(NSData *_Nullabledata, NSURLResponse *_Nullableresponse, NSError *_Nullableerror) {

    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    }] resume];

    接着开始执行:

    这里就会出现问题:

    输出结果:

    ca3e561e09ae

    输出结果

    通过输出结果,可以明显的看得到 服务器返回的是401, 因为我们没有授权, 那么怎样授权呢?

    解决 401 错误 – 情景一 : 有防御性的安全策略

    通常情况下

    每个Web服务器都有自己的方式管理用户验证。通常由该网站的网络安全员(例如,系统管理员)决定哪些用户被允许访问该网址。 该人员使用 Web 服务器软件来建立这些用户的用户名及其密码。 因此, 如果您需要访问某个网址(或您忘记了自己的用户名和密码), 只有该网站的网络安全员可以帮助您。任何安全问题需直接提交给他们。

    如果你认为该网站上的网页 应该 是对任何互联网用户开放的, 那么 401 信息就表明了一个更深层问题。 首先,您可以通过一个浏览器检查您的网址。 该浏览器应该运行在一台您以前从未使用过, 也不包含任何有关您的信息的计算机上, 同时, 您还应避免使用您以前用过的身份验证(密码等)。 理想情况是, 这一切应该通过一个完全不同于任何您用过的互联网连接(例如由不同的互联网服务供应商- ISP 提供的拨号连接)。 简而言之,您要模拟一个完全陌生的人通过网上冲浪访问您的网页的情况。

    如果这种通过浏览器的检查表明没有授权问题,则可能是您的 Web 服务器 ( 或周边系统 ) 被设置为不允许某种 HTTP 传输模式。 换句话说就是, 来自一个知名浏览器的 HTTP 通讯是允许的, 但来自其他系统的自动通讯则被拒绝, 并生成 401 错误代码。这是一种异常情况, 但是也许表明您的 Web 服务器周围 采取了非常具有防御性的安全策略。

    比如: iOS9.0之后,就统一规定,对于http请求,只有经过苹果认可的证书且是https:// 的,才可以直接通过访问,如果还是http:// 或者,不是苹果认可的证书的https,都是不可以直接访问的, 所以,通常情况下,解决这类问题,我们会事先在info.plist文件中做一些配置, 也就是我们常说的ATS配置: 我们可以把下面这几行配置添加到info.plist文件中, 首先用源代码方式打开info.plist文件, 然后拷贝下面的几行代码: 如下:

    NSAppTransportSecurity

    NSAllowsArbitraryLoads

    解决 401 错误 – 情景二: 密码,账户名错误

    情景二: 需要提供密码和账号

    当服务器需要验证您的帐户时,您可以有选择性地提供两项信息

    网站用户名,

    网站密码。

    当然只有当您的站点使用 HTTP 基本验证时您才应该提供这些信息。 如果您不提供这些信息,服务器是通不过的,您也会得到 401 错误。

    就如最上面的put请求的代码, 在服务器端,其实我是设定了需要密码和账号才能通过的,

    所以,这种情况下,我们就需要提供账号和密码给服务器了,

    当然,实际开发中,密码和账号是需要严格加密的,都是需要和服务器人员沟通一套非常保密的加密的方法的, 整个过程是比较复杂的,

    不过由于我这里只是做一个演示, 那么就不需要特别复杂了, 就简单一点,说明一个思路即可:

    这里,我就手动来拼接一个账号和密码, 密码加密就用最简单的base64编码;

    假设我们的账号是admin,密码也是123456, 那么我们怎样来设定密码呢?

    首先我们需要定义方法,来拼接密码,并转化为base64编码;

    //定义一个方法: 获取授权的字符串

    - (NSString *)getAuth:(NSString *)name pwd:(NSString *)pwd {

    //拼字符串 admin:123456

    NSString *tmpStr = [NSString stringWithFormat:@"%@:%@",name,pwd];

    //base64编码

    tmpStr = [self base64Encode:tmpStr];

    return [NSString stringWithFormat:@"Basic %@",tmpStr];

    }

    //base64编码

    - (NSString *)base64Encode:(NSString *)str {

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    return [data base64EncodedStringWithOptions:0];

    }

    然后我们在发送put请求的时候, 就同时提供授权

    //上传文件

    - (void)uploadTask {

    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/uploads/123.jpg"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    request.HTTPMethod = @"put";

    //设置账号和密码

    //Authorization: Basic YWRtaW46MTIzNDU2

    // admin:123456

    [request setValue:[self getAuth:@"admin" pwd:@"123456"] forHTTPHeaderField:@"Authorization"];

    //本地文件

    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"head2.png" withExtension:nil];

    [[[NSURLSession sharedSession] uploadTaskWithRequest:request fromFile:fileUrl completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    NSLog(@"--%@",str);

    }] resume];

    }

    执行结果:

    ca3e561e09ae

    执行结果:

    通过结果,我们可以看出, 已经上传成功了, 也就是说,我们顺利的解决了401问题,

    总结解决bug的思路:

    如果遇到401问题, 我们解决的思路,可以这样来考虑:

    优先考虑是否是需要验证,也就是是否需要授权账号和密码信息;

    如果是开放的服务器资源, 需要考虑的是是否有防御性的安全策略;

    一般情况下,都属于这两种原因,

    以上属于我整理的,如有不足之处,望大家斧正! 感谢!!

    展开全文
  • What I can't work out is how to return a JSON result for a 401 - Unauthenticated and 400 - Bad Request responses. Instead Spring is simply returning the response to the container (tomcat) which ...
  • 为什么我在Maven中收到“401 Unauthorized”错误?这是我在调用mvn deploy -e(底部的完整日志)时遇到的错误:mvn deploy -emvn deploy -e根据这个sonatype支持页面:“如果你收到的是401,那是因为maven发送了错误的...
  • 如果服务器返回401响应,则重定向到登录页面(Redirect to login page if server returns 401 response)如果是401响应,我如何拦截服务器端点响应并将aurelia应用程序重定向到登录页面?我尝试了aurelia-fetch-client...
  • 例如 const store if (error.response.status === 401) { // 在error对象中 可以看到状态 是否为401 if (refreshToken) { // 1. token 过期的情况 判断如果有refreshToken 去发ajax try { const res = await axios({...
  • vue 401问题和路由守卫

    2021-06-16 00:16:38
    401问题为例,说明路由守卫具体使用 5.1出现场景: 未登陆用户做一些需要权限才能做的操作(例如:关注作者),代码会报出401错误。这种情况下,应该让用户回到登陆页。 登录用户的token过期了 解决方式:通过...
  • 服务器发生错误就会返回错误信息,我们最熟悉的就是404错误页面,但是这里我想和大家分享下asp.net条件下怎样设置401自定义错误页面。谈到401错误,虽然没有404错误那么被大家所熟知,但是对服务器有所了解的人都...
  • Keil MDK5 STM32F401CCU6开发环境配置

    千次阅读 2021-08-12 06:26:43
    Windows下使用Keil MDK5进行stm32f401cc的开发和编译, 配合ST-LINK工具进行烧录, 使用原生非HAL的方式. 硬件 STM32F4系列基于Cortex M4内核, 于2011年发布, 上市已经十年了. 相对于基于Cortex M3的产品, STM32F4最大...
  • Web服务器状态错误401

    2021-08-12 02:27:24
    我有一个在远程服务器上...当它不起作用时,其远程Web服务器日志上的日志错误401未经授权 .2018-05-31 12:18:20 x.x.x.x GET /ServiceQA/api/v1/tracking/gettrackingidbyemail/xxxxxx@gmail.com/ - 80 - x.x.x...
  • 您需要有一个自定义身份验证入口点。public class CustomEntryPoint extends LoginUrlAuthenticationEntryPoint {private static final String XML_...private static final String X_REQUESTED_WITH = ...
  • scrapy 报错401

    2021-10-22 15:45:21
    新人学scrapy,最近在爬金华信义居的房屋信息新房 - 列表,楼盘详细信息都很顺利的爬取成功了,但抓楼盘单元就报401的错,抓破脑袋不知道咋搞! 百度了说是401 是需要验证用户信息,但具体应该怎么操作呢??? 贴...
  • xxx.jar‘. Received status code 401 from server: Unauthorized

    千次阅读 热门讨论 2021-01-07 19:17:32
    gradle下载依赖时报一堆的 Received status code 401 from server: Unauthorized问题,具体异常如下所示。 <ij_msg_gr>Project resolve errors<ij_msg_gr><ij_nav>D:\work\self\spring-framework...
  • 401问题-响应拦截器

    2021-12-05 09:12:23
    401错误的场景 有如下两种情况会出现401错误: 未登陆用户做一些需要权限才能做的操作(例如:关注作者),代码会报出401错误。这种情况下,应该让用户回到登陆页。 登录用户的token过期了 整体目标是:通过axios...
  • 由于phpMyAdmin漏洞比较多,所以我们除了要更改默认路径外还要设置401验证,提高安全性,不过还是不建议安装phpMyAdmin,毕竟漏洞确实多。安装apache htpasswd命令1yum-yinstallhttpd-tools首先通过...
  • Hi I am working on android and java.So my problem is that whenever 401 occurred I am not able to get response header and also not able to get status code. I am using ...
  • 401.html

    2021-06-12 14:40:15
    错误页面 STATUS:401 您无权访问该页面 you are not authorized to access this page. 请返回登陆页面登陆后再访问 一键复制 编辑 Web IDE 原始数据 按行查看 历史
  • jquery ajax是个很常用接口,而在请求时候,可能存在响应401的情况(身份认证过期或未登录),比较容易出现在混合应用上,如何进行身份认证,重发失败请求,还是值得注意的。ajax请求有两种方式1. 回调最常写的方式,...
  • openstack 401错误

    2021-05-31 09:51:09
    [root@controller ~]# openstack user create --domain... (HTTP 401) (Request-ID: req-038d8115-c3b2-4b35-8d4d-f4b274497117) 检查export变量,查看变量脚本是否写错,检查无误后再次创建 [root@controller ~]# op
  • 在请求时候,可能存在响应401的情况(身份认证过期或未登录)。比较容易出现在混合应用上,如何进行身份认证,重发失败请求,还是值得注意的。一.ajax请求有两种方式:回调方式:最常写的方式,成功失败处理以回调方式...
  • 状态码401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。测试接口时出现如上问题,在 Controller 打了断点但发送请求后并未跳转:Controller 如下:初步判断问题...
  • 我正在尝试使用get请求从...但是当我从python尝试时,我得到401错误是否可以在不发送凭证的情况下访问它Python Code:import requestsfrom requests_ntlm import HttpNtlmAuthheaders = {"Accept":"application/js...
  • java 401 Unauthorized

    2021-09-17 15:37:32
    访问自己的接口报401没有授权的 原因: 在依赖的module中引入了oauth2的依赖,导致访问接口需要权限。
  • k8s api 接口 401

    2021-03-04 20:23:53
    User \"system:anonymous\" cannot list resource \"pods\" in API group \"\" in the namespace \"default\"", "reason": "Forbidden", "details": { "kind": "pods" }, "code": 403 加token 访问401,被拒绝 curl ...
  • 微服务 websocket 401和跨域 权限在nacos配置文件里添加一下 security: oauth2: client: ignore-urls: - /ws/** 添加@CrossOrgin("*")注解即可解决跨域报401的问题 package ...
  • } @ExceptionHandler(ApplicationException.class) @RequestMapping(value="errorPage401", method=RequestMethod.GET) @ResponseStatus(value=HttpStatus.UNAUTHORIZED,reason="Unauthorized Request") public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 169,667
精华内容 67,866
关键字:

401

友情链接: matplotlib.zip