如何设置 Origin 请求标头
Posted
技术标签:
【中文标题】如何设置 Origin 请求标头【英文标题】:How to set the Origin Request Header 【发布时间】:2018-03-30 04:47:44 【问题描述】:我想向远程 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)
);
;
但我需要在发送请求之前更改源名称。
请参考下图。
【问题讨论】:
为什么要改? 感谢您的回复。我有我的生产 API。那里不允许本地主机请求。 你应该看看 CORS 让服务器允许跨域请求 是的,我也这样做了,我只允许一个来源.. 但不改变我需要发送请求 那很好......有没有办法在向服务器请求时更改来源 【参考方案1】:简而言之:你不能。
如MDN 所述; Origin 是一个“禁止”的标头,这意味着您不能以编程方式更改它。
您需要配置 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: "*");
【讨论】:
我想知道答案是否被接受,而没有考虑在允许来源标头中使用 * 的安全含义。读者,请研究在此标头中使用什么值。 我并不是要在这个答案中给读者一个关于安全性的讲座,因为它回答了一个关于 CORS 的入门级问题。虽然我不同意你的观点,但我认为安全性以及Access-Control-Allow-Credentials
是学习曲线进一步下降的东西。不过,如果需要,我可以在安全性方面添加脚注来扩展这个答案。
是的。脚注会有所帮助。谢谢。
我对此有点困惑。如果我使用curl
发出请求并自己设置Origin
标头怎么办?然后,不会有任何浏览器可以阻止这种情况。在那种情况下会发生什么?
curl
(和 Postman,就此而言)不关心 CORS,只会忽略 Access-Control-Allow-Origin
标头。它纯粹是所有主流浏览器实现的一种机制,以帮助安全浏览。【参考方案2】:
正如 Baksteen 所说,您不能在 javascript 中更改此标头值。您必须编辑服务器配置以允许跨源请求。
但是:在阅读了您的 cmets 之后,我认为您需要一个仅用于调试和测试的解决方案。
在这种情况下,您可以使用 Chrome 并使用特殊的不安全参数启动它。如果您将此参数提供给 Chrome,它将允许您跨域请求。
不要将此 chrome 实例用于测试页面以外的其他用途!
chrome --disable-web-security --user-data-dir
我为 Firefox 和 Chrome 尝试了几个附加组件,但它们不适用于最新版本的浏览器。所以我建议切换到 chrome 并使用上面的参数来测试你的 API 调用。
如果您对更强大的解决方案感兴趣,您可能想要使用调试代理,例如Fiddler from Telerik。您可以编写自定义规则,以便 Fiddler 在请求离开您的 PC 之前更改您的标头。但是您必须先深入研究该工具,然后才能使用它的所有功能。这可能很有趣,因为它可以帮助您解决的不仅仅是这个调试问题。
【讨论】:
以上是关于如何设置 Origin 请求标头的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Framework 4.2/Boot 1.3 中根据 Origin HTTP 请求标头设置动态 Access-Control-Allow-Origin?
尽管 Access-Control-Allow-Origin 设置为 express ,但请求标头字段 Authorization
如何调试“请求的资源上不存在‘Access-Control-Allow-Origin’标头”