REST API에 게시하려는 jQuery를 실행하는 아주 간단한 HTML 페이지가 있습니다. 여기 내 코드가있다.jQuery.AJAX는 POST 대신 GET을 사용합니다.
<script type="text/javascript" language="javascript">
var user = 'someuser';
var pass = 'somepassword';
var payload = {
"value1": "first value",
"value2": "second value"
};
var rootUrl = 'http://someinternalserver:8888/api/Method';
</script>
<script language="javascript" type="text/javascript" id="postWtnBlock">
function postValue_Go() {
$.ajax({
url: rootUrl,
// Removing the next line or changing the value to 'JSON' results in an OPTIONS request.
dataType: 'JSONP',
data: JSON.stringify(payload),
method: 'POST',
user: user,
password: pass,
beforeSend: function (req) {
req.setRequestHeader('Authorization', 'BASIC ' + btoa(user + ':' + pass));
},
success: function (data) {
alert(data);
},
error: function (xhr) {
alert(xhr.status + ' ' + xhr.statusText);
}
});
}
</script>
두 가지 일이 여기 일어나고 있습니다.
1) 모든 요청이 POST가 아닌 GET 요청으로 전송됩니다. 2) 권한 부여 헤더는 요청에 절대 적용되지 않습니다. 그것은 항상 빠져 있습니다.
왜 이런지 모르겠습니다.
# 1 업데이트 :
POST http://someinternalserver:8888/api/Method/ HTTP/1.1
Host: someinternalserver:8888
Connection: keep-alive
Content-Length: 693
Accept: */*
Origin: http://devserver
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://devserver/samples/ExternalAPI/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: someCookieValue=Boo; someOtherCookieValue=Yum;
{"value1": "first value","value2": "second value"}
그리고 원시 응답 : 새로운 postValue_Go()는 다음과 같습니다 ...
function postValue_Go() {
$.ajax({
url: rootUrl,
data: JSON.stringify(payload),
method: 'POST',
username: user,
password: pass,
xhrFields: {
withCredentials: true
},
success: function (data) {
alert(data);
},
error: function (xhr) {
alert(xhr.status + ' ' + xhr.statusText);
}
});
}
다음은 원시 피들러에서 캡처 요청,의
, 그 역시 Fiddler에서 잡혔습니다.HTTP/1.1 401 Unauthorized
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 19 Aug 2016 17:12:29 GMT
Content-Length: 61
{"Message":"Authorization has been denied for this request."}
이 api return jsonp입니까? 왜 [http://stackoverflow.com/questions/7613815/callback-function-for-jsonp-with-jquery-ajax](jsonp 콜백)]을 추가하지 않았습니까? network-> xhr 화면을 공유 할 수 있습니까? –
데이터 타입을'JSONP'에서'JSON'으로 바꾸면 질문은 OPTIONS 요청이됩니다. – amber
JSONP는 GET 요청이므로 JSONP가 작동하는 방식입니다. – epascarello