首页 > 解决方案 > 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 个项目

少于 5 个项目的相同请求具有所有必要的标头:

少于 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 

这太奇怪了。有人知道如何解决吗?它让我疯狂。我直接在后端尝试了相同的请求而没有错误,因此后端能够解决这样的请求。

标签: javascriptjqueryajaxxmlcross-domain

解决方案


推荐阅读