与Chrome和Firefox POST通话的内容类型不同

时间:2016-10-13 18:50:29

标签: javascript angularjs ajax rest http-headers

以下是我对Rest API的调用。它只是更大脚本的一部分。

SomeServiceService.addNewCall = function(data)
    {

      deferred = $q.defer();
      addNewPaymentMethodsServiceCall  = $http({
        url: rootUrl + 'user/v1/something',
        method: 'POST',
        data: data,
        headers: {
          'Content-Type': 'application/json',
          'Accept-Language': 'en-us'
        }
      }).success(function(response){
        deferred.resolve(response);
      }).error(function(response,status){
        response.status= status;
        deferred.reject(response);
      });
      return deferred.promise;
    };

问题我在chrome和firefox中Content-Type中存在差异。

在Chrome中

Accept-Language:en-US
Cache-Control:no-cache 
Content-Type:application/json
If-Modified-Since:Mon, 26 Jul 1997 05:00:00 GMT
Origin:https://mydomain 
Pragma:no-cache
Referer:mydomain/users/app/
User-Agent:Mozilla/5.0(Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143
Safari/537.36

在Firefox中

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding  gzip, deflate
Accept-Language  en-US 
Cache-Control    no-cache 
Connection       keep-alive 
Content-Length   157 
Content-Type     application/json; charset=UTF-8 
Host             mydomain 
If-Modified-Since    Mon, 26 Jul 1997 05:00:00 GMT 
Pragma           no-cache 
Referer          https://mydomain/users/app/ 
User-Agent       Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:43.0)     Gecko/20100101 Firefox/43.0

即使在ajax调用中,我明确声明Content-typeapplication/json firefox会添加charset-UTF-8,这会破坏我的API调用,因为API仅支持application/json

如何让firefox不改变Content-Type?这只发生在POST,PUT。

感谢任何建议或帮助。

1 个答案:

答案 0 :(得分:1)

昆汀的答案是正确的:

  

你应该真正修复API。在2016年,它应该能够应对内容类型的参数。

我们今天遇到了同样的问题,并通过更改API解决了这个问题:我们检查内容类型是否正确,而不是检查内容类型是否等于&#39> application / json' 包含该字符串。

特定代码是特定于语言的,但对于Python(使用Falcon REST框架),则需要更换

if req.content_type == 'application/json':

if 'application/json' in req.content_type: