[JQUERY] jQuery를 $ 아약스 (), $ .post 파이어 폭스에서 REQUEST_METHOD로 "옵션"을 전송
JQUERYjQuery를 $ 아약스 (), $ .post 파이어 폭스에서 REQUEST_METHOD로 "옵션"을 전송
해결법
-
1.오류의 원인은 같은 기원 정책입니다. 그것은 단지 당신이 당신의 자신의 도메인에 대한 XMLHttpRequests를 수행 할 수 있습니다. 당신이 JSONP 콜백을 대신 사용할 수 있는지 확인 :
오류의 원인은 같은 기원 정책입니다. 그것은 단지 당신이 당신의 자신의 도메인에 대한 XMLHttpRequests를 수행 할 수 있습니다. 당신이 JSONP 콜백을 대신 사용할 수 있는지 확인 :
$.getJSON( 'http://<url>/api.php?callback=?', function ( data ) { alert ( data ); } );
-
2.나는 OPTIONS 요청 해석하고 필요한 액세스 제어 헤더를 설정하는 장고 측에 다음 코드를 사용했다. 이 후 파이어 폭스에서 내 크로스 도메인 요청 작업을 시작했다. 전에 말했듯이, 브라우저는 첫 번째 옵션은 POST 그 / GET 후 즉시 다음 요청 및 전송
나는 OPTIONS 요청 해석하고 필요한 액세스 제어 헤더를 설정하는 장고 측에 다음 코드를 사용했다. 이 후 파이어 폭스에서 내 크로스 도메인 요청 작업을 시작했다. 전에 말했듯이, 브라우저는 첫 번째 옵션은 POST 그 / GET 후 즉시 다음 요청 및 전송
def send_data(request): if request.method == "OPTIONS": response = HttpResponse() response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS' response['Access-Control-Max-Age'] = 1000 # note that '*' is not valid for Access-Control-Allow-Headers response['Access-Control-Allow-Headers'] = 'origin, x-csrftoken, content-type, accept' return response if request.method == "POST": # ...
편집 : 어떤 경우에는 적어도 당신은 또한 실제 응답에 동일한 액세스 제어 헤더를 추가해야 할 것 같다. 이 요청이 성공하는 것 때문에 조금 혼란 스러울 수 있지만, 파이어 폭스는 자바 스크립트에 대한 응답의 내용을 전달하지 않습니다.
-
3.이 모질라 개발자 센터 기사는 다양한 크로스 도메인 요청 시나리오에 대해 설명합니다. 이 기사는 '응용 프로그램 / x-www-form-urlencoded를'의 콘텐츠 형식과 POST 요청 (NO '프리 플라이트'OPTIONS 요청)는 '간단한 요청'으로 전송되어야 함을 나타내는 것으로 보인다. 파이어 폭스는 OPTIONS 요청 보낸 내 POST가 해당 콘텐츠 형식으로 보내졌다하더라도, 그러나 발견했다.
이 모질라 개발자 센터 기사는 다양한 크로스 도메인 요청 시나리오에 대해 설명합니다. 이 기사는 '응용 프로그램 / x-www-form-urlencoded를'의 콘텐츠 형식과 POST 요청 (NO '프리 플라이트'OPTIONS 요청)는 '간단한 요청'으로 전송되어야 함을 나타내는 것으로 보인다. 파이어 폭스는 OPTIONS 요청 보낸 내 POST가 해당 콘텐츠 형식으로 보내졌다하더라도, 그러나 발견했다.
나는 옵션은 '*'에 '액세스 제어 - 허용 - 원산지'응답 헤더를 설정 서버에 핸들러를 요청 작성하여이 작업을 할 수 있었다. 당신은 'http://someurl.com'처럼 뭔가 특정로 설정하여보다 제한 될 수 있습니다. 또한, 나는 가정, 여러 기원의 쉼표로 구분 된 목록을 지정할 수 있습니다 읽었습니다,하지만 난 일이를 가져올 수 없습니다.
파이어 폭스 OPTIONS에 응답이 허용 '액세스 제어 - 허용 출처'값을 요청 받으면, 상기 POST 요청을 보낸다.
-
4.나는 완전히-아파치 기반 솔루션을 사용하여이 문제를 해결했습니다. 내 가상 호스트 / htaccess로에서 나는 다음과 같은 블록을 넣어 :
나는 완전히-아파치 기반 솔루션을 사용하여이 문제를 해결했습니다. 내 가상 호스트 / htaccess로에서 나는 다음과 같은 블록을 넣어 :
# enable cross domain access control Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS" # force apache to return 200 without executing my scripts RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule .* / [R=200,L]
당신은 아파치가 대상 스크립트를 실행하면 어떻게되는지에 따라, 후반이 필요하지 않을 수 있습니다. 신용 후반의 친절에 Serverfault 민속로 이동합니다.
-
5.응답 스크립트의 상단이 PHP가 작동하는 것 같다. (파이어 폭스 3.6.11으로. 아직 테스트의 많은 일을하지 않았습니다.)
응답 스크립트의 상단이 PHP가 작동하는 것 같다. (파이어 폭스 3.6.11으로. 아직 테스트의 많은 일을하지 않았습니다.)
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); header('Access-Control-Max-Age: 1000'); if(array_key_exists('HTTP_ACCESS_CONTROL_REQUEST_HEADERS', $_SERVER)) { header('Access-Control-Allow-Headers: ' . $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']); } else { header('Access-Control-Allow-Headers: *'); } if("OPTIONS" == $_SERVER['REQUEST_METHOD']) { exit(0); }
-
6."JSONP"dataType와 사용 데이터 유형에 대한 - 나는지도를 Google에 요청을 전송과 같은 문제가 있고, 해결책은 jQuery를 1.5 매우 간단합니다
"JSONP"dataType와 사용 데이터 유형에 대한 - 나는지도를 Google에 요청을 전송과 같은 문제가 있고, 해결책은 jQuery를 1.5 매우 간단합니다
-
7.범죄자 OPTIONS 방법을 사용하여 요청을 인 플라이트
범죄자 OPTIONS 방법을 사용하여 요청을 인 플라이트
(GET 이외의 방법, 또는 특정 MIME 유형과 POST 사용을 위해 HTTP를 위해, 특히) 사용자 데이터에 부작용을 일으킬 수 HTTP 요청 방법, 브라우저 "프리 플라이트"요청의에서 방법을 지원 유혹하는 사양 의무에 대한 실제 HTTP 요청 방법 실제 요청을 보내는 서버에서 "승인"에 따라 다음의 HTTP OPTIONS 요청 방법 및와 서버.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS : 웹 참조 사양
내가 Nginx에의 conf에 다음 행을 추가하여 문제를 해결.
location / { if ($request_method = OPTIONS ) { add_header Access-Control-Allow-Origin "*"; add_header Access-Control-Allow-Methods "POST, GET, PUT, UPDATE, DELETE, OPTIONS"; add_header Access-Control-Allow-Headers "Authorization"; add_header Access-Control-Allow-Credentials "true"; add_header Content-Length 0; add_header Content-Type text/plain; return 200; } location ~ ^/(xxxx)$ { if ($request_method = OPTIONS) { rewrite ^(.*)$ / last; } }
-
8.JSONP를 사용할 때 소스 1.3.2를 통해보고 된, 요청은 브라우저 같은 도메인 정책이 바뀌지하는 동적으로 SCRIPT 요소를 구축하여 이루어진다. 당연히, 당신이 SCRIPT 요소를 사용하여 POST 요청을 할 수 없습니다, 브라우저는 GET을 사용하여 결과를 가져올 것입니다.
JSONP를 사용할 때 소스 1.3.2를 통해보고 된, 요청은 브라우저 같은 도메인 정책이 바뀌지하는 동적으로 SCRIPT 요소를 구축하여 이루어진다. 당연히, 당신이 SCRIPT 요소를 사용하여 POST 요청을 할 수 없습니다, 브라우저는 GET을 사용하여 결과를 가져올 것입니다.
당신이 JSONP 호출을 요청하는 것처럼, SCRIPT 요소는 AJAX 호출의 유형이 GET으로 설정된 경우에만이 작업을 수행하기 때문에, 생성되지 않습니다.
http://dev.jquery.com/ticket/4690
-
9.우리는 ASP.Net이 같은 문제가 있었다. JQuery와 $는 PageHandlerFactory 만, HEAD, POST, DEBUG 동사를 GET 응답에 제한되었다 때문에 약간의 HTML 콘텐츠를 얻을 수 .post 실행하려고 할 때 우리의 IIS는 내부 서버 오류를 반환했습니다. 당신이 목록에 동사 "옵션"을 추가하거나 선택이 제한을 변경할 수 있도록 "모든 동사"
우리는 ASP.Net이 같은 문제가 있었다. JQuery와 $는 PageHandlerFactory 만, HEAD, POST, DEBUG 동사를 GET 응답에 제한되었다 때문에 약간의 HTML 콘텐츠를 얻을 수 .post 실행하려고 할 때 우리의 IIS는 내부 서버 오류를 반환했습니다. 당신이 목록에 동사 "옵션"을 추가하거나 선택이 제한을 변경할 수 있도록 "모든 동사"
당신은 당신의 IIS 관리자에서 다음 처리기 매핑, (우리는 프레임 워크 4.0 통합 응용 프로그램 풀을 사용하는) 당신이 필요로 * .apx 파일에 대한 PageHandlerFactory에서 더블 클릭을 선택, 당신의 웹 사이트를 선택하는 것이 수정할 수 있습니다. 다음 동사의 TaBN으로 이동하여 수정을 적용, 요청 제한을 클릭합니다.
이제 우리의 $ .post 요청은 예상대로 작동 :)
-
10.양식의 액션 URL은 도메인의 www가 일부 포함되어있는 경우는 연 원래의 페이지는 www를 볼 때, 확인하십시오.
양식의 액션 URL은 도메인의 www가 일부 포함되어있는 경우는 연 원래의 페이지는 www를 볼 때, 확인하십시오.
일반적으로 정식 URL에 다 ..
이 기사에 걸림돌 전에 시간 동안 고생과 크로스 도메인의 힌트를 발견했다.
-
11.나는 o.url = 'index.php를'이 파일이 존재하는지 확인하고 콘솔에 성공 메시지를 반환 것으로 보인다. 내가 URL을 사용하는 경우 그것은 오류를 반환합니다 : HTTP : //www.google.com 페이지
나는 o.url = 'index.php를'이 파일이 존재하는지 확인하고 콘솔에 성공 메시지를 반환 것으로 보인다. 내가 URL을 사용하는 경우 그것은 오류를 반환합니다 : HTTP : //www.google.com 페이지
직접 $ .post 방법을 사용하지 않는 이유는 POST 요청을하는 경우 :
$.post("test.php", { func: "getNameAndTime" }, function(data){ alert(data.name); // John console.log(data.time); // 2pm }, "json");
그것은 훨씬 더 간단합니다.
-
12.나는 도메인의 서버 코드는 당신이에 게시하는 제어 경우이 문제를 해결하는 방법의 명확한 예를 기록했다. 이 답변이 스레드에 감동, 그러나 이것은 더 명확하게 IMO을 설명한다.
나는 도메인의 서버 코드는 당신이에 게시하는 제어 경우이 문제를 해결하는 방법의 명확한 예를 기록했다. 이 답변이 스레드에 감동, 그러나 이것은 더 명확하게 IMO을 설명한다.
어떻게 자바 스크립트를 통해 도메인 간 POST 요청을 보내려면 어떻게합니까?
-
13.이에 대한 해결 방법은 다음과 같습니다
이에 대한 해결 방법은 다음과 같습니다
이 페이스 북의 API를 호출에와 파이어 폭스와 함께 일했다. 방화범 대신 위의 조건 (둘 다)와 옵션의 GET을 사용하고 있습니다.
-
14.문제를 회피하는 또 다른 가능성은 프록시 스크립트를 사용하는 것입니다. 그 방법은, 여기에 예를 들어 설명한다
문제를 회피하는 또 다른 가능성은 프록시 스크립트를 사용하는 것입니다. 그 방법은, 여기에 예를 들어 설명한다
-
15.당신은없이 시도 할 수 있습니다
당신은없이 시도 할 수 있습니다
의 contentType : 응용 프로그램 / x-www-form-urlencoded를
-
16.옵션을 추가하십시오 :
옵션을 추가하십시오 :
dataType와 "JSON"
-
17.
function test_success(page,name,id,divname,str) { var dropdownIndex = document.getElementById(name).selectedIndex; var dropdownValue = document.getElementById(name)[dropdownIndex].value; var params='&'+id+'='+dropdownValue+'&'+str; //makerequest_sp(url, params, divid1); $.ajax({ url: page, type: "post", data: params, // callback handler that will be called on success success: function(response, textStatus, jqXHR){ // log a message to the console document.getElementById(divname).innerHTML = response; var retname = 'n_district'; var dropdownIndex = document.getElementById(retname).selectedIndex; var dropdownValue = document.getElementById(retname)[dropdownIndex].value; if(dropdownValue >0) { //alert(dropdownValue); document.getElementById('inputname').value = dropdownValue; } else { document.getElementById('inputname').value = "00"; } return; url2=page2; var params2 = parrams2+'&'; makerequest_sp(url2, params2, divid2); } }); }
-
18.나는 페이스 북의 API를 사용하려고 시도와 비슷한 문제가 있었다.
나는 페이스 북의 API를 사용하려고 시도와 비슷한 문제가 있었다.
Preflighted 요청을 전송하지 않은 유일한 contentType이 여기에 모질라에서 언급 된 매개 변수의 단지 텍스트 / 일반 없습니다 ... 나머지 될 듯
참고 : 상기의 모즈의 문서 그것은 ... X-로리 헤더가 Preflighted 요청을 트리거해야하지 않습니다 제안합니다.
-
19.당신은 서버 측에서 몇 가지 작업을 수행해야합니다. 난 당신이 서버 측에서 PHP를 사용하고 볼 수 있지만 .NET 웹 응용 프로그램을위한 솔루션은 여기에 있습니다 : '응용 프로그램 / JSON'에서 jQuery.ajax에 콘텐츠 형식을 설정할 수 없습니다
당신은 서버 측에서 몇 가지 작업을 수행해야합니다. 난 당신이 서버 측에서 PHP를 사용하고 볼 수 있지만 .NET 웹 응용 프로그램을위한 솔루션은 여기에 있습니다 : '응용 프로그램 / JSON'에서 jQuery.ajax에 콘텐츠 형식을 설정할 수 없습니다
PHP 스크립트에서 동일한 작업을 수행하고 그것은 작동합니다. 간단히 : 같은 종류와 두 번째 요청과 같은 데이터를 송신 할 수있는 경우 첫 번째 요청 브라우저에서 서버에 요청하는 것은 적절한 것입니다 / 허용했다.
-
20.다음을 추가하십시오 :
다음을 추가하십시오 :
dataType: "json", ContentType: "application/json", data: JSON.stringify({"method":"getStates", "program":"EXPLORE"}),
-
21.내가 다른 서버에서 호스팅 내 아파치 SOLR에 데이터를 게시 할 때 비슷한 문제를 해결하기 위해 프록시 URL을 사용했다. (이 완벽한 해답이 될 수 없습니다 그러나 내 문제를 해결합니다.)
내가 다른 서버에서 호스팅 내 아파치 SOLR에 데이터를 게시 할 때 비슷한 문제를 해결하기 위해 프록시 URL을 사용했다. (이 완벽한 해답이 될 수 없습니다 그러나 내 문제를 해결합니다.)
이 URL을 따르 프록시에 모드 - 재 작성을 사용하여, 나는 내 httpd.conf 파일에 다음 행을 추가합니다 :
RewriteRule ^solr/(.*)$ http://ip:8983/solr$1 [P]
따라서, 내가 할 수있는 단지 포스트 데이터 / SOLR http 대신에 데이터를 게시하는 : // IP : 8983 / SOLR / *. 그런 다음 같은 기원에 데이터를 게시됩니다.
-
22.난 이미 PHP를 잘 내 고르 상황을 처리하는 코드를 가지고 :
난 이미 PHP를 잘 내 고르 상황을 처리하는 코드를 가지고 :
header( 'Access-Control-Allow-Origin: '.CMSConfig::ALLOW_DOMAIN ); header( 'Access-Control-Allow-Headers: '.CMSConfig::ALLOW_DOMAIN ); header( 'Access-Control-Allow-Credentials: true' );
그리고 그것은 때 원격 업로드 로컬 및 원격으로 잘 작동하지만,되지 않았습니다.
뭔가 당신이 옵션을 요청할 때 고르 규칙을 내 헤더를 반환하지만 302, 결과적으로 그것을 검색 할 귀찮게하지 않았다, 아파치 / PHP는 또는 내 코드와 함께 발생합니다. 따라서 브라우저가 허용되는 상황으로 인식하지 않습니다.
내가 @ 마크 맥도날드의 답변에 따라, 무슨 짓을, 내 헤더 다음에이 코드를 넣어 :
if( $_SERVER['REQUEST_METHOD'] === 'OPTIONS' ) { header("HTTP/1.1 202 Accepted"); exit; }
옵션을 요청할 때 지금, 그것은 단지 헤더 (202) 결과를 보내드립니다.
-
23.명심하시기 바랍니다:
명심하시기 바랍니다:
JSONP는 오직 GET 요청 방식을 지원합니다.
* 파이어 폭스로 보내기 요청 : *
$.ajax({ type: 'POST',//<<=== contentType: 'application/json', url: url, dataType: "json"//<<============= ... });
옵션의 요청에 보내기 위 (잠시 ==> 유형 : 'POST') !!
$.ajax({ type: 'POST',//<<=== contentType: 'application/json', url: url, dataType: "jsonp"//<<============== ... });
그러나 GET 이상 요청 전송 (== 동안> 유형 : 'POST') !!
당신이 "크로스 도메인 통신", 임금의 관심과에있을 때주의하십시오.
from https://stackoverflow.com/questions/1099787/jquery-ajax-post-sending-options-as-request-method-in-firefox by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 스크롤을 볼 수 있는지 어떻게 확인할 수 있나요? (0) | 2020.10.05 |
---|---|
[JQUERY] 어떻게 jQuery를 사용하여 테이블의 셀 값을 얻으려면? (0) | 2020.10.05 |
[JQUERY] jQuery를 함께 '입력'에서 양식을 제출? (0) | 2020.10.05 |
[JQUERY] === 변수 정의 변수 대 대해서 typeof === "미등록" (0) | 2020.10.05 |
[JQUERY] jQuery를 모든 활성 아약스 요청을 중지 (0) | 2020.10.05 |