服务器设置和浏览器检查
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
现在,我在服务器上使用不同的状态代码进行了测试。我尝试了以下状态代码:301、302、400、402、403、404、405、406、407、408、418、500、501、502、d19、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错误),而不管我是发送空字符串还是非空字符串。发布于 2012-09-13 15:31:42
(A1)当您发送错误代码但无论如何返回一个主体时,浏览器将假设它是由您的When服务器发送的自定义错误页。例如,堆栈溢出为未知文档请求提供了一个自定义页面,而不是默认的404浏览器页面。
(A2)检查没有显示浏览器消息的状态代码的含义,并问自己在返回浏览器消息时显示浏览器消息是否明智。而且,最有可能的是,在显示或不显示消息时,每个浏览器都会有所不同。
发布于 2012-09-13 15:39:03
以404未找到为例。站点通常会生成一个自定义404页面,其中包括一些站点导航手段。这可能比浏览器生成的错误消息更有帮助。因此,如果服务器返回带有404的内容,浏览器就会显示它。
它还允许提供有关特定错误的更多信息。例如,403禁止可能提供有关为什么对资源的访问受到限制或如何申请访问权限的信息。
如果您阅读等级库,那就不足为奇了;它定义了哪些状态代码可以包含主体,哪些不能包含(比如204个无内容:)。
注意,如果使用不同的UA (如wget ),您可能会注意到它处理404响应的方式不同。
https://stackoverflow.com/questions/12409642
复制相似问题