2013-03-19 231 views
4

我知道有很多問題已經就此錯誤提出了許多問題。但是,即使在我的服務器端設置了標頭訪問控制 - 允許來源不允許訪問源URL

  "Access-Control-Allow-Origin" : "*" 

後,我仍然無法獲得此工作。

這裏是我的Spring MVC控制器的方法:

@RequestMapping(method=RequestMethod.GET, value="dummy/{num}") 
    @ResponseBody 
    public ResponseEntity<Result> dummy(@PathVariable String num) 
    { 
     int n = Integer.parseInt(num); 
     final Result result = new Result(); 
     result.setAddition(n+20); 
     result.setMultiplication(n*20); 
     result.setSubtraction(n-20); 
     HttpHeaders headers = new HttpHeaders(); 
     headers.add("Access-Control-Allow-Origin", "*"); 
     ResponseEntity<Result> ent = new ResponseEntity<Result>(result,headers,HttpStatus.CREATED); 
     return ent; 
    } 

這裏是jQuery的

$.ajax({ 
    url: "http://localhost:8010/Probe_Rest_Service/test/dummy/9", 
    type: "get", 
    crossDomain: true, 
    dataType: 'json', 
    headers: { 
    "Content-type" : "application/json" 
    }, 

    success: function(data){ 

     console.log("It worked!"); 
     alert(data); 
    }, 

    error: function(){ 
     // enable the inputs 
     alert("error"); 
    } 
}); 

我的AJAX調用我打過電話從開發的HTTP客戶端我的REST API的鉻和它的工作原理罰款(響應頭具有Access-Control-Allow-Origin:*設置)。但是,當我從我的HTML文件調用它時,我得到了錯誤。

我使用JBoss爲我的REST API和tomcat主辦我的客戶端網頁

+0

請注意,'crossDomain:true'不是必需的。 – 2013-03-19 21:07:55

+0

你是否正在使用chrome從網絡服務器進行html文件測試? – 2013-03-19 21:10:42

+0

@KevinB是的,這是正確的 – CuriousCoder 2013-03-19 21:15:48

回答

3

既然你要發送的內容類型application/json請求的客戶端被強制做CORS飛行前請求。

CORS specification說比application/x-www-form-urlencodedmultipart/form-data,或其他text/plain任何內容類型需要飛行前請求,以確定標頭是否被允許。

因此,您需要處理飛行前請求(HTTP方法= OPTIONS)。

爲簡單起見,讓服務器與頭回應:

Access-Control-Allow-Headers: * 

這將允許所有的請求頭。

UPDATE

我再次看了你的問題,並發現了一些我不明白你爲什麼要送Content-Type頭擺在首位的HTTP GET請求?這是不正確的。

只是刪除

headers: { 
    "Content-type" : "application/json" 
} 

,然後再試一次。這可能會解決它!

+0

非常感謝。這工作:) – CuriousCoder 2013-03-20 15:41:10

+0

對於POST請求,我仍然得到交叉來源錯誤,我試圖通過處理飛行前請求,如你所建議的那樣解決它。爲此,你的意思是我必須發送一個HTTP頭設置爲「Access-Control-Allow-Headers:*」的空響應。 – CuriousCoder 2013-03-20 15:58:57