【问题标题】:HttpListener doesn't get OPTIONS requestHttpListener 没有收到 OPTIONS 请求
【发布时间】:2019-01-07 02:35:34
【问题描述】:

就这么简单。我有一个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 上读到关于它的确切信息,这不是这里的问题。

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

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

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

【问题讨论】:

  • 你为什么把它标记为 C#?您使用的是什么 HTTP 客户端?自动 OPTIONS 请求是现代浏览器和 HTTP 库的功能。不会总是自动发生。
  • 为什么选择 C#?因为 .NET System.Net.HttpListener。什么客户?他们都是。最新版本的 Firefox、Chrome、Opera 和 Edge。

标签: c# http cors


【解决方案1】:

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

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

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

所以...

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

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2017-09-30
    • 2017-06-18
    相关资源
    最近更新 更多