首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个更好地理解HTTP状态代码的实验

一个更好地理解HTTP状态代码的实验
EN

Stack Overflow用户
提问于 2012-09-13 15:22:17
回答 2查看 373关注 0票数 0

服务器设置和浏览器检查

代码语言:javascript
复制
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class customHTTPServer(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write('<HTML><body>Get!</body></HTML>')
        return

server = HTTPServer(('',8080),customHTTPServer)
print 'server started at port 8080'
server.serve_forever()

现在,当我使用浏览器进入http://localhost:8080时,我可以看到预期的Get!

意外观测

测试1

现在,我在服务器上使用不同的状态代码进行了测试。我尝试了以下状态代码:301302400402403404405406407408418500501502d19、505和511。

奇怪的是,当使用不同的状态代码时(除了407**),我得到了与使用状态代码** 200**.相同的行为)。为什么?**

测试2

其次,对于第一次测试中测试的所有不同状态代码,我用self.wfile.write('<HTML><body>Get!</body></HTML>')替换了self.wfile.write('')。当我使用状态代码403、404、500、501、502、504或505时,我现在在浏览器上得到了一条特定的浏览器消息(403 Forbidden,404 not found,.)。

(Q2)为什么我只使用这些状态代码接收特定的浏览器消息,而不使用其他的?

摘要

我可以区分三种行为:

  • 使用状态代码301、302、400、402、405、406、408、418或511与使用状态代码< code >D58没有区别,无论我发送的是空字符串还是非空字符串。
  • 使用状态代码403、404、500、501、502、504或505将在浏览器上创建特定的浏览器消息,但只在发送空字符串时。
  • 使用状态代码407将返回特定的浏览器消息(显示323错误),而不管我是发送空字符串还是非空字符串。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 15:31:42

(A1)当您发送错误代码但无论如何返回一个主体时,浏览器将假设它是由您的When服务器发送的自定义错误页。例如,堆栈溢出为未知文档请求提供了一个自定义页面,而不是默认的404浏览器页面。

(A2)检查没有显示浏览器消息的状态代码的含义,并问自己在返回浏览器消息时显示浏览器消息是否明智。而且,最有可能的是,在显示或不显示消息时,每个浏览器都会有所不同。

票数 2
EN

Stack Overflow用户

发布于 2012-09-13 15:39:03

以404未找到为例。站点通常会生成一个自定义404页面,其中包括一些站点导航手段。这可能比浏览器生成的错误消息更有帮助。因此,如果服务器返回带有404的内容,浏览器就会显示它。

它还允许提供有关特定错误的更多信息。例如,403禁止可能提供有关为什么对资源的访问受到限制或如何申请访问权限的信息。

如果您阅读等级库,那就不足为奇了;它定义了哪些状态代码可以包含主体,哪些不能包含(比如204个无内容:)。

注意,如果使用不同的UA (如wget ),您可能会注意到它处理404响应的方式不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12409642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档