javascript - ajax POST - 响应的 HTTP 状态代码为 403,标头丢失,始终为 OPTIONS
问题描述
我对 ajax 帖子有一个非常奇怪的问题。我的应用程序中有许多 POST 请求,它们通常可以工作。在服务器端,我允许跨域请求,如我的 C# ASMX webservice 的 Web.config 中所示:
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Headers" value="X-Requested-With, origin, content-type, accept" />
</customHeaders>
我的应用程序类似于商店,您可以将商品放入购物车。当购物车中的商品少于 5 件时,发布请求(将订单写入数据库)运行良好。当购物车中有 5 个或更多商品时请求失败,并出现以下错误:
> jquery-3.1.1.min.js:4 POST https://url/SP_WRITE_Sperrmuellanmeldung 403 (Forbidden)
send @ jquery-3.1.1.min.js:4
ajax @ jquery-3.1.1.min.js:4
SPWriteSperrmuellanmeldung @ index.js:3470
(anonymous) @ index.js:3380
dispatch @ jquery-3.1.1.min.js:3
q.handle @ jquery-3.1.1.min.js:3
>
>
> /#zsfg_sp_anmelden:1 Failed to load
> https://url/SP_WRITE_Sperrmuellanmeldung:
> No 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'https://sperrmuellportal.ks-weimar.de' is therefore
> not allowed access. The response had HTTP status code 403.
>
这个警告:
> jquery-3.1.1.min.js:4 Cross-Origin Read Blocking (CORB) blocked
> cross-origin response
> https://url/SP_WRITE_Sperrmuellanmeldung
> with MIME type text/html. See
> https://www.chromestatus.com/feature/5629709824032768 for more
> details.
(url
只是真实域的占位符)似乎标题突然丢失了,就像您在以下屏幕截图中看到的那样:
少于 5 个项目的相同请求具有所有必要的标头:
我意识到请求方法始终是选项。
我使用 xml 作为交换格式。请求本身如下所示:
$.ajax({
type: "POST",
url: UrlToWebservice + "SP_WRITE_Sperrmuellanmeldung",
dataType: 'xml',
data: {
argef: argef.join(";"),
gef_menge: gef_menge.join(";"),
vornameStr: vornameStr,
nachnameStr: nachnameStr,
strasseStr: strasseStr,
hausnrStr: hausnrStr,
hnrzusatzStr: hnrzusatzStr,
dateStr: dateStr,
plzStr: plzStr,
ortStr: ortStr,
telStr: telStr,
mailStr: mailStr,
bemerkungStr: bemerkungStr,
arplz: arplz,
arstrasse: arstrasse,
annahme_art: annahme_art,
benachrichtigung: benachrichtigung,
arnutzererstellt: arnutzererstellt,
arems_typ: sp_arems_typ,
arnutzerweiterg: arnutzerweiterg,
arfraktion: localStorage.getItem("arfraktion")
},
//something more
这太奇怪了。有人知道如何解决吗?它让我疯狂。我直接在后端尝试了相同的请求而没有错误,因此后端能够解决这样的请求。
解决方案
推荐阅读
- c# - ORA-01017: 无效的用户名/密码;登录被拒绝匿名和 Windows 身份验证 IIS
- css - 如何在 MUI 中设置 ListItem 的选定和悬停颜色?
- spring-boot - Kafka和负载均衡器(Ribbon)的区别
- python - 如何从具有分支的模型(Python,keras)创建新的神经网络模型
- sql-server - 带有参数的 SQL SqlDataAdapter 返回“未设置引用”
- active-directory - WiX CustomAction 注册自定义 ADFS 身份验证提供程序
- ios - SwiftUI 中的自定义视图在另一个视图中重用它,但需要让该视图更改自定义视图的属性,例如按钮文本颜色
- c# - 如何访问动态程序集中的匿名字段?
- c# - 连接字符串中带有特殊字符的密码
- php - 虚拟主机 wamp laravel 无法正常工作“如果您的企业有手”