У меня есть мобильное веб-приложение Asp.Net MVC 3, и мне не удается получить запросы с ответом HTTP 302 в Mobile Safari при запуске приложения с использованием ярлыка на домашнем экране.
Я обнаружил, что причина в том, что разные пользовательские агенты отправляются на веб-сервер. Для справки ниже приведены три строки агента пользователя, которые я использую для тестирования:
Chrome
Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 535.1 (KHTML, как Gecko) Chrome / 13.0.782.107 Safari / 535.1
Мобильное Сафари :
Mozilla / 5.0 (iPad; U; CPU OS 4_3_1, как Mac OS X; ru-ru) AppleWebKit / 533.17.9 (KHTML, как Gecko) Версия / 5.0.2 Mobile / 8G4 Safari / 6533.18.5
Мобильное Safari при запуске из ярлыка :
Mozilla / 5.0 (iPad; U; CPU OS 4_3_1, как Mac OS X; ru-ru) AppleWebKit / 533.17.9 (KHTML, как Gecko) Mobile / 8G4
В веб-приложении есть два действия: Войти и Главное. Пользователь должен пройти аутентификацию, используя Логин (используется аутентификация с помощью форм), прежде чем получить доступ к Основному. После входа пользователь автоматически перенаправляется на Main (перенаправление выполняется с помощью js, аутентификация выполняется через XmlHttpRequest).
Есть несколько случаев, которые помогают понять, что именно происходит:
1. Перезапустите IIS Express
2. Откройте Fiddler
3. Войдите в веб-приложение, используя Chrome
4. В Fiddler drug & drop получите запрос в Main, чтобы запросить строителя
5. Измените строку агента пользователя на Mobile Safari и выполните
6. Проверьте ответ 200
7. Измените строку пользовательского агента на Ярлык мобильного Safari и выполните
8. Проверьте ответ 200
9. Измените пользовательский агент обратно на Chrome и выполните
10.Verfiy Response 200
Пока все хорошо, но если мы изменим порядок операций 5 и 7:
1. Перезапустите IIS Express
2. Откройте Fiddler
3. Войдите в веб-приложение, используя Chrome
4. В Fiddler drug & drop получите запрос в Main, чтобы запросить строителя
5. Измените строку пользовательского агента на Ярлык мобильного Safari и выполните
6. Проверьте ответ 302
7. Измените строку пользовательского агента на Mobile Safari и выполните
8. Проверьте ответ 302
9. Измените пользовательский агент обратно на Chrome и executre
10.Verfiy Response 200
Итак, похоже, что при отправке ярлыка Mobile Safari строка user-agent сначала все последующие попытки получить доступ к Main из Mobile Safari завершатся неудачей. Я знаю, что описанное поведение может показаться странным, но я попросил еще пару человек разобраться в этом и подтвердил, что это действительно так.
По-видимому, это может быть связано с аутентификацией форм. Я попытался установить непостоянные куки, как кто-то предложил, но безуспешно. Кроме того, как можно видеть в тестовых примерах, все запросы, используемые для воспроизведения файла cookie проверки подлинности при отправке с ошибкой, полученные Chrome, и единственным отличием во всех этих запросах была строка агента пользователя.
Какие у меня есть другие варианты, кроме отладки кода инфраструктуры Asp.Net MVC?
Любая помощь будет принята с благодарностью!