使用 javascript 设置响应标头

Posted

技术标签:

【中文标题】使用 javascript 设置响应标头【英文标题】:Setting response header with javascript 【发布时间】:2013-08-02 03:12:38 【问题描述】:

我在从应用程序中的 URL 收集 json 值时遇到问题。当我尝试获取它们时,控制台中会显示一条错误日志,说明 access-control-allow-origin 不允许来源。

我研究了一下,发现响应头必须设置为 Access-Control-Allow-Origin: *

如何使用纯 javascript 做到这一点?没有 jquery 或任何其他库。

这是我当前的代码:

<script type="text/javascript">
    var xmlHttp = null;
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", "http://example.com/id=69", false );
    xmlHttp.send( null );
    console.log("JSON values from URL: ");
    console.log(xmlHttp.responseText);
</script>

【问题讨论】:

【参考方案1】:

您不能在客户端执行此操作,您的服务器必须发送这些标头。

【讨论】:

【参考方案2】:

我研究了一下,发现响应头必须设置为 Access-Control-Allow-Origin: *

如何使用纯 javascript 做到这一点?没有 jquery 或任何其他库。

您不能,除非您的 服务器 正在运行 JavaScript(NodeJS 等)。

服务器 必须允许从文档来源访问资源。它的工作方式是:

浏览器请求访问资源的权限(这称为“预检”请求),告诉服务器它想要访问什么资源,等等。

服务器以适当的标头回复,告诉浏览器是否允许访问。

浏览器发送实际请求。

服务器对其进行响应(再次包括相关的标头)。

我相信在某些情况下不需要进行预飞行。所有这些都由XMLHttpRequest 对象为您处理。

the Cross-Origin Resource Sharing specification 中的详细信息。

【讨论】:

我的服务器正在运行 NodeJS。那我可以设置响应头吗? @MarkoĆilimković:当然,在服务器上的代码中使用response.setHeader。 CORS 非常挑剔,您需要确保您允许客户端要求的所有内容,这意味着检查浏览器发送的请求标头。 感谢您的解释! @T.J.Crowder 这个浏览器扩展解决了客户端的 CORS 策略问题。如何在没有扩展名的情况下完成chrome.google.com/webstore/detail/allow-control-allow-origi/… @T.J.Crowder 我的意思是扩展程序也在客户端使用 javascript,但仍然能够覆盖 CORS 问题。那么,为什么它不能在 html 页面中使用 javaScript 完成。

以上是关于使用 javascript 设置响应标头的主要内容,如果未能解决你的问题,请参考以下文章

读取响应标头的问题

HAR 响应中没有标头

Javascript fetch api:无法检索某些响应标头

如何将 CORS 标头设置为内部服务器错误响应?

Javascript图像 - 响应中的访问标头

如何在javascript中获取响应标头值? [复制]