c# - 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 请求中吗?
解决方案
Geez,我总是必须自己找到答案:
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
有些请求不会触发 CORS 预检。这些在本文中被称为“简单请求”,尽管 Fetch 规范(定义 CORS)没有使用该术语。不触发 CORS 预检的请求(即所谓的“简单请求”)是满足以下所有条件的请求 (...)
所以...
我在我的请求中添加了一个自定义标头,你猜怎么着。它来了。我读了错误的例子,完全忽略了“简单的请求”!现在一切都按预期工作。
推荐阅读
- python - 字典 - 相同的键,但必须找到键的最大值
- json - jq 返回匹配一个字段的所有数组
- rust - 如何解决“借来临时价值下降”
- python - Spacy Matcher 怪异
- bash - bash 脚本来监控进程的内存使用情况并杀死它
- swift - 没有这样的模块 Crashlytics - Pod 似乎丢失了
- php - Codeigniter:如何从来自不同客户端的发布请求中删除会话
- css - 在 Chrome 上忽略paint-order 属性
- reactjs - useCallback 内联函数样式
- amazon-dynamodb - DynamoDB 对象集插入和获取