2011-08-17 3 views
2

Asp.Net MVC 3 모바일 웹 앱을 보유하고 있으며 앱을 시작할 때 모바일 사파리에서 HTTP 302 응답이 실패합니다. 홈 화면에서 잘라 내기.Asp.Net MVC 3 앱이 홈 화면 바로 가기에서 실행될 때 모바일 사파리에서 실패합니다.

나는 웹 서버로 전송 된 다른 사용자 에이전트 문자열에 근본 원인을 박았습니다. AppleWebKit/535.1 (게코 같은 KHTML) 크롬/13.0.782.107 사파리,
모질라/5.0 (WOW64 윈도우 NT 6.1) :

크롬을 : 참고로, 아래의 세 가지 사용자 에이전트 문자열은 내가 테스트에 사용할 수 있습니다 /535.1

모바일 사파리 :
모질라/5.0 (아이 패드, U, CPU의 OS 맥 OS X와 ​​같은 4_3_1; EN-US) AppleWebKit/533.17.9 (게코 같은 KHTML) 버전/5.0.2 모바일/8G4 Safari/6533.18.5

모바일 사파리 바로 가기에서 시작 :
Mozilla/5.0 (iPad; 유; Mac OS X과 같은 CPU OS 4_3_1; en-us) AppleWebKit/533.17.9 (Gecko와 같은 KHTML) 모바일/8G4

로그인과 메인의 두 가지 작업이 있습니다. 사용자는 메인에 액세스하기 전에 로그인 (폼 인증 사용)을 사용하여 인증해야합니다. 로그인 한 후 자동으로 Main으로 리디렉션됩니다 (리디렉션은 js를 사용하여 수행되고 인증은 XmlHttpRequest를 통해 수행됩니다).

정확히 무슨 일이 일어나고 있는지 파악하는 데 도움이 몇 가지 경우가 있습니다
1. IIS를 다시 시작 익스프레스
2. 피들러
3. 로그인 웹 응용 프로그램에 들러 약 & 드롭 GET 요청에서 크롬
4. 사용은 홈페이지에 빌더
5. 변경 사용자 에이전트 문자열 모바일 사파리에 요청하고
6. 응답 확인 실행하기 (200)
7. 변경 사용자 에이전트 문자열 모바일 사파리 S에을 hortcut 및 실행
8. 확인 응답 (200)
9. 다시 변경 사용자 에이전트 크롬
10.Verfiy 응답 (200)을 실행

지금까지 너무 좋아하지만, 우리는 연산 5의 순서를 변경하는 경우 그리고 7 :
1. 다시 시작 IIS Express는
2. 피들러는
3. 홈페이지에 들러 약 & 드롭 GET 요청에서 크롬
(4)를 사용하여 웹 응용 프로그램에 로그인 빌더을 요청합니다 314,960,453,210 5. 변경 사용자 에이전트 문자열 모바일 사파리 단축
6. 응답을 확인한다 (302)
제 변경 응답 확인 (302)
제 변경 사용자 에이전트 문자열 모바일 사파리
및 실행
제 수행 사용자 에이전트를 다시 크롬 및 executre
10.Verfiy Response 200

모바일 사파리 단축키 사용자 에이전트 문자열을 먼저 보내면 모바일 사파리에서 메인에 액세스하려는 모든 후속 시도가 실패합니다. 설명 된 행동이 미친 듯이 들릴 수도 있지만, 더 많은 사람들에게이 사실을 조사하고 실제로 그것이 사실임을 확인했습니다.

분명히 폼 인증과 관련이있을 수 있습니다. 나는 행운을 빌어 제안한 누군가가 아닌 영구 쿠키를 설정하려고했습니다. 게다가 테스트 케이스에서 볼 수 있듯이 버그를 재생하는 데 사용 된 모든 요청은 Chrome에서 획득 한 인증 쿠키를 전송하며 모든 요청에서 유일한 차이점은 사용자 에이전트 문자열입니다.

Asp.Net MVC 프레임 워크 코드를 디버깅하는 것 외에 어떤 다른 선택이 있습니까?

도움이 될 것입니다.

답변

1

동일한 문제가 발생하여 51Degrees.mobi nuget 패키지를 설치하면 문제가 해결 된 것으로 나타났습니다. 너겟을 설치 한 후에 추가 단계는 51Degrees.mobi가 WURFL 데이터베이스 파일을 찾는 방법을 구성하는 것입니다. 자신의 website의 예는 잘 작동하지만 난 로깅을 벗겨과 능력을 리디렉션 너무처럼 내 Web.config의에 wurlf 섹션을 추가 : 저는 팬이 아니에요 이후

<configSections> 
    <sectionGroup name="fiftyOne"> 
    <section name="wurfl" 
       type="FiftyOne.Foundation.Mobile.Detection.Wurfl.Configuration.WurflSection, FiftyOne.Foundation" 
       requirePermission="false" 
       allowDefinition="Everywhere" 
       restartOnExternalChanges="false" 
       allowExeDefinition="MachineToApplication"/> 
    </sectionGroup> 
</configSections> 

<fiftyOne> 
    <wurfl wurflFilePath="~/App_Data/wurfl.xml.gz" useActualDeviceRoot="false"> 
    <wurflPatches> 
     <add name="browser_definitions" filePath="~/App_Data/web_browsers_patch.xml" enabled="true"/> 
    </wurflPatches> 
    <capabilitiesWhiteList> 
     <add capabilityName="pointing_method"/> 
    </capabilitiesWhiteList> 
    </wurfl> 
</fiftyOne> 

이 그냥 내 방식이었다 내 브라우저 파일에 의존하는 것. 두 가지 수정 작업이 모두 올바른 방향으로 나를 이끌 기위한 원래의 포스터 덕분입니다.

관련 문제