ajax – HTTP状态代码0是否有任何意义?
看起来当您从浏览器中的脚本中创建XMLHttpRequest时,如果浏览器设置为脱机工作或网络电缆被拔出,则请求将完成并显示错误,并且状态= 0。 HTTP状态代码。
状态码为0是什么意思?它是否意味着在所有浏览器和所有HTTP客户端实用程序相同的事情?它是HTTP规范的一部分还是其它协议规范的一部分?这似乎意味着HTTP请求根本不能做,也许是因为服务器地址无法解决。 什么错误消息适合显示用户? “你没有连接到互联网,或者网站遇到问题,或者地址中可能有输入错误”? 我应该补充一点,我看到FireFox当设置为“脱机工作”,但不是在Microsoft Internet Explorer中设置为“脱机工作”时的行为。在IE中,用户获得一个对话框,提供上线选项。 FireFox不会在返回错误之前通知用户。 我要求这是响应“显示更好的错误消息”的请求。什么Internet Explorer是好的。它告诉用户导致问题的原因,并给他们选择修复它。为了给一个等效的UX与FireFox我需要推断问题的原因并通知用户。那么,我可以从状态0推断出什么?它有一个普遍的意义,还是告诉我什么?
短回答
它不是一个HTTP响应代码,但它被记录为W3作为XMLHttpRequest的status属性(因此也是一个jqXHR对象,对于jQuery用户)的有效值。 它涵盖了一系列可能的情况,其中没有可用于报告的真正的HTTP响应代码,因为您没有发送请求,您明确中止了它,页面正在卸载,或者x出现了许多可能的值之一的x。 长答案 首先重申一下:0不是HTTP状态码。在RFC 7231 Section 6.1中有一个完整的列表,不包括0,第6节的介绍清楚地说明了
其中0不是。 但是,记录了作为XMLHttpRequest对象的status属性的值的0。从http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute的文档:
我们可以深入了解规范,找出那些条件返回0意味着什么。从http://www.w3.org/TR/XMLHttpRequest/#states:
还需要注意的是,UNSENT和OPENED之后的下一个可能状态是HEADERS_RECEIVED:
将这些都放在一起,简短的回答是,0是简单的XMLHttpRequest对象的status属性返回的,当没有真正的状态代码返回时,因为: >请求尚未发送,或 好吧,但什么错误可以导致这个神秘的“错误标志”设置?如果你在W3文档中使用CTRL-F作为’错误标志’,你会发现它在发送请求时被取消设置,并且它只被设置为“终止请求”的算法的一部分。寻找算法被调用的所有地方,你会发现它发生在: >使用open()方法打开(或重新打开)请求 >发生网络错误,如果发生,可能会发生 >有一个无限重定向循环
>请求是CORS请求,并且无法共享响应 >发生中止错误,只有在发生时才会发生
无论这意味着什么。我不知道有什么浏览器显示用户当AJAX请求发生,并给他们明确取消他们的机会,所以我认为这是 – 至少今天是不相关的。
只要XMLHttpRequest去,那就是一切。 除了XMLHttpRequest,我会推测,JavaScript之外的语言的HTTP库可能使用类似的0状态码作为默认值,当没有从服务器接收到状态码。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |