首页 > 解决方案 > HttpListener 没有收到 OPTIONS 请求

问题描述

就如此容易。我有HttpListener听。现在让我们忽略其余的代码。只是听者在听。

我配置了 2 个测试网站:“local-site-a.com”和“local-site-b.com”。我通过在我的主机文件中添加以下内容来配置它们:

127.0.0.1   local-site-a.com
127.0.0.1   local-site-b.com

站点 B 托管在 IIS 中,站点 A 映射到我的HttpListener.

然后我有我的JS:

async start() {

    var response = await fetch("http://local-site-a.com/add/2/2", { "method": "get", "mode" : "cors", "credentials": "include" });
    var result = await response.json();
    console.dir(result);

}

CORS?十分简单。我读了所有关于它的内容。捕获预检(“OPTIONS”请求)以标头的标头响应。我只能在 Internet 和 Stack Overflow 上读到关于它的确切信息,这不是这里的问题。

我什至没想到这里会出现任何问题,但无论如何......

问题是我什至没有收到“选项”请求。我捕获的第一件事HttpListener是“GET”请求,这意味着它只是忽略了“OPTIONS”请求,对吗?

我在 GET 请求中获得了“Origin”标头。它不应该在 OPTIONS 请求中吗?

标签: c#httpcors

解决方案


Geez,我总是必须自己找到答案:

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

有些请求不会触发 CORS 预检。这些在本文中被称为“简单请求”,尽管 Fetch 规范(定义 CORS)没有使用该术语。不触发 CORS 预检的请求(即所谓的“简单请求”)是满足以下所有条件的请求 (...)

所以...

我在我的请求中添加了一个自定义标头,你猜怎么着。它来了。我读了错误的例子,完全忽略了“简单的请求”!现在一切都按预期工作。


推荐阅读