2012-08-07 3 views
0

Google 권장 사항에 따라 API 레벨 15 프로젝트에 HttpsURLConnection을 사용하고 있습니다.HttpsURLConnection server_name이 (가) 3g 이상입니다.

내 테스트 케이스는 매우 간단하다 : 나는 무선 랜을 통해 내 서버에 연결할 때

URL url = new URL(STATS); 
HttpsURLConnection we = (HttpsURLConnection)url.openConnection(); 
InputStream in = new BufferedInputStream(we.getInputStream()); 

이 모든 것이 잘 작동합니다.

내가 3g 이상 내 서버에 연결

, 내 아파치 로그에 오류가 점점 오전 :

Hostname 202.139.83.152 provided via SNI and hostname myserver.com provided via HTTP are different 

이제 202.139.83.152 주소는 내 모바일 공급자 APN의 프록시 주소입니다.

핸드 셰이크 프로토콜/확장명 : server_name 필드에 wifi 요청에 대한 대상 호스트 이름 (myserver.com)이 있지만 3g 요청에 대한 APN 프록시 주소가 포함되어 있습니다.

은 이것이다 : 내가 코딩 한

  • 뭔가 잘못
  • 내 전화를 잘못 설정 한
  • 뭔가 (삼성 갤럭시 S3) 내 서버 악
  • 뭔가 잘못 설정 한
  • 뭔가 내 이동 통신사 보내기
  • Android 라이브러리의 버그

내 서버가이 가상 호스트에 전용 IP 주소를 사용하고 있습니다.

DefaultHttpClient의 간단한 하위 클래스를 사용하여 3g 이상을 성공적으로 만들 수 있지만 최소 API 레벨이 15이므로 '기본 설정'경로로 이동하기를 바랬습니다.

모든 제안은 매우 훌륭하게 접수 될 것입니다. 나는이 기본 작업을 작동 시키려고 너무 많은 시간을 보냈습니다.

이 프로젝트의 iPhone 개발을 담당하고있는 제 동료는 코드가 '상자 밖에서 작동하기'때문에 머리를 흔들었습니다.

+0

APN을 사용하기 위해 프록시가 실제로 필요한지 확인해야합니다. 휴대 전화의 APN 구성을 확인하십시오. – Robert

+0

로버트에게 감사드립니다. 와우. 나는 SIM을 처음으로 삽입했을 때 설정되어있는 '기본'APN을 사용하고 있었다 (나는 추정한다). 3g 이상의 다른 모든 인터넷 접속은 잘 작동했습니다. 프록시 설정이없는 대체 APN이 발견되었고 현재 코드가 작동합니다! 그러나 내 앱의 잠재적 인 사용자 측면에서 이것이 의미하는 바는 무엇입니까? 통신사가 프록시를 필요로한다면 (?), 그러면 무엇입니까? 내 코드에서 프록시를 우회하거나 보완 할 수있는 방법이 있습니까? – Horrendo

+0

유럽에서는 사전 구성된 프록시가있는 공급자는 거의 없습니다. 프록시를 사용하는 경우에도 프록시는 일반적으로 아무 것도 변경하지 않는 HTTPS 통과를 사용해야합니다. 그러므로 나는이 상황이 매우 드물게 발생한다고 가정한다. – Robert

답변

4

이것은 known issue입니다.

얼마나 강력한 지 확실하지 않지만 해결 방법을 찾았습니다. 지금까지 저에게 도움이되는 것은 연결을 할 때 프록시를 비활성화하는 것입니다 :

HttpsURLConnection http = (HttpsURLConnection) url.openConnection(Proxy.NO_PROXY); 

이 정보가 도움이되기를 바랍니다.

+0

동일한 문제가 있습니다. 당신, @Horrendo, 이것이 안정적인 해결 방법이라고 생각 했습니까? – likebobby

+0

@BobbyJ, 나는 현재의 이동 통신사에서만 테스트 할 수 있지만, 적어도 그것도 잘 동작한다. 이상적은 아니지만 Google이 문제를 해결하고 수정 사항이 '보편적으로'사용 가능할 때까지 기다릴 여유가 없습니다. – Horrendo

+0

감사합니다. 저는 스웨덴과 Wi-Fi 네트워크에있는 여러 이동 통신사와 다른 설정을 사용하고 있습니다. 연결에 문제가 없었습니다. – likebobby

0

다음은 아파치 (Apache2 - Apache/2.2.14에서 작년에 일하는)에 대한 내 서버 측 문제 해결 방법입니다.

"return HTTP_BAD_REQUEST;"를 제거하여 ssl_engine_kernel.c를 변경 한 후 Apache/mod_ssl.so를 다시 컴파일하십시오. 을 strcmp (호스트, 서버 이름)을 확인 :

if (strcmp(host, servername)) { 
     ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, 
       "Hostname %s provided via SNI and hostname %s provided" 
        " via HTTP are different", servername, host); 
     //return HTTP_BAD_REQUEST; // REMOVE THIS LINE 

당신은 여전히 ​​오류 로그 메시지가 아닌 오류 400 응답 코드를 얻을 것이다.

관련 문제