2014-03-30 7 views
0

파이썬을 사용하여 간단한 http 웹 서버를 작성했지만 연결하면 html 페이지가 브라우저 창에 나타나지만 크롬의 표시기가 나타납니다 탭이 계속 회전하며 서버는 빈 문자열을받습니다. 이것은 'X'를 클릭하여 페이지 로딩을 중지 할 때까지 계속됩니다. 누군가가 왜 이런 일이 일어나고 있는지 그리고 어떻게 해결할 수 있는지 설명해주십시오. 또한 HTTP 헤더가 잘못되었거나 중요한 헤더가 누락 된 경우 알려주십시오. http 헤더와 명령에 대한 정보를 찾는 것이 매우 어렵다는 것을 알게되었습니다.파이썬 웹 서버에 연결할 때 무한하게로드되는 페이지

코드 here을 찾으십시오.

Link to image of network tab

콘솔 출력 :

소켓이 작성
바운드 소켓
소켓 지금 127.0.0.1:55147Received 데이터와 연결 127.0.0.1:55146
와 연결
을 듣고 : GET/HTTP /1.1
호스트 : 로컬 호스트
연결 : 연결 유지
수락 : text/htm x = 0.9, image/webp, /, q = 0 .8
사용자 에이전트 : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, 게코) 크롬/33.0.1750.154 사파리 /와 같은 537.36
DNT : 1
수락 - 인코딩 : gzip을, 폐, SDCH
수락 - 언어 : EN-GB, EN-US; Q = 0.8, 욕실, Q = 0.6



구문 분석 HTTP 버전 명령
클라이언트 요청 디렉토리 /index.html이를 GET 1.1
HTML
/index.html이

응답 헤더 :


HTTP/1.1 200 OK
Content-Type : text/html; 문자셋 = UTF-8
서버 : 최대의 파이썬 웹 서버/1.0
캐시 제어 : 최대 사용 기간 = 600,


공공 127.0.0.1:55148
수신 데이터 연결 :
수신 데이터 :
수신 데이터 :
수신 데이터 :

+1

당신의 수수께끼에서 모든 들여 쓰기가 빠지지 않습니까? 들여 쓰기가없는 파이썬 코드는 읽을 수 없습니다.) –

+0

브라우저의 개발 도구의 네트워크 탭에는 어떤 내용이 있습니까? – lmc

+0

@vp_arth 죄송합니다. 이전에 사용한 웹 사이트에서 들여 쓰기가 제거되었음을 몰랐습니다. 들여 쓰기를 유지하고 구문 강조가있는 다른 웹 사이트에 대한 새 링크를 추가했습니다. – icedvariables

답변

1

당신의 잘못이 어떻게 당신은 소켓에 대해 생각 :

socket.recv가 영원히 기다릴 것 클라이언트의 데이터

여기에 루프가 필요하지 않습니다.
그러나 귀하의 요청은 recv param으로 제한됩니다.
그러나 모든 크기 요청을 허용하려면
사양으로 데이터 끝을 감지해야합니다.

예를 들어, 머리글 만 대기하면 두 줄 넘김은 끝나는 것입니다.
신체의 크기 (예 : POST 방법)는 내가 알고있는 것처럼 Content-length 헤더와 함께 전달되어야합니다.

문제는 다음 질문과 동일합니다. link
올바른 HTTP 서버를 만들고 싶다면 HTTP 사양에 대한 google을 참조하십시오.

관련 문제