gpt4 book ai didi

ASP.net 同源策略 header 不起作用

转载 作者:行者123 更新时间:2023-12-04 23:06:06 25 4
gpt4 key购买 nike

我收到错误:

XMLHttpRequest cannot load http://www.scirra.com/handlers/arcadeProcessScore.ashx. Origin http://static1.scirra.net is not allowed by Access-Control-Allow-Origin.

arcadeProcessScore.ashx我有以下几行:
public void ProcessRequest (HttpContext context) {

context.Response.AppendHeader("Access-Control-Allow-Origin", "http://static1.scirra.net");
context.Response.AppendHeader("Access-Control-Allow-Origin", "https://static1.scirra.net");
context.Response.ContentType = "text/plain";

但是错误仍然存​​在。

我也简单地尝试过:
context.Response.AppendHeader("Access-Control-Allow-Origin", "*");

这也行不通。

如果我添加 <add name="Access-Control-Allow-Origin" value="*"/>web.config水平它有效,但显然不是解决方案。

我怎样才能让 arcadeProcessScore.ashx接受来自 static1.scirra.net 的请求?谢谢你的帮助。

最佳答案

我自己做了一些测试,直接使用 XmlHttpRequest访问我的项目中的处理程序。我使用的设置是在我的本地 IIS(版本 6.1,因此可能与 7.5 的行为有所不同)上发布应用程序并拥有 Default.aspx页面调用我在 Visual Studio 中的开发服务器中运行的处理程序。像这样:

http://mymachine/WebTest/Default.aspx

-> XmlHttpRequest get request to

http://localhost:58025/WebTest/TestHandler.ashx

处理程序中的代码:
public void ProcessRequest (HttpContext context) {
context.Response.AppendHeader("Access-Control-Allow-Origin", "http://mymachine");
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World " + DateTime.Now.ToString());
}

使用 IE9,无论我是否发送了 Access-Control-Allow-Origin,行为都是一样的。从处理程序返回头。 IE9 发出警告,要求用户确认是否应加载内容。

Chrome(版本 21.0.1180.79 m)和 FF(版本 14.0.1)实际上都会向处理程序生成请求并尊重处理程序发回的 header 。

所以这适用于 Chrome 和 FF:
context.Response.AppendHeader("Access-Control-Allow-Origin", "http://mymachine");

所以这样做了:
context.Response.AppendHeader("Access-Control-Allow-Origin", "*");

但是,如果我尝试在同一响应中添加多个不同的允许来源,则无法让它们中的任何一个显示内容。对我来说,这些都不起作用:
  • 添加多个响应头
    context.Response.AppendHeader("Access-Control-Allow-Origin", "http://mymachine");
    context.Response.AppendHeader("Access-Control-Allow-Origin", "http://someothermachine");
  • 添加一个标题,两个来源逗号分隔
    context.Response.AppendHeader("Access-Control-Allow-Origin", "http://mymachine, http://someothermachine");
  • 添加一个标题,两个原点空格分隔
    context.Response.AppendHeader("Access-Control-Allow-Origin", "http://mymachine http://someothermachine");
  • 添加一个标题,两个原点空格分隔
    context.Response.AppendHeader("Access-Control-Allow-Origin", "http://mymachine; http://someothermachine");

  • 为了让它工作,我所做的是遵循 this answer 中给出的建议。 .我的处理程序看起来像这样:
    public void ProcessRequest(HttpContext context)
    {
    string[] allowedOrigins = new string[] { "http://mymachine", "http://someothermachine" };
    string origin = context.Request.Headers.Get("Origin");
    if (allowedOrigins.Contains(origin))
    context.Response.AppendHeader("Access-Control-Allow-Origin", origin);
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    context.Response.ContentType = "text/plain";
    context.Response.Write("Hello World " + DateTime.Now.ToString());
    }

    有了这个,Chrome 和 FF 都接受来自两个来源的处理程序的输出。

    关于ASP.net 同源策略 header 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957989/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com