在Rails 2.3.4,Accept
頭的處理方式已經改變了更改Accept頭在Rails的處理:如何支持向後兼容2.3.4
http://github.com/rails/rails/commit/1310231c15742bf7d99e2f143d88b383c32782d3
我們贏了't接受它
Rails處理傳入Accept頭的方式已更新。這主要是因爲網絡瀏覽器似乎並不總是知道他們想要什麼......更不用說能夠一致地表達它。所以,Accept標頭現在僅用於XHR請求或單個項目標頭 - 這意味着它們沒有請求所有內容。如果失敗了,我們回到使用params [:format]。
還值得注意的是,對於僅聲明XML模板的操作的請求將不再自動爲HTML請求(瀏覽器請求)呈現。這以前工作,不一定是按照設計,但因爲大多數瀏覽器發送全部接受頭(「/」)。因此,如果您想直接向瀏覽器提供XML,請務必提供:xml格式或明確指定XML模板(呈現「template.xml」)。
我有一個正在使用的許多客戶主動API誰都是派出了一個Content-Type
和Accept
頭,都設置爲application/xml
。這工作正常,但我在Rails 2.3.4下的測試表明,這不再有效 - 我得到了一個403未經授權的響應。刪除Accept
標題並僅發送Content-Type
作品,但這顯然不是一個可接受的解決方案,因爲它會要求我的所有客戶重新編寫其應用程序。
如果我繼續部署到Rails 2.3.4,所有使用該API的客戶端應用程序都將中斷。我如何修改我的Rails應用程序,以便繼續在Rails 2.3.4上爲現有API請求提供服務,而無需客戶端更改其代碼?
爲什麼你的客戶設置content-type:application/xml?他們是否發送XML數據以及他們的獲取/發佈請求?接受標題不是用來指定您將接受的格式,而是用於定義您發送的格式的內容類型? – coderjoe 2009-10-23 14:29:53
這個錯誤是否發生在你所有的路線/動詞上?如果你傳遞application/xml內容並且接受頭部到需要數據的動詞,你仍然會得到這個錯誤?我無法重現您的問題。更多信息,將不勝感激。 – coderjoe 2009-10-23 15:10:20
Content-type的使用最初被添加到API中,但您建議的並不是嚴格必要的 - 它是Accept頭,Rails使用它來確定要響應哪個Mime類型。我無法在我的開發環境中在本地重現這一點。它實際上可能是Apache的問題嗎? – Olly 2009-10-26 12:07:41