如何设置Origin请求头

问题描述 投票:0回答:2

我想向远程 API 发送 AJAX 请求。

function Gettest(CourseID) {
    var param = { "CourseID": CourseID};
    param = JSON.stringify(param);
    $.ajax({
        type: "Post",
        url: apiurl + "Course/DelCoursetargetedaudience",
        contentType: "application/json; charset=utf-8",
        data: param,
        dataType: "json",
        success: function (data) {
        },
        error: function (response) {
        }
    });
};

但是我需要在发送请求之前更改原始名称。

请参考下图。

javascript jquery asp.net asp.net-web-api
2个回答
31
投票

简而言之:你不能。

MDN 上所述; Origin 是一个“禁止”标头。这意味着您无法以编程方式更改它,因为浏览器不允许您在客户端 JavaScript 代码中设置它。

您需要配置 Web 服务器以允许 CORS 请求。

要启用 CORS,请将其添加到您的 Web.config

<system.webServer>   
    <!-- Other stuff is usually located here as well... -->
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />               
        </customHeaders>
    </httpProtocol>
<system.webServer>

或者,在 Global.asax.cs 中

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        /* Some register config stuff is already located here */
    }

    // Add this method:
    protected void Application_BeginRequest()
    {
        HttpContext.Current.Response.AddHeader
            (name: "Access-Control-Allow-Origin", value: "*");            
    }
}

7
投票

正如 Baksteen 所说,您无法在 JavaScript 中更改此标头值。您必须编辑服务器配置以允许跨源请求。

但是:阅读您的评论后,我认为您需要一个仅用于调试和测试的解决方案。

在这种情况下,您可以使用 Chrome 并使用特殊的不安全参数启动它。如果您向 Chrome 提供此参数,它将允许您跨域请求。

除了测试您的页面之外,请勿将此 chrome 实例用于其他用途!

chrome --disable-web-security --user-data-dir

我尝试了 Firefox 和 Chrome 的几个附加组件,但它们不适用于最新版本的浏览器。所以我建议切换到chrome并使用上面的参数来测试你的API调用。


如果您对更强大的解决方案感兴趣,您可能需要使用调试代理,例如来自 Telerik 的 Fiddler。您可以编写自定义规则,以便 Fiddler 在请求离开您的 PC 之前更改您的标头。但您必须先深入研究该工具,然后才能使用它的所有功能。这可能很有趣,因为它可以帮助您解决的不仅仅是这个调试问题。

© www.soinside.com 2019 - 2024. All rights reserved.