以下是我对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-type
为application/json
firefox会添加charset-UTF-8
,这会破坏我的API调用,因为API仅支持application/json
。
如何让firefox不改变Content-Type?这只发生在POST,PUT。
感谢任何建议或帮助。
答案 0 :(得分:1)
昆汀的答案是正确的:
你应该真正修复API。在2016年,它应该能够应对内容类型的参数。
我们今天遇到了同样的问题,并通过更改API解决了这个问题:我们检查内容类型是否正确,而不是检查内容类型是否等于&#39> application / json' 包含该字符串。
特定代码是特定于语言的,但对于Python(使用Falcon REST框架),则需要更换
if req.content_type == 'application/json':
与
if 'application/json' in req.content_type: