2011-12-16 66 views
7

我在查詢使用自定義http頭進行身份驗證的REST web服務。

如果我執行沒有標題的POST我收到了預期的錯誤,但是當我添加標題時,我得到一個404錯誤而不是實際需要的東西。

這是我的代碼

$.ajax({ 
    type: 'POST', 
    url: 'http://server.com/service', 
    beforeSend: function (xhr) { xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE') }, 
    success: function(data) {  
    alert('success.'); 
    } 
}); 

這裏的螢火蟲標頭輸出:

選項 /服務HTTP/1.1 主持人:server.com 的User-Agent:Mozilla的/ 5.0( Windows NT 6.1; WOW64; rv:8.0.1)Gecko/20100101 Firefox/8.0.1 Accept:text/html,application/xhtml + xml,application/xml; q = 0.9,/; q = 0.8Accept-Language:zh-cn,en; q = 0.5 Accept-Encoding:gzip,deflate Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7 Connection:keep -alive 來源:空 訪問控制請求-方法:POST 訪問控制請求報頭:自定義標題鍵 雜注:無緩存 緩存控制:無緩存

以及用海報執行帖子時的smae頭文件,它會返回所需的結果。

POST /服務HTTP/1.1 主機:server.com 的User-Agent:Mozilla的/ 5.0(Windows NT的6.1; WOW64; RV:8.0.1)壁虎/ 20100101火狐/ 8.0.1 接受:text/html,application/xhtml + xml,application/xml; q = 0.9,/; q = 0.8 Accept-Language:zh-cn,en; q = 0.5 Accept-Encoding:gzip,deflate Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7 Connection:keep-alive CUSTOM-HEADER-KEY:CUSTOM-HEADER-VALUE 雜注:無緩存 緩存控制:無緩存 的Content-Length:0

的區別是很明顯的,但我不知道我在做什麼錯在jQuery代碼。

任何人都可以幫助我嗎?

+1

你發送此'跨服務器POST`請求​​能夠把它發送到服務器? – Blender 2011-12-16 18:15:14

+0

攪拌機在正確的軌道上。這很可能是沙盒違規。無論是訪問服務威盛jsonp或使用您的服務器作爲服務的代理。 – John 2011-12-16 18:19:44

回答

1

這可能會或可能不會幫助,但我認爲你可以在數據選項添加標題:

$.ajax({ 
    type: 'POST', 
    data: put the results of your header request here, 
    url: 'http://server.com/service', 
    beforeSend: function (xhr) { xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE') }, 
    success: function(data) {  
    alert('success.'); 
    } 
}); 
2

這是一個跨域請求。所以你不能從瀏覽器端解決它。您可能需要服務器端代理才能執行POST到不同的域。

1

跨域呼叫上的任何自定義標題都會觸發OPTIONS呼叫的預飛行請求。您需要繞過OPTIONS調用的安全檢查或單獨處理請求,因爲自定義頭文件不會與OPTIONS請求一起傳遞。此外,允許預先請求也不會造成任何傷害,因爲沒有實際數據通過該呼叫返回給瀏覽器。基本上,瀏覽器會詢問服務器在實際製作之前是否允許進行該調用。您可能還需要檢查您的Access-Control標題。所有這些更改都在服務器端,因此您需要完全控制Web服務。

5

在交叉域請求如果標頭不被服務的瀏覽器允許將簡單地將其刪除

在第一瀏覽器的瀏覽器將作出OPTION呼叫來檢查所允許的(產地,接頭,方法)

在您的服務配置,你必須允許以頭使用

Access-Control-Allow-Headers: YOUR_HEADER_NAME