如何删除HTTPS npm模块中的请求标头

我正在尝试从本地主机访问Google API。 铬说,由于起源,这是不可能的

XMLHttpRequest cannot load https://maps.googleapis.com/maps/api.... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. 

我正在使用https-browserify发出ajax请求。

  options = { hostname: "maps.googleapis.com", port: 443, path: "/maps/api/....", method: "get", headers: { "Origin": null, "Referer": null } }; result = null; req = https.request(options, function(res) { res.on("data", function(chunk) { return result += chunk; }); return res.on("end", function() { debugger; }); }); req.end(); 

但是这并没有帮助。 发出请求时, OriginReferer头文件仍然存在。 我怎样才能删除它们?

Origin被认为是Request对象的不安全标题( 源代码 )

这就是为什么你不能删除它们; 请求实现只允许您删除或修改被认为是安全的标头。

Google Maps API确实有Access-Control-Allow-Origin。

在本地主页上加载一个jquery后,我可以使用下面的方法快速testing它,它可以工作。

$.getJSON("https://maps.googleapis.com/maps/api/timezone/json?location=-33.86,151.20")

检查在维基百科或mdn相同的起源政策!

你应该使用一个HTTP嗅探器,如fiddler来分析请求! 那么你应该检查Access-Control-Allow-Origin: *标题是否存在! 当您的请求出现在响应中时,您的请求只能从浏览器中运行! 所以服务器,在你的情况下,谷歌服务器,必须发送它! Google通常会在所有公共API上进行浏览器内的使用。 由于其他人无法通过AJAX请求直接访问此URL。

重要的是要明白, same origin policy是一个浏览器feauture构build安全的原因! 所以当你从非浏览器环境(如node.js或其他服务器端编程环境)发出请求时,它不会影响你! 当你通过浏览器直接发送请求时,它也不会影响你,因为它限制了AJAX请求,而不是每一个请求。

有办法绕过这个限制,所以如果你必须向dosnt发送Access-Control-Allow-Origin头的服务器发出AJAX请求,你仍然可以通过你的服务器代理请求!

另一个解决方法是JSONP ,但是这也支持从请求的服务器!

重要注意事项:如果在Access-Control-Allow-Origin头文件中返回一个起始地址而不是*那么请求只有在服务器返回的原始地址的情况下才可能发生! 所以也许服务器正在返回生产地,但拒绝本地主机?

至less从谷歌reCAPTCHA我知道你可以限制一个API密钥到一个特定的来源。 对于开发的目的,通常谷歌允许来自localhost所有请求,但可能由于任何原因不在你的情况。 检查这个最好的方法是用上面所说的简单的HTTP嗅探器来分析HTTPstream量!