ASP Classic / CORS - 设置 CORS 标头时报告无标头

问题描述 投票:0回答:2

提前道歉,我是 CORS 新手,所以可能是我缺少的东西。

我正在尝试在当前的本地主机中设置从一个本地主机端口到另一个本地主机端口的 CORS。我已经确认使用相同语言/框架构建的两个应用程序是可能的,但我遇到了两种不同语言/框架的问题。

目前,每个 localhost 端口都是这样构建的 -

本地主机1:React/.Net C#

Localhost2:React/.Net C#

Localhost3:ASP 经典

我能够在 localhost 1 和 2 之间完成 CORS,但在处理 localhost2 和 localhost 3 之间的 CORS 时,我不断收到与标头中的“Access-Control-Allow-Origin”相关的错误。

下面是我当前尝试将数据发布到的 ASP 经典文件,该文件用于确认数据正在发送 -

<%
Response.AddHeader "Access-Control-Allow-Origin", "*"
Response.AddHeader "Access-Control-Allow-Methods", "POST, OPTIONS"
Response.AddHeader "Access-Control-Allow-Headers", "Content-Type"
Response.AddHeader "Access-Control-Allow-Credentials", "true"

If Request.ServerVariables("REQUEST_METHOD") = "OPTIONS" then
    ' Handling preflight request
    Response.AddHeader "Access-Control-Allow-Origin", "*"
    Response.AddHeader "Access-Control-Allow-Methods", "POST, OPTIONS"
    Response.AddHeader "Access-Control-Allow-Headers", "Content-Type"
    Response.AddHeader "Access-Control-Allow-Credentials", "true"
    Response.Status = 200
    Response.End
End If

' Check if it's a POST request
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
    Dim requestData, id1
    
    On Error Resume Next
    Set requestData = JSONParse(Request.Form("data")) ' Assuming "data" is the key where JSON is sent
    On Error Goto 0 ' Re-enable default error handling
    
    If Err.Number <> 0 Then
        ' Handle JSON parsing errors
        Response.Status = 400 ' Bad Request
        Response.Write "Error while parsing JSON: " & Err.Description
        Response.End
    End If
    
    id1 = requestData("id1")
    
    If id1 = "" Or Not IsNumeric(id1) Then
        ' Invalid or missing data in the JSON payload
        Response.Status = 400 ' Bad Request
        Response.Write "Invalid or missing ID data"
        Response.End
    Else
        ' Respond with a confirmation message
        Response.AddHeader "Content-Type", "application/json" ' Set appropriate Content-Type
        Response.Write "{ ""message"": ""Received the data successfully"" }" ' Respond with JSON confirming data receipt
        Response.End
    End If
Else
    ' Handling non-POST requests
    Response.Status = 405 ' Method Not Allowed
    Response.Write "Only POST requests are allowed"
    Response.End
End If
%>

下面是我在 Chrome 中查看开发工具/问题时收到的消息。

Image of chrome devtools displaying header missing despite being on file

我缺少什么/我该如何解决这个问题?

提前感谢您的帮助:)

旁注 - 是的,我知道 * 是一个安全问题,我只是使用通配符进行测试。

cors asp-classic
2个回答
0
投票

发生这种情况是因为 IIS 在请求到达 ASP 页面之前将其短路。

默认情况下,经典 ASP ISAPI 处理程序仅接受

GET
HEAD
POST
作为有效的 HTTP 动词,使用
OPTIONS
等其他动词将导致
405 Method Not Allowed
的 HTTP 状态响应。要使用
OPTIONS
,您需要在 IIS 中经典 ASP 网站的处理程序映射中编辑 ASPClassic IsapiModule 的 HTTP 处理程序(参见下图)

并将

OPTIONS
添加到逗号分隔的允许动词列表中。


0
投票

我发现了我的问题。

我必须在 IIS 中的 HTTP 标头部分中设置 CORS 标头,以允许 CORS 发布到我的本地主机,而不是在 ASP 经典代码的单个文件中设置详细信息。

我相信这是由于服务器级别的问题而不是代码相关的问题。

© www.soinside.com 2019 - 2024. All rights reserved.