Когда в мобильном телефоне вы можете использовать сеанс Javascript вместо
sessionStorage.setItem('session_variable',session_value);
Не используйте 304 с FileResult. От спецификации:
304 ответа не ДОЛЖНЫ содержать тело сообщения и таким образом всегда завершаются первой пустой строкой после полей заголовка.
Не ясно, что Вы пытаетесь сделать от своего вопроса. Сервер не знает то, что браузер имеет в его кэше. Браузер решает это. При попытке сказать браузеру не повторно выбирать изображение при необходимости снова, если это уже имеет копию, установите заголовок Управления Кэша ответом.
Если необходимо возвратиться 304, используйте EmptyResult вместо этого.
Этот блог ответил на мой вопрос; http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx
По сути, вам нужно прочитать заголовок запроса, сравнить даты последних изменений и вернуть 304, если они совпадают, иначе вернуть изображение (со статусом 200) и установить заголовки кэша соответствующим образом.
Фрагмент кода из блога:
public ActionResult Image(int id)
{
var image = _imageRepository.Get(id);
if (image == null)
throw new HttpException(404, "Image not found");
if (!String.IsNullOrEmpty(Request.Headers["If-Modified-Since"]))
{
CultureInfo provider = CultureInfo.InvariantCulture;
var lastMod = DateTime.ParseExact(Request.Headers["If-Modified-Since"], "r", provider).ToLocalTime();
if (lastMod == image.TimeStamp.AddMilliseconds(-image.TimeStamp.Millisecond))
{
Response.StatusCode = 304;
Response.StatusDescription = "Not Modified";
return Content(String.Empty);
}
}
var stream = new MemoryStream(image.GetImage());
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetLastModified(image.TimeStamp);
return File(stream, image.MimeType);
}