首页 程序笔记 MVC跨域问题 Response for preflight has invalid HTTP status code 405

MVC跨域问题 Response for preflight has invalid HTTP status code 405

公司项目H5调用接口遇到Response for preflight has invalid HTTP status code 405这样的错误,是使用PUT方式提交请求接口。Content-Type设置为application/json,JS代码如下:

$.ajax({
    type: "PUT",
    url: "http://172.16.200.84:8977/Messages?sessionId=ee876bfbtest",
    data:data,
    beforeSend: function (XMLHttpRequest) {
        XMLHttpRequest.setRequestHeader("Content-Type", "application/json");
    },
    success: function (data, textStatus) {
        alert(data);
    }
});

项目使用的是MVC,而不是WebApi,按照网上的比较通用的方法是直接在MVC项目的webconfig里配置如下节点:

<system.webServer>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="true">
    <remove name="WebDAVModule"/>
</modules>
</system.webServer>

当然配置后依然没有成功,接下来再试一次还是失败。还是原来的错误。

开始翻墙找各种原因,后来注意到失败的请求Method是OPTIONS,奇怪了,明明是PUT请求,怎么出现了Method为OPTIONS的请求呢?又看到一个外国友人说要在Global.asax里加上如下处理:

protected void Application_BeginRequest()
{
    if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
  {
    Response.End();
  }
}

再试一次,成功了。但是看记录,会有两个请求,一个是OPTIONS请求返回200成功,一个是自己的PUT请求,返回200成功。那么这个OPTIONS请求到底是什么?百度了一下得到了答案:

Preflighted Requests(预检请求)

Preflighted Requests是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。

下面的2种情况需要进行预检:

1、简单请求,比如使用Content-Type 为 application/xml 或 text/xml 的 POST 请求;

2、中设置自定义头,比如 X-JSON、X-MENGXIANHUI 等。

原来如此,在js发起PUT请求的时候,头部设置了XMLHttpRequest.setRequestHeader("Content-Type", "application/json"),所以请求的时候会多出一个OPTIONS,如果去掉这个头,就不会多出这次请求了。

当然为了安全起见,可以不配置Web.Config,而是自己定义一个ActionAllowOriginAttribute,继承于ActionFilterAttribute,然后对需要跨域访问的接口加上标签就行了,主要是在header加上如下内容:

response.AddHeader("Access-Control-Allow-Origin", "*");
response.AddHeader("Access-Control-Allow-Methods", "PUT,GET,POST,OPTIONS");
response.AddHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-File-Name");

这个网上有很多示例,这里就不再赘述了。

3

站心网

公司项目H5调用接口遇到Response for preflight has invalid HTTP status code 405这样的错误,是使用PUT方..

为您推荐

EntityFrame(EF) SQLite常见问题和解决方案

在使用 Entity Framework (EF) SQLite 时可能遇到的一些问题,下面是一些常见的问题和对应的解决方案。1. 无法找到适配器或数据库提供程序运行 EF 时提示类似以下错误:No database provider has been configured fo..

.NET开源ORM FreeSql常见问题和解决方法

FreeSql 是一个功能强大的 .NET 开源 ORM(对象关系映射)工具,支持多种数据库类型并提供丰富的功能特性。以下是使用 FreeSql 过程中常见的问题及其解决方法:1. 数据库连接问题问题描述:无法连接数据库,报错提示..

SQL Server用UUID做主键性能问题和解决方案

在 SQL Server 中使用 UUID(全称:Universally Unique Identifier) 作为主键确实可能带来一些性能问题,特别是在大型数据库和高写入负载的场景下。以下是一些关键的性能挑战及其原因:1. 无序插入导致索引碎片化UU..

Blazor的N种渲染模式原理和常见问题说明

我们从下面这幅图开始,下图显示了三种渲染模式,分别称之为静态SSR、交互式SSR(即之前的BlazorServer)、交互式CSR(即之前的BlazorWasm)。还有一种渲染模式BlazorHybrid,稍后说。一、先浅层理解一个图例静态SSR:经..

CLS 问题:超过 0.1(桌面设备) 是什么意思?

在网页设计和开发中,CLS(Cumulative Layout Shift)是指页面布局的累计偏移量。当一个用户与页面互动时,如果页面的某些元素突然改变位置或大小,导致整个布局发生偏移,就会产生布局偏移。这种偏移可能会影响用户..

Response.Redirect目标页面无法取到Session值

今天开发做一个登陆界面,登陆成功后通过Response.Redirect重定向到登陆后的目标页面。 目标页面做了登陆验证,如果Session中用户信息不存在,则需要重新登陆。结果发现登陆成功后,将用户信息保存到了Session中,..

IIS中.NET Core报错HTTP Error 500.31 - ANCM Failed to Find Native Dependencies

在IIS部署.NET Core网站报错HTTP Error 500.31 - ANCM Failed to Find Native Dependencies。原因是需要安装.NET Core运行时和ASP.NET Hosting。1 安装.NET Core运行时,目前最新的是ASP.NET Core 运行时 6.0.10(可..

ASP.NET Core 使用Razor code blocks替代@helper

@helper 是 ASP.NET Razor 视图引擎的一种语法,它允许你在 Razor 视图中定义和使用自定义 HTML 帮助程序。这些帮助程序可以被多次调用,以生成复杂的 HTML。在ASP.NET MVC中可以使用@helper定义一个返回IHtmlString..

System.InvalidOperationException:“Unable to configure HTTPS endpoint.异常处理

.NET Core网站按F5运行时,在Program.cs里运行到app.Run()的时候报错:System.InvalidOperationException:“Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer ..

.NET Core HttpClient报错The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set.

使用.NET Core做一个爬虫工具,使用HttpClinet下载网页时得到了HttpResponseMessage并且状态是200,但是调用ReadAsStringAsync方法时报错:System.InvalidOperationException: The character set provided in Conten..

苹果cms 不统计点击数(增加人气)的问题!

开发模块中遇到,视频点击不增加人气,统计不到点击数的解决方法!不管怎么点击都不增加人气,人气始终为 0在头部文件加入home.js一般集成在include.html文件内!<script src="{$maccms.path}static/js/home.js"></s..

2023国内ChatGPT注册教程(解决没有手机号问题)亲测成功注册!

最近火热的ChatGPT究竟是什么?要如何注册ChatGPT账号去使用?ChatGPT,是由美国人工智能研究实验室OpenAI开发的一种先进的聊天机器人模型。它能够学习和理解人类的语言进行对话,同时根据聊天的上下文进行互动,协..

vscode C# MVC脚手架

在 VS Code 中创建 C# MVC 脚手架有两种方法:方法一:使用命令行打开一个终端窗口,并导航到您要创建项目的目录。输入以下命令:dotnet new mvc --name MyApp这将创建一个名为 MyApp 的新 C# MVC 项目。方法二:使..

如何解决.NET中的内存泄漏问题

在.NET中解决内存泄漏问题是非常重要的,因为它会导致程序占用过多的内存,最终可能导致应用程序崩溃。以下是一些解决内存泄漏问题的常用方法:使用IDisposable接口和using语句实现IDisposable接口并在类中使用using..

优秀求职者应主动问的5个问题

许多有经验的面试官觉得问面试者一些问题是很浪费时间的,所以面试官总会在面试最后问“你有什么问题需要问我吗?” 一般的求职者并不会太关注面试官会怎样回答自己的问题,他们更多的只是想让自己问出..

Android Volley BasicNetwork:performRequest:Unexpected response code 302 错误

Android Volley BasicNetwork:performRequest:Unexpected response code 302 for http://xxx异常,这个http://xxx的接口在浏览器中打开可以正常访问。接口做了302重定向,从http重定向到https的地址去了。Volley对重..

android启动页白屏和图片自适应问题

android启动页白屏和图片自适应问题,自适应官方给的说法也只是做多套图去适配不同的分辨率,本文通过几个设置几行代码即可解决启动页短暂白屏和自适应问题。网上的说法是通过启动页代码裁切图片或者在ImageView中设..

IIS配置HTTP 301重定向到HTTPS实测有效

百度站长平台目前已经建议网站使用HTTPS了。百度搜索的原话是这样的,从网站安全和用户体验上来讲,HTTPS站点更为安全优质,而百度搜索在索引的时候会考虑优先展现用户体验较好的页面;预计在2018年下半年,HTTPS将..

你在.NET开发中遇到过哪些常见的安全性问题?如何解决这些问题?

在.NET开发中,以下是一些常见的安全性问题,以及相应的解决方法:跨站脚本攻击(XSS):XSS攻击是通过向应用程序注入恶意脚本来攻击用户的浏览器。为防止XSS攻击,可以使用输入验证和输出编码来过滤和转义用户输入..

vscode中自动将json格式的内容自动生成对应的代码

JSON是各种编程语言中都很常用的数据格式,如Java,JavaScript,C#等语言中都常用JSON传输数据或保存一些配置信息,要序列化或反序列化字符串,在代码中需要有对应与JSON内容的类才方便实现。vscode是非常强大的插件..

发表回复

返回顶部