我使用Amazon Web Service的EC2虚拟机设置了服务器。
我的服务器应用程序是用C#编写的。
目前,我用JavaScript编写的游戏可以在向高分榜请求数据时将数据发送到服务器并接收JSON对象。这一切都很好。
我决定尝试从服务器托管我的游戏。但是出于某种原因,如果您请求index.html文件,客户端浏览器解释的是原始文本。正如您在此处看到的那样(http://i.imgur.com/uE9zOaA.png),它将index.html文件显示为文本,它只是将其放在客户端正文的“pre”标记下。
我原本以为这是一个安全问题,但我无法在我的EC2实例的安全性中找到任何不允许它的内容。此外,当我通过Visual Studio使用localhost:8080托管它时,我有同样的事情,这让我相信它在我的代码中。
另外,值得添加我通过我的注册表并确保所有.html内容都是“text / html”类型。
在C#中,在确定用户尝试请求的内容(我知道它可以工作,因为它确实获取了正确的html文件)之后,它调用了以下方法。
private static Response IndexRequest()
{
String file = "C:\\Game\\index.html";
FileInfo fi = new FileInfo(file);
FileStream fs = fi.OpenRead();
BinaryReader reader = new BinaryReader(fs);
Byte[] d = new Byte[fs.Length];
reader.Read(d, 0, d.Length);
fs.Close();
return new Response("Play", "text/html", d);
}
此方法实质上读取index.html文件并将其更改为用于发送的字节数组,然后返回状态为Play的对象,类型为“text / html”,其中包含该数组。
什么调用该方法接收具有该数据的对象Response。然后告诉该对象响应它的post方法,如下所示。
public void Post(NetworkStream stream) {
StreamWriter writer = new StreamWriter(stream);
writer.WriteLine(String.Format("{0} {1}\r\nServer: {2}\r\nContent-Type: {3}\r\nAccept-Ranges: bytes\r\nContent-Length: {4}\r\n",
HTTPServer.VERSION, status, HTTPServer.NAME, mime, data.Length));
stream.Write(data, 0, data.Length);
}
其中 HTTPServer.VERSION ==“HTTP / 1.1”, HTTPServer.NAME =“HarbourGuide HTTP Server V0.1” 和status / mime / data是作为第一种方法的参数返回的三件事(在本例中为“Play”,“text / html”,index.html的数据为bbyte数组。
正如我所说,这导致客户端以文本形式接收数据。将mime更改为“html”不起作用。
非常感谢任何帮助。谢谢。