我正在尝试使用javascript通过http。
调用WCF服务跨域我已将 Access-Control-Allow-Origin 标头添加到我想要调用的操作中:
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
然而,当我使用jquery.ajax发布时,我得到:
Origin http://server/ is not allowed by Access-Control-Allow-Origin.
更糟糕的是它甚至发生在我的本地机器上:
XMLHttpRequest cannot load http://localhost:8201/wcfservice. Origin http://localhost/ is not allowed by Access-Control-Allow-Origin. (observed in Chrome)
我在做一些根本错误的事情吗?
答案 0 :(得分:1)
您正在做的事情适用于GET请求(在支持CORS的浏览器中) - 请求被发送到服务,如果服务具有Access-Control-Allow-,浏览器将把它返回给应用程序Origin header)。
对于“不安全”请求(即可能导致服务中出现副作用的请求,例如POST,PUT和DELETE),浏览器首先发送预检请求,OPTIONS请求“询问”服务是否可以接受跨域请求。由于您的操作仅响应POST请求,因此它不会响应该请求,浏览器将阻止它。
我写了一篇关于在WCF中实现CORS支持的方法的帖子,你可以在http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx找到它。基本上,除了“正常”请求之外,您还需要处理OPTIONS请求。