2015-09-26 157 views
7

我想發送的數據採用了棱角分明HTTP POST到Servlet中,角HTTP POST請求 - 無「訪問控制允許來源」標頭出現在所請求的資源

var httpPostData = function (postparameters,postData){ 

    var headers = { 
       'Access-Control-Allow-Origin' : '*', 
       'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS', 
       'Accept': 'application/json' 
      }; 
    return $http ({ 

    method : 'POST', 
    url  : 'http://localhost:8080/json/jasoncontroller', 
    params : postparameters, 
    headers: headers, 
    data : postData 
    }).success (function (responseData){ 
     return responseData.data; 
    }) 
} 

,但我繼續獲得錯誤否請求的資源上存在'Access-Control-Allow-Origin'標頭。因此不允許原產地'null'訪問。

我確實對我的servlet

response.addHeader("Access-Control-Allow-Origin", "*"); 
    response.addHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); 
    response.addHeader("Access-Control-Max-Age", "3600"); 
    response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 

設置下列頭如果我刪除從HTTP數據發佈它工作正常,但沒有運氣的數據。

enter image description here

+0

檢查OPTIONS請求的狀態和響應頭。那些訪問控制標題必須在預檢請求 – charlietfl

+1

我有同樣的問題,我解決了使用'response.setHeader(「Access-Control-Allow-Origin」,「*」);'而不是'response.addHeader( 「Access-Control-Allow-Origin」,「*」);'。如果您使用'addHeader'方法,則根據API允許將相同標頭的許多值賦值。請參閱[javadoc](http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletResponse.html#addHeader-java.lang.String-java.lang.String-)。 –

+0

@charlietfl添加了網絡響應頭的圖像。 – Nomad

回答

0

實際上發生的事情是在一些框架處理兩個調用,

  • 選項,檢查有哪些方法可用,
  • 然後是實際調用。

OPTIONS需要的只是空的答案200 OK

if(request.methord == 'OPTIONS'){ 
    res.send(200); 
    } else { 
    next(); 
    } 

您也可以安裝此chrome extension啓用CORS,這是很容易的出路!

相關問題