经过一段时间的搜索,我找不到答案了。 我的问题是,当我调用web服务函数setRequestHeader时,我收到错误“Access-Control-Allow-Origin不允许”。
这是我的javaScript代码:
var loginController = new sap.ltst.login.loginController({controllerName: "sap.ltst.login.loginController"});
var session = loginController.login("I051486", "123456789");
var config = {};
$.ajax({
beforeSend: function(req) {
req.setRequestHeader('Authentication', 'Authentication-Token ' + session.session_token);
},
url : "http://localhost:8081/com.sap.st.gtpapi/program/"
+ this.program + "/configs",
dataType : 'json',
type : 'GET',
async : false,
success : function(data) {
config = data;
}
});
return config;
在Web服务方面,我有一个可以启用或禁用身份验证的功能。我试图将auth设置为false(不检查auth)然后删除setRequestHeader,我没有错误,Web服务返回一些数据。
另一种方式我试图把它放回去,我得到了错误。
XMLHttpRequest cannot load http://localhost:8081/gtpapi/program/Business%20Intelligence%20platform%204.1%20(BI%20Aurora%204.1)/configs. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.
所以我认为这不是auth的问题,因为在Web服务方面,我禁用了auth验证。
让我们转到Web服务端,这是界面:
public static final String HEADER_AUTH_TOKEN = "Authentication-Token";
@GET
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/guid_{planId}/packages/{packId}/{results}")
public Response setPackageResult(@PathParam("planId") final String planGuid, @PathParam("packId") final String packGuid, @PathParam("results") final String results, @HeaderParam(WebServiceBase.HEADER_AUTH_TOKEN) String token);
这是Chrome上的标头响应和请求:
Request URL:http://localhost:8081/com.sap.st.gtpapi/program/SBOP%20EXPLORER%204.1/configs
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:UTF-8,*;q=0.5
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,fr;q=0.6
Access-Control-Request-Headers:accept, authentication, origin
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:8081
Origin:http://localhost:8080
Pragma:no-cache
Referer:http://localhost:8080/LTST_Frontend/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Response Headersview source
Allow:GET,OPTIONS,HEAD
Content-Length:0
Content-Type:text/xml
Date:Fri, 02 Aug 2013 15:44:10 GMT
Server:Apache-Coyote/1.1
我不确定这个问题是来自javaScript还是Web服务。有什么想法吗?
答案 0 :(得分:0)
将您要发送的任何标题放在安全列表中:
header("Access-Control-Allow-Headers: Authentication, X-Custom-Header, .. etc");
这应该是接收域上CORS
标题的一部分。