2014-12-15 2 views
2

나는 django-allauth로 작업하는 장고 응용 프로그램을 가지고있다.C# AJAX 요청이 HTTP에서 작동하고 HTTPS로 실패하는 이유는 무엇입니까?

또한 프로덕션 환경에서 HTTPS를 사용하여 배포했습니다.

'/ accounts/login /'에 POST를 사용하여 로그인하기 위해 HTTPS 사이트를 가리키는 웹 브라우저의 AJAX 쿼리가 JSON을 예상대로 되돌립니다.

문제는 내 C# 모바일 코드 (Xamarin 기반)에 있습니다. 기본 주소로 사용되는 'URI는'내 개발 서버에 HTTP 및 지점을 때

_client = new HttpClient(handler) {BaseAddress = uri}; 
_client.DefaultRequestHeaders.Add("X_REQUESTED_WITH", "XMLHttpRequest"); 

는 모든 작동합니다, 나는 다시 응답 JSON을 얻을.

그러나 uri가 내 https 사이트 (nginx 및 gunicorn 뒤에 있음)를 가리키면 HTML 응답이 반환됩니다.

왜 이런 일이 발생하는지 알 수 없습니다. 누구든지 아이디어가있어?

+0

웹 서비스에서 HTML 응답을 받으면 어떤 종류의 오류가 발생했음을 나타내는 경우가 많습니다. HTML의 내용은 무엇입니까? –

답변

5

확인, 마침내 대답을 찾았습니다. 그리고 소년은 좋은 점이다.

https://serverfault.com/questions/508524/preserve-http-headers-from-django-using-nginx-and-gunicorn이 흥미로운 nginx 설정을 말했습니다.

underderscores_in_headers on; 기본적으로

, nginx를 블록 여기에 언급 한 바와 같이, 그들에 밑줄이있는 모든 헤더 : "왜 작업 웹 브라우저의 요청하지만 내 C# 클라이언트입니까?"

http://wiki.nginx.org/Pitfalls 날 궁금했고, 답 미묘하다.

Chromium 개발자 네트워크 탭에서 브라우저에서 보낸 헤더가 "X-Requested-With"인 것으로 나타났습니다. 이것은 nginx (나는 생각한다)에 의해 "HTTP_X_REQUESTED_WITH"proxy_pass 부분에 맵핑되었는데, 바로 django가 찾고있는 부분입니다.

나는 C# 코드에서 한 가지 변화를 일으켰다.

_client.DefaultRequestHeaders.Add("X_REQUESTED_WITH", "XMLHttpRequest"); 

_client.DefaultRequestHeaders.Add("X-REQUESTED-WITH", "XMLHttpRequest"); 

에 그리고 일을 시작 : 나는이 변경되었습니다.

이 문제가 발생하는 사용자를 위해 앞으로도 계속되기를 바랍니다.

+0

아주 좋은 답변이므로 오랫동안 이곳에 머무를 것이라고 확신합니다. – t3chb0t