2011-05-10 45 views
1

我有一個應用程序,它有一個web和android組件,我希望識別他們每個人。爲此,我明確地將HTTP頭中的用戶代理設置爲特定於android的內容。但是Apache並沒有將用戶代理傳遞給我。如果我使用同一臺機器上的瀏覽器訪問同一個URL,那麼當我轉儲包含HTTP_USER_AGENT的$ _SERVER數組時,我會在php代碼中獲得完整的頭文件列表。但是我對android客戶端一無所知(除了SCRIPT_NAME和REQUEST_TIME)。 Apache是​​否過濾了一些東西?HTTP頭與Android和PHP與Apache

我看到,如果我不在Java代碼中設置標題,則不會傳遞任何消息。我使用tcpdump並將以下內容看作傳遞給服務器的User-Agent。

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

任何幫助,非常感謝。

編輯:這是我用來在我的Android應用程序中添加用戶代理標頭的代碼。

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爲您的網站請求?你如何添加標題?顯示一些代碼,說明如何將頭添加到請求中,並且我們可能會得到更清晰的想法。 – Rich 2011-05-10 16:18:16

+0

Apache本身不會過濾,但有一些安全模塊可以清理頭文件,mod_security。 – 2011-05-10 16:28:10

+0

@Rich - 我已將我用的代碼添加到原始問題中。除了一個愚蠢的拼寫錯誤,我很確定我將User-Agent添加到標題中,就像我在tcpdump中看到的那樣。 – user220201 2011-05-10 16:32:27

回答

1

我剛剛看了一下維基百科上的規範和維基百科提供一種含有對UA字符串需求的定義鏈接到實際RFC一點點,並有似乎要求產品和版本以斜線分隔。檢查這些了:

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

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

也許Apache是​​決定你的字符串是無效的用戶代理字符串,不考慮它。嘗試改變

Android app1.0 

Android-app/1.0 
+0

哇!這工作!我不知道有爲User-Agent指定的格式。我假定它是一個字符串。如果不是正確的格式,更令人費解的Apache會將其過濾掉。我非常感謝,因爲我甚至沒有懷疑過它。 – user220201 2011-05-10 18:07:03