2014-12-06 48 views
0

我建立与JAX-RS web服务,我已经启用了两个服务器端和AJAX请求CORS后,我仍然得到一个错误说:AJAX请求阻塞甚至使CORS

跨来源请求阻止:同源策略不允许在http://www.bookstore.com/orderservice/order处读取远程资源。这可以通过将资源移动到相同的域或启用CORS来解决。有什么想法吗?谢谢。

服务器端代码:

<jaxrs:ser <bean id="cors-filter" class="org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter"/>ver name="OrderService" address="http://www.bookstore.com"> 
      <jaxrs:serviceBeans> 
       <ref bean="orderServiceRest" /> 
      </jaxrs:serviceBeans> 
      <jaxrs:providers> 
       <ref bean="jacksonProvider" /> 
       <ref bean="cors-filter" /> 
      </jaxrs:providers> 

      <jaxrs:schemaLocations> 
        < <jaxrs:schemaLocation>com.bookengine.ws.service.representation.OrderRequest</jaxrs:schemaLocation> 
       <jaxrs:schemaLocation>com.bookengine.ws.service.representation.OrderRepresentation</jaxrs:schemaLocation> 
      </jaxrs:schemaLocations> 

    </jaxrs:server> 
    <bean id="orderServiceRest" class="com.bookengine.ws.service.OrderResource" /> 

    AJAX Request 
    $.ajax({ 
      headers: { 
       'Accept': 'application/json', 
       'Content-Type': 'application/json', 
       'Access-Control-  Allow-Origin': "http://www.bookstore.com/orderservice" 
      }, 
      type: 'POST', 
      crossDomain: true, 
      contentType: 'application/json', 
      dataType: 'json', 
      data: '{"orderId":null,"bookId":"X1","status":null,"customer":{"name":"John Smith","address":"312 N State Street, Chicago IL 60611","phone":"312-345-9876","custId":"1234"},"paymentinfo":null}', 
      url: 'http://bookstore/orderservice/order',                
      error: function(xhr, status, error) { 

      // Display a generic error for now. 
        alert("AJAX Error!"); 
       }, 
      success: function (data) { 
       var output = "<ul>"; 
       output += "<li>" + "Order ID: " + data.orderID 
         + "<br>Book ID: " + data.bookID 
         + "<br>Status: " + data.status 
         + "</li>"; 
       output += "</ul>"; 
       alert("Hello from sucess"); 
      document.getElementById("buydata").innerHTML = output; 
      } 
    }); 

回答

1

这是在浏览器中,以防止从一个域到另一个Ajax调用的安全保护。只有通过向服务器返回的标头添加Access-Control-Allow-Origin: 或将您的Web服务转移到同一个域,您才可以防止发生这种情况:http://www.bookstore.com/orderservice/order

0

您无法通过向发送请求添加标头来修复此问题。

从服务器启用CORS,在该服务器中,网站本身决定允许哪些来源访问它,并且必须由网站本身添加CORS头,该网站本身告诉浏览器应允许来自浏览器的来源。

所以,你必须控制http://www.bookstore.com域,它的服务器为了启用CORS。

另一种可能的交叉来源是JSONP,但是网站本身又必须明确支持JSONP请求(因为它们的结构与常规请求不同)。

相关问题