How to create Simple Web Server with Mbed and W5100 Ethernet Shield
I'm not familiar with that platform but two possibilities I can see are:


I don't think you need the extra CR/LF at the start of your response (but probably not the main issue).
You're not including Content-Length in the header so I think the client will be waiting for the socket to be closed at your end which is why is_fin_received() never returns true.


So I'd try including the Content-Length header which is the length of the of the main body. I'm fairly sure it needs to be the length including the CR/LF characters but you should get an HTTP error response if it's wrong and can adjust.