对预检请求的 Ajax 响应未通过访问控制

标签 ajax

我一直在寻找 5 个小时左右,但我放弃了。
我的 ajax get 请求只是不想工作。

var ApiResponce = $.ajax({
    url: "http://localhost:18428/api/Reservation/" + userid + "?weekNumber=" + weeknr,
    type: 'GET',
    headers: {
        'Authorization': "bearer " + token,  
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Credentials': true,
    },
    dataType: 'json',
    crossDomain: true,
    contentType: "application/json",

    success: function(responce) {
        console.log("success");
        console.log(responce);
    },
    error: function(err) {
      console.log("error");
        console.log(ApiResponce);
    },
});

它连接到标准的 C# mvc api,但我得到的只是这个错误:

XMLHttpRequest cannot load http://localhost:18428/api/Reservation/1?weekNumber=1. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 405.

最佳答案

如果您在服务器端使用 Apache Tomcat,则需要在 servlet 容器上编辑 web.xml 文件并添加以下行:

     <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
                <param-name>cors.allowed.origins</param-name>
                <param-value>*</param-value>
        </init-param>
        <init-param>
                <param-name>cors.allowed.methods</param-name>
                <param-value>GET, HEAD, POST, PUT, DELETE, OPTIONS</param-value>
        </init-param>
        <init-param>
                <param-name>cors.exposed.headers</param-name>
                <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials,X-Bonita-API-Token</param-value>
        </init-param>
        <init-param>
                <param-name>cors.allowed.headers</param-name>
                <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,X-Bonita-API-Token</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注意:适用于 Apache Tomcat 7+,不要忘记重启 tomcat。

关于对预检请求的 Ajax 响应未通过访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475028/

相关文章:

android - Android Phonegap 应用程序中的按钮单击事件出错

javascript - X-Editable - 如何使用 ajax 提取表单数据

javascript - 递归AJAX帖子,导致计算机运行缓慢

php - 获取两个下拉列表的值

javascript - 如何使用ajax将数据库值发布到下一页

javascript - 是否可以在 DIV 内没有其他页面的情况下刷新 DIV?

ajax - 如何在 Apache 中为 REST 设置代理

java - 在java中向服务器发送请求后不等待响应

javascript - jQuery.ajax *仅*检索状态代码但不检索/下载整个文档?

javascript - Codeigniter-PHP : How to Change table week Dates , 更改输入日期