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
,{{ 1}},406
,407
,408
,418
,500
,501
,502
,{{1} }和504
。
(Q1)奇怪的是,当使用不同的状态代码(505
除外)时,我得到的状态与使用状态代码511
的行为相同。为什么?
测试2
其次我替换了407
使用200
获取我在第一次测试中测试的所有不同状态代码。当我使用状态代码self.wfile.write('<HTML><body>Get!</body></HTML>')
,self.wfile.write('')
,403
,404
,500
,501
或502
时,我现在得到了浏览器上的特定浏览器消息(504
,505
,...)。
(Q2)为什么我只使用这些状态代码接收特定浏览器消息,但不使用其他状态代码?
摘要
我可以区分3种行为:
403 Forbidden
,404 not found
,301
,302
,400
,402
,405
,{{ 1}}或406
有
与使用状态代码408
无关,无论我是发送空字符串还是非空字符串。 418
,511
,200
,403
,404
,500
或501
将创建浏览器上的特定浏览器消息,但仅当空字符串为时
发送。502
会返回特定的浏览器消息(显示504
错误),无论我是发送空字符串还是非空字符串。答案 0 :(得分:2)
(A1)当您发送错误代码但仍然返回正文时,浏览器会认为它是您的网络服务器发送的自定义错误页面。这就是例如stackoverflow为未知文档的请求提供custom page的方式,而不是404的默认浏览器页面。
(A2)检查没有显示浏览器消息的状态代码的含义,并询问自己返回时是否显示浏览器消息是否合理。此外,最有可能的是,在显示或不显示消息时,浏览器与浏览器之间会有所不同。
答案 1 :(得分:1)
以404 Not Found为例。网站通常会生成一个自定义404页面,其中包含一些网站导航方式。这比浏览器生成的错误消息更有用。因此,如果服务器返回404内容,则浏览器会显示它。
它还允许有关特定错误的更多信息。例如。 403 Forbidden可能会提供有关限制访问资源的原因或如何申请访问权限的信息。
如果你阅读spec,这并不奇怪。它定义哪些状态代码可以包含实体,哪些不能包含(如204 No Content :)。
请注意,如果您使用其他UA(例如wget),您可能会注意到它以不同方式处理404响应。