在Angular $ http请求中强制'Host'标头的值

时间:2016-11-14 19:30:50

标签: javascript angularjs http host

我想访问多站点服务器S上托管的API站点。我有S的IP地址,但是没有DNS服务器,所以我必须使用以下参数发出http请求:

{
  URL : 'http://192.168.1.xxx:80/data',
  headers : {
    Host : 'api.somesite.com'
  },
  data : ...
}

但是,在发送之前,'Host'标头会自动被Angular替换为'192.168.1.xxx'(因此请求失败)。 我已经尝试过实现一个http拦截器:

api.run(['$http',function($http) {
    console.log("set host");
    $http.defaults.headers.common.Host = "api.somesite.com";
}]);

...没有结果:服务器以ERROR 500回答,并且开发工具显示请求的头部'Host'设置为ip地址。

或者,是否有其他方法通过使用其IP(不使用DNS)向网站发出http请求?

1 个答案:

答案 0 :(得分:1)

Host在XMLHttpRequest / fetch规范中定义为forbidden header name,因此无法在浏览器中通过JavaScript设置它。

排序DNS,基于每个客户端编辑系统主机文件,或者配置每个客户端以使用知道如何解析URL的HTTP代理是解决此问题的唯一方法。