web页面调用本地服务,跨域问题如何解决。
我本地使用winform监听127.0.0.1:5000。然后去触发一些操作。

我网上搜索也处理了CORS 头。

但是网页上请求127.0.0.1:5000,出现了跨域问题。这个要如何解决。

web页面调用本地服务,跨域问题如何解决。
我本地使用winform监听127.0.0.1:5000。然后去触发一些操作。

我网上搜索也处理了CORS 头。


阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
跨域问题解决方案
你遇到的跨域问题是因为浏览器的同源策略限制了从一个源加载的文档或脚本试图访问另一个源的资源。你的 WinForm 服务监听在 127.0.0.1:5000,而网页请求也在 127.0.0.1:5000,但浏览器认为这是两个不同的源,因为它们使用了不同的协议(http 和 https)。
解决方案
核心代码
如果你选择使用代理服务器,核心代码如下:
using System;
using System.Net.Http;
using System.Net.Http.Headers;
public class ProxyServer
{
public static void Main(string[] args)
{
var server = new HttpListener();
server.Prefixes.Add("http://localhost:5001/");
server.Start();
Console.WriteLine("Proxy server started.");
while (true)
{
var context = server.GetContextAsync().Result;
var request = context.Request;
var response = context.Response;
var url = request.Url;
var method = request.HttpMethod;
// 代理请求到 WinForm 服务
var client = new HttpClient();
var result = client.SendAsync(new HttpRequestMessage(method, url.AbsoluteUri)).Result;
// 返回代理结果
response.StatusCode = result.StatusCode;
response.StatusDescription = result.ReasonPhrase;
var buffer = result.Content.ReadAsByteArrayAsync().Result;
response.ContentLength64 = buffer.Length;
var output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
}
}
}
这个代理服务器监听在 localhost:5001,代理请求从网页到 WinForm 服务。