我正在创建一个非常简单的Web服务器,其唯一目的是返回一个mp3文件。
// create server
TcpListener server = new TcpListener(8585);
server.Start();
while (true)
{
// accept a new client
using (var client = server.AcceptTcpClient())
{
byte[] buffer = new byte[1024 * 2];
var i = client.Client.Receive(buffer);
// get request client sent us
var request = System.Text.Encoding.UTF8.GetString(buffer, 0, i).ToLower();
// if the browser is requesting an icon return
if (request.Contains("/favicon.ico"))
{
continue;
}
// with fiddler when I downloaded great.mp3 I saved the response as a binary file to make sure I am returning the right output
client.Client.Send(System.IO.File.ReadAllBytes("cheat.bin"));
}
}
cheat.bin can be downloaded from here
它基本上由
组成HTTP/1.1 200 OK
Server: Apache/2.2.3 (CentOS)
X-HOST: sipl-web-233.oddcast.com
X-TTSCache: HIT
X-TTSCacheInsert: NO
Content-Type: audio/mpeg
Access-Control-Allow-Origin: *
Vary: Accept-Encoding
Date: Thu, 01 May 2014 00:02:15 GMT
Content-Length: 5471
Connection: keep-alive
ID3���� .... rest of mp3 file!
所以我的问题是,为什么当我在网络浏览器上转到http://localhost:8585/getSong
时,歌曲会被下载两次?换句话说,如果我在我的代码中放置一个断点,它两次。此外,在我第二次返回歌曲之前,我将无法在浏览器中播放音频。
我主要是要问这个问题。我不明白出了什么问题。
答案 0 :(得分:2)
浏览器通常会在HTTP发出之前进行HTTP头呼叫吗?这可能是为什么?
https://ochronus.com/http-head-request-good-uses/
无论如何,我会使用类似Fiddler的内容来查看浏览器正在发出的HTTP请求。