我是网络服务器的新手。我有一个简单的Web服务器,它向客户端显示index.html。我使用Chrome对其进行了测试,并将其显示为实际网页。但是,Firefox将index.html显示为带有标记的html文件。这是服务器的python代码:
DataToSend=""
while True:
data = f.read(4096)
DataToSend=DataToSend+data
if not data:
break
self.request.sendall(DataToSend)
f.close()
这是index.html:
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
<meta http-equiv="Content-Type"
content="text/html;charset=utf-8"/>
<!-- check conformance at http://validator.w3.org/check -->
<link rel="stylesheet" type="text/css" href="base.css">
</head>
<body>
<div class="eg">
<h1>An Example Page</h1>
<ul>
<li>It works?
<li><a href="deep/index.html">A deeper page</a></li>
</ul>
</div>
</body>
</html>
答案 0 :(得分:0)
响应类型应设置为text/html
答案 1 :(得分:0)
您没有告诉我们您使用的框架。但我可以猜出这个问题。
HTTP响应必须包含响应行,然后是HTTP标题,然后是空白行,然后是正文。有些框架只是为您提供了一个类似文件的对象,您可以根据需要编写任何内容,在这种情况下,您必须编写所有这些位。其他人为您提供一个API来设置响应代码,另一个用于添加标题,另一个用于设置正文。但无论你使用什么,显然,你在任何地方发送的唯一东西就是身体。
因此,这可能意味着您发送了无效的HTTP响应。如果这只是原始套接字代码,那么显然正是发生了什么。并且有一些框架也是如此。
浏览器通常会尝试容忍严重损坏的服务器,但它们都以不同的方式进行,所以一个人猜对了,另一个会失败就不足为奇了。
或者,这可能意味着您的框架正确地在您的正文之前发送响应代码和一些空标题,但这些空标题不足以告诉浏览器它应该处理哪种类型的内容,并且正在猜测而另一个则没有。 (特别是,您应该发送Content-Type: text/html
标题。)
通过使用命令行工具(例如,echo GET / | nc server.host.name 80
或curl -D- http://server.host.name/
或其他任何方式)与服务器通信,您可以非常轻松地查看您发送的内容。这会告诉你究竟发错了什么。
但是要弄清楚如何修复它,你需要阅读教程,了解你正在使用的任何框架。