It sounds to me like the problem is with your code.
The AT+CIPSEND requires that you send the number of byte you are sending before you send the actual request. So if you were to send the message:
GET / HTTP/1.1\r\n\r\n
You would needed to do the AT command
AT+CIPSEND=18. Let's just pretend that for this message you sent
AT+CIPSEND=22 instead and the request above the ESP8266 will just wait for your to send the last 4 bytes, the link breaks, or the server closes. The only way you get a send ok is if you send all the bytes. The other two options are errors that will not result in you getting a SEND OK from the ESP8266.
Also have to remember the ESP8266 is manual input friendly so it will wait until the user finishes entering or it errors out so waiting longer is not a solution.
By this logic, resetting your mirco probably either sends another command or creates noise to finish the AT+CIPSEND which causes the SEND OK in return.