2011-05-10 4 views
1

나는 웹과 안드로이드 구성 요소를 가지고있는 앱을 가지고 있는데 그것들 각각을 식별하고 싶다. 이를 위해 명시 적으로 HTTP 헤더의 User-Agent를 안드로이드에 특정한 것으로 설정하고 있습니다. 하지만 아파치는 User-Agent를 나에게 넘겨주지 않는다. 동일한 컴퓨터에서 브라우저로 동일한 URL을 방문하면 HTTP_USER_AGENT를 포함하여 $ _SERVER 배열을 덤프 할 때 PHP 코드의 전체 헤더 목록을 가져옵니다. 하지만 안드로이드 클라이언트 (SCRIPT_NAME 및 REQUEST_TIME 제외)와 아무 것도 얻지 못합니다. 아파치 필터가 작동하지 않습니까?안드로이드와 HTTP 헤더와 아파치를 가진 PHP

Java 코드에서 헤더를 설정하지 않으면 아무 것도 전달되지 않습니다. 나는 tcpdump를 사용하여 User-Agent가 서버에 전달 될 때 다음을 참조한다.

User-Agent: Android app1.0\r\n 

모든 도움을 주시면 감사하겠습니다.

EDIT : 다음은 Android 앱에 User-Agent 헤더를 추가하는 데 사용하는 코드입니다.

HttpPost postObj = null; 

httpHost = new HttpHost(MyBaseURL); 

postObj = new HttpPost(urlpath); 

postObj.setHeader("User-Agent", "Android app1.0"); 

HttpResponse response = httpClient.execute(httpHost, postObj); 

감사합니다,

P

+0

당신이 HttpClient를하고 HttpPost/HttpGet 웹 요청을 사용하고 있습니까에

Android app1.0 

을 변경해보십시오? 헤더를 어떻게 추가하고 있습니까? 요청에 헤더를 추가하는 방법에 대한 약간의 코드를 표시하면 더 명확한 아이디어를 얻을 수 있습니다. – Rich

+0

아파치 자체로 필터링하지는 않지만, 헤더를 정리할 수있는 보안 모듈, mod_security가 하나 있습니다. –

+0

@ 리치 - 원래 질문에 사용하는 코드를 추가했습니다. 바보 같은 철자법을 사용하지 않음 나는 tcpdump에서 볼 때 헤더에 User-Agent를 추가하고 있다고 확신한다. – user220201

답변

1

난 그냥 위키 백과의 사양 및 UA 문자열에 대한 요구 사항의 정의를 포함하는 실제 RFC에 위키 피 디아에서 제공하는 링크에 대해 조금 읽고, 거기에 제품과 버전을 슬래시로 구분해야한다는 요구 사항 인 것 같습니다. 이 체크 아웃 :

http://tools.ietf.org/html/rfc1945#section-3.7

http://en.wikipedia.org/wiki/User_agent#Format

은 아마 아파치가 당신의 문자열이 유효하지 않은 사용자 에이전트 문자열 것을 결정하고이를 고려하지 않습니다.

Android-app/1.0 
+0

와우! 그게 효과가 있었어! User-Agent에 지정된 형식이 있다는 것을 알지 못했습니다. 나는 그것의 문자열을 추측했다. Apache가 올바른 형식이 아닌 경우 더 많은 수수께끼의 Apache가 필터링됩니다. 고마워. 내가 생각조차하지 못했을 때 나는 결코 그것을 이해하지 못했을 것이다. – user220201