ajax 发布请求 - 跨域读取阻塞 (CORB) 阻止跨域响应 CORS
Posted
技术标签:
【中文标题】ajax 发布请求 - 跨域读取阻塞 (CORB) 阻止跨域响应 CORS【英文标题】:ajax post request - cross-Origin Read Blocking (CORB) blocked cross-origin response CORS 【发布时间】:2019-01-22 11:48:26 【问题描述】:我有一个 jquery 前端项目,它使用 ajax 向我的 ASMX Webservice (c#) 发送 POST 请求。一切正常,而不是一个特殊的要求。
该应用程序类似于购物应用程序。如果我的购物车中的商品少于 5 件,则将订单发送到数据库的 Post-request 效果很好。如果我有 5 件或更多物品,我会收到 CORS 错误。
我的后端(在 IIS 上)具有以下配置:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST" />
<add name="Access-Control-Allow-Headers" value="Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With" />
</customHeaders>
</httpProtocol>
这是一个简单的 CORS 请求(仅允许 POST)以避免 OPTIONS 飞行前请求。 OPTIONS 请求也给了我一个 404 的 CORS- 错误。 没有 OPTIONS 并且只有 POST 我得到这个错误:
POST https://sperrmuellportalapi.ks-weimar.de/webservice_ex.asmx/SP_WRITE_Sperrmuellanmeldung
403(禁止) 发送@jquery-3.1.1.min.js:4 ajax @ jquery-3.1.1.min.js:4 SPWriteSperrmuellanmeldung @ index.js:3469 (匿名)@ index.js:3380 调度@ jquery-3.1.1.min.js:3 q.handle@jquery-3.1.1.min.js:3
/#zsfg_sp_anmelden:1 Failed to load https://sperrmuellportalapi.ks-weimar.de/webservice_ex.asmx/SP_WRITE_Sperrmuellanmeldung:
请求中没有“Access-Control-Allow-Origin”标头 资源。因此,原点 'https://sperrmuellportal.ks-weimar.de' 是 不允许访问。响应的 HTTP 状态代码为 403。
jquery-3.1.1.min.js:4 Cross-Origin Read Blocking (CORB) blocked cross-origin response
https://sperrmuellportalapi.ks-weimar.de/webservice_ex.asmx/SP_WRITE_Sperrmuellanmeldung MIME 类型为 text/html。看 https://www.chromestatus.com/feature/5629709824032768 了解更多 详情。
ajax 请求是这样开始的:
$.ajax(
type: "POST",
dataType: "xml",
url: UrlToWebservice + "SP_WRITE_Sperrmuellanmeldung",
data: ..some params.., ...
它是一个 ASMX Webservice,所以我使用 XML 作为交换格式。
这个问题和这个问题有关:ajax POST - The response had HTTP status code 403, headers are missing, always OPTIONS
我太无能了,我这几天一直在寻找解决方案。请帮忙。 :(
【问题讨论】:
所以将选项添加到列表<add name="Access-Control-Allow-Methods" value="POST, OPTIONS" />
我添加了这个,但不幸的是没有任何改变。
【参考方案1】:
默认浏览器会阻止跨源请求。 如果您需要在没有使用 CORS 的 Api 的情况下测试客户端项目,请使用 firefox developers edition ,但在您的情况下请查看 this 教程。 希望这可以帮助!
【讨论】:
【参考方案2】:我遇到了同样的问题,但是使用了外部 API,所以我编写了一个包装器来从 C# 控制器调用 Service 方法。
我使用 ajax 在我的控制器中调用动作,而控制器又使用控制器中的 WebClient 调用外部 api..
【讨论】:
感谢您的评论。不幸的是,把它包起来对我不起作用。我无法将参数发送到我的网络服务。 你不是在使用 MVC 或 WebForm 的 UI 吗? 不,我有一个 jquery cordova 前端应用程序和一个简单的 asmx webservice 作为后端以上是关于ajax 发布请求 - 跨域读取阻塞 (CORB) 阻止跨域响应 CORS的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 跨域读取阻塞 (CORB) - Angular App
如何解决此错误跨域读取阻塞 (CORB) 阻止了在邮递员上工作的跨域响应