Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$http.jsonp无法按预期工作-始终返回401错误_Json_Angularjs_Http Status Code 404_Http Get_Http Status Code 401 - Fatal编程技术网

$http.jsonp无法按预期工作-始终返回401错误

$http.jsonp无法按预期工作-始终返回401错误,json,angularjs,http-status-code-404,http-get,http-status-code-401,Json,Angularjs,Http Status Code 404,Http Get,Http Status Code 401,我试图使用$http.jsonp从服务器获取json格式的字符串,但它总是报告404错误。当我使用Fidder截取它时,我发现它报告401错误 同时,当我使用$http.get时,我发现它工作正常 我不明白为什么它报告401错误,但在使用相同授权信息的$http.get时返回OK 为什么$http.jsonp总是返回401错误,而$http.get即使使用相同的客户头也可以正常工作?在使用jsonp时,您不能发送像授权头这样的自定义头。如果目标web服务支持JSONP,那么它应该有一些其他方式来

我试图使用$http.jsonp从服务器获取json格式的字符串,但它总是报告404错误。当我使用Fidder截取它时,我发现它报告401错误

同时,当我使用$http.get时,我发现它工作正常

我不明白为什么它报告401错误,但在使用相同授权信息的$http.get时返回OK


为什么$http.jsonp总是返回401错误,而$http.get即使使用相同的客户头也可以正常工作?

在使用jsonp时,您不能发送像授权头这样的自定义头。如果目标web服务支持JSONP,那么它应该有一些其他方式来进行身份验证,而不是通过头进行身份验证。该方法将特定于该服务

除非由于目标服务不支持或者您需要支持不支持CORS的旧浏览器,否则您应该更倾向于不使用JSONP


如果存在问题,克服CORS限制的最佳方法是在服务器上构建一个代理,用适当的头调用目标服务器。这样,您的web客户端可以不受任何限制地访问您的服务器,您的服务器可以不受任何限制地访问远程API。

我认为当您只需要跨域访问时,Jsonp是很好的。 兵团似乎没有什么简单的跨域开销。 为了确保Jsonp工作,您需要从服务器端发回JSON_回调。 您将从服务器发送json回调函数,而不是简单的json响应

您的服务器响应应该类似于angular.callbacks.\u 0{jsonResponseData}。在服务器代码中,您不需要发送jsonResponseData,而是创建一个ResponseBasic串接字符串作为响应。服务器代码大致如下:

var stringForResponse = new StringBuilder();
                stringForResponse.Append(callbackFunctionName);
                stringForResponse.Append("(");
                stringForResponse.Append(jsonResponseData);
                stringForResponse.Append(")");
                toString = stringForResponse.ToString();

你想问的问题是什么?杰森正确地理解了我的问题。我的问题是为什么$http.jsonp总是返回401错误,但是$http.get即使使用相同的客户头也可以正常工作。非常感谢,这是我以前不知道的。我只是想使用JsonP绕过CORS的限制。我在web上搜索过,有人说JsonP是一种简单的方法,不需要在服务器端进行任何更改。这根本不是真的,目标web服务必须通过实现回调参数来显式支持JsonP,如果没有其他支持的话,在更深的情况下,通过解决身份验证问题。绕过CORS限制的最佳方法是在您的服务器上构建一个代理,使用适当的头调用目标服务器。这样,您的web客户端可以不受任何限制地访问您的服务器,您的服务器也可以不受任何限制地访问远程API。Pramod,感谢您的评论。看完你的话,我现在有点困惑。那么在我的情况下我能做些什么呢?非常感谢您提供一个示例。在您的浏览器中,响应应该类似于angular.callbacks。_0{jsonResponseObject}。因此,在服务器代码中,您不需要发送jsonResponseObject,而是创建一个ResponseBasic串接字符串作为响应。
var stringForResponse = new StringBuilder();
                stringForResponse.Append(callbackFunctionName);
                stringForResponse.Append("(");
                stringForResponse.Append(jsonResponseData);
                stringForResponse.Append(")");
                toString = stringForResponse.ToString();