标签: preflight

.NET Web API CORS PreFlight请求

我在向其他域上的Web API发出PUT和DELETE CORS请求时遇到一些麻烦.

我已经通过http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#create-webapi-project教程对API进行了编码.

GET和POST请求工作正常,但DELETE和PUT没有.我收到这条消息:

Failed to load resource: the server responded with a status of 405 (Method Not Allowed)
Failed to load resource: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

当我在使用ASP.NET Web API的CORS支持PUT和DELETE时向WebConfig添加代码时,我只得到第一个错误.

有人可以帮我这个吗?

.net cors http-delete preflight

16
推荐指数
2
解决办法
2万
查看次数

去杜松子酒框架CORS

我正在使用Go gin框架杜松子酒

func CORSMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Writer.Header().Set("Content-Type", "application/json")
        c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
        c.Writer.Header().Set("Access-Control-Max-Age", "86400")
        c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
        c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-Max")
        c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")

        if c.Request.Method == "OPTIONS" {
            c.AbortWithStatus(200)
        } else {
            c.Next()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有状态码:200 OK,但OPTIONS请求后没有任何反应.看起来我想念一些东西,但我无法理解我错在哪里.

有谁能够帮我?

frameworks go cors preflight go-gin

16
推荐指数
5
解决办法
1万
查看次数

如何解决"预检无效(重定向)"或"预检请求不允许重定向"

我已按照此步骤设置我的服务器以启用CORS. https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

但现在在我的浏览器开发控制台中,我看到此错误消息:

XMLHttpRequest无法加载https:// serveraddress/abc.预检的响应无效(重定向)

你知道我该怎么做才能修好它?我在HTTPS中发出CORS请求.我认为这导致'预检无效(重定向)'失败.但我不知道为什么或什么是重定向OPTIONS请求.

谢谢.

cors preflight

16
推荐指数
4
解决办法
3万
查看次数

HAProxy CORS OPTIONS标头拦截设置

通过我的NGinx设置,我能够拦截来自ajax预检的OPTIONS请求,并使用正确的CORS标头和200响应进行响应,以便请求可以继续进行.我正在尝试将我的前端代理合并到HAProxy中,并且在解决这个难题时遇到了一些问题.

我的特殊问题是,当有服务器能够正确响应OPTIONS请求时,我能够添加正确的CORS选项,但是当发出预检请求时,一些后端无法处理/响应405错误.我的haproxy.cfg包含以下用于添加标题的行:

capture request header origin len 128
http-response add-header Access-Control-Allow-Origin %[capture.req.hdr(0)] if { capture.req.hdr(0) -m found }
rspadd Access-Control-Allow-Credentials:\ true if { capture.req.hdr(0) -m found }
rspadd Access-Control-Allow-Headers:\ Origin,\ X-Requested-With,\ Content-Type,\ Origin,\ User-Agent,\ If-Modified-Since,\ Cache-Control,\ Accept if { capture.req.hdr(0) -m found }
rspadd Access-Control-Allow-Methods:\ GET,\ POST,\ PUT,\ DELETE,\ OPTIONS if { capture.req.hdr(0) -m found }
rspadd Access-Control-Max-Age:\ 1728000 if { capture.req.hdr(0) -m found }
Run Code Online (Sandbox Code Playgroud)

解决方案:

当您从客户端的请求设置所有正确的标头时,如何在不将请求传递给Web服务器的情况下使用HAProxy发送响应,但不是动态的,这不是理想的解决方案.

任何帮助,将不胜感激!

ajax haproxy cors preflight

13
推荐指数
2
解决办法
9148
查看次数

OPTIONS请求身份验证

我正在开发一个Web应用程序.它使用基本身份验证.它必须处理OPTIONS请求.这些是Web浏览器预检请求以及来自WebDAV客户端的功能支持请求.

据我所知,OPTIONS请求必须在不请求身份验证的情况下处理(即我的服务器不应该响应401 Unauthorized),它必须给出如下响应:

OPTIONS https://localhost:44305/path/file.ext HTTP/1.1
Connection: Keep-Alive
User-Agent: some app
Host: localhost:44305

HTTP/1.1 200 OK
Content-Length: 0
DAV: 1, 2, 3
Date: Fri, 27 Dec 2013 17:10:21 GMT
Run Code Online (Sandbox Code Playgroud)

我的问题是:我是否应该始终对OPTIONS请求提供相同的响应,无论URL是什么,还是应该依赖于URL.

例如,如果找不到上例中的file.ext,我应该回复'404 Not found'还是'200 OK'?

http file-not-found http-options-method preflight

11
推荐指数
1
解决办法
1万
查看次数

如何在使用具有多个源的PUT和DELETE请求时解决ASP.NET Web API CORS预检问题?

我有一个ASP.NET Web API,由三个不同的SPA调用.我正在为Web API使用Windows身份验证.我最初尝试在Web.config中配置CORS,如下所示:

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="http://localhost:63342" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
        <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
        <add name="Access-Control-Allow-Credentials" value="true" />
    </customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)

这导致了这个预检问题:

Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin (...) is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

我通过在Global.asax.cs中添加以下方法解决了:

protected void Application_BeginRequest()
{
    if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
    {
        Response.Flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法适用于单一SPA.我以为我可以去Web.config并添加其他类似的来源:

<add name="Access-Control-Allow-Origin" value="http://localhost:63342,http://localhost:63347,http://localhost:63345/>
Run Code Online (Sandbox Code Playgroud)

但显然这是不允许的.这产生了以下错误:

The 'Access-Control-Allow-Origin' header contains …
Run Code Online (Sandbox Code Playgroud)

asp.net cors http-options-method asp.net-web-api preflight

11
推荐指数
1
解决办法
9968
查看次数

CORS:为什么我成功获得了预检选项,但发布后仍然出现 CORS 错误?

我有一个使用 axios 发出 http 请求的 Vue 前端,以及一个使用express 的 Node 后端。它们位于不同的域(本地运行时,BE端口为3080,FE端口为3000),我在Node后端使用cors库来处理CORS问题。尽管预检工作正常,post 请求仍然失败并出现 CORS 错误!

当我发送 post 请求时,浏览器会收到预检请求的漂亮的 204 成功响应,并包含这些漂亮的成功标头:

Access-Control-Allow-Headers: content-type
Access-Control-Allow-Methods: POST
Access-Control-Allow-Origin: http://localhost:3000
Connection: keep-alive
Content-Length: 0
Date: Thu, 21 Apr 2022 03:25:54 GMT
Keep-Alive: timeout=5
Vary: Origin, Access-Control-Request-Headers
X-Powered-By: Express
Run Code Online (Sandbox Code Playgroud)

那么为什么我的 POST 请求仍然失败并出现 CORS 错误?

不知道这是否相关,但可能是:我已经在 Brave(基于铬)和 Firefox 中尝试过这一点。两者具有相同的基本结果,但有一个区别:在 Brave 开发工具中,似乎显示首先发送 POST 请求,然后发送预检 OPTIONS 请求。这看起来像是一个明显的危险信号,但是......在 Firefox 中,开发工具显示首先发送预检选项,然后发送 POST。但正如我所说,预检成功,发布失败,并在两个浏览器中出现 CORS 错误。

CORS 错误屏幕截图 (Firefox): 在此输入图像描述

后端代码

应用程序.js:

const express = require('express');
const cors = require('cors');
const app = …
Run Code Online (Sandbox Code Playgroud)

node.js preflight vue.js axios

11
推荐指数
1
解决办法
1万
查看次数

使用自定义HTTP标头发送跨域请求时禁用预检OPTION请求

我刚刚发现我的浏览器在尝试使用自定义http标头进行跨域ajax调用时发送了一个额外的"OPTION"请求.我认为它被称为"预检请求".

是否可以禁用此功能并发送初始请求?

这是我的javascript测试代码:

$(document).ready(function() {
    $.ajax({
        url: "http://google.fr",
        crossDomain: true,
        headers: {
            "X-custom-parameter": true
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

ajax cross-domain option http-headers preflight

10
推荐指数
1
解决办法
9143
查看次数

为什么跨源HEAD请求需要进行预检检查?

我正在阅读关于CORS请求的规范,我发现了有关预检请求的内容:

这些是对具有除GET之外的HTTP请求方法的非同一原始URL的请求,首先需要使用预检结果缓存条目或预检请求进行授权.

我曾经认为预检请求的目的是在创建请求之前检查是否允许请求,以防它(非法)更改服务器状态.

但是HEAD和OPTIONS不会修改服务器状态.我必须误解预检检查的原因.

为HEAD和OPTIONS进行预检检查但不是GET的目的(也就是原因,动机或理由)是什么?GET有什么特别之处?

cross-domain http-method cors preflight

10
推荐指数
1
解决办法
5162
查看次数

GCP 签名 URL 存在 CORS 问题

我正在尝试使用签名 URL 从前端通过 fetch 上传到 GCP,但遇到了持续存在的 CORS 问题。

要上传的文件是否应该嵌入到signedurl中,或者发送请求正文中的signedurl?

这是错误:

Access to fetch at <signedurl> from origin 'http://my.domain.com:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是存储桶上的 CORS 配置:

[
    {
      "origin": ["http://gcs.wuddit.com:3000"],
      "responseHeader": ["Content-Type", "Authorization",  "Content-Length", "User-Agent", "x-goog-resumable", "Access-Control-Allow-Origin"],
      "method": ["GET", "POST", "PUT", "DELETE"],
      "maxAgeSeconds": 3600
    }
]
Run Code Online (Sandbox Code Playgroud)

这是获取调用:

const uploadHandler = async (theFile, signedUrl) => {
  try {
    const response …
Run Code Online (Sandbox Code Playgroud)

cors preflight pre-signed-url google-cloud-platform fetch-api

9
推荐指数
1
解决办法
8363
查看次数