2014-10-23 4 views
1

HTTP 요청 또는 응답의 헤더에서 헤더 키는 서버 간의 대소 문자면에서 일정합니다. 것이다 HTTP 요청 응답 헤더 그래머

for hdr in header.keys(): 
    if 'content-length' == hdr.lower(): 
     recv_more_data(header[hdr]) # header[hdr] == Content-Length (5388) bytes 
     break # Exit for loop when if statement is met. 

코드 내가

recv_more_data (header['Content-Length'])  
# I know to expect 'Content-Length' not 'content-Length' or some other variation 

의미를 사용하고자하는

안전 정밀 파이썬 코드 (가짜 함수 이름을 사용) :

나는 내 코드에서 예상 할 수 있도록 요청 서버는 그런 키를 가진 헤더를 반환합니다.

표준 요청

GET/HTTP/1.1 
Host: www.example-host.com 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 
Accept: */* 
Accept-Language: en-US 
Accept-Encoding: gzip 
Connection: closed 
Content-Length: 0 

나쁜 그러나 가능한 응답?

HTTP/1.1 200 OK 
Server: nginx/1.0.15 
date: Thu, 23 Oct 2014 00:25:37 GMT 
content-Type: text/html; charset=iso-8859-1 
transfer-encoding: chunked 
Connection: close 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Encoding: gzip 

명확함이 내 코드의 깔끔함에 도움이 될 것입니다.

답변

2

HTTP 헤더 이름은 이며 HTTP 사양에 따라입니다.

RFC 2616 - 하이퍼 텍스트 전송 프로토콜 - HTTP/1.1
Section 4.2 - 메시지는 일반적으로 헤더 (섹션 4.5)을 포함

HTTP 헤더 필드, 요청 헤더 (5.3 절) 헤더, 응답 (섹션 6.2) 및 엔티티 헤더 (섹션 7.1) 필드는 RFC 822 [9]의 3.1 절에 주어진 과 동일한 일반 형식을 따릅니다. 각 헤더 필드는 콜론 (":")과 필드 값 다음에 오는 이름으로 구성됩니다. 필드 이름이 인 경우 대/소문자를 구분하지 않습니다. 필드 값은 LWS의 임의의 숫자 앞에 올 수 있지만, 단일 SP가 선호됩니다. 헤더 필드는 을 각 행의 앞에 추가하여 하나 이상의 SP 또는 HT로 여러 행으로 확장 할 수 있습니다. 응용 프로그램은 이 일반 양식을 벗어나는 어떤 구현을 수용하지 못하기 때문에 에 HTTP 구성을 생성 할 때 이 알려져 있거나 표시된 "일반 양식"을 따라야합니다.

RFC 7230 - 하이퍼 텍스트 전송 프로토콜 (HTTP/1.1) : 메시지 구문 및 라우팅
Section 3.2 - 헤더 필드 :

각 헤더 필드는 대소 문자를 구분 필드 이름으로 구성

는는 을 따라 콜론 (":"), 선택적인 선행 공백, 필드 값 및 공백 문자 ( ).

+0

좋아, 아주 좋아. 나는 서버가 항상 대소 문자를 구분하는 부분을 처리한다고 가정하고 있었다. 지금까지 내가 조사한 헤더가 그런 경우가되어야한다. 그래서 내가 궁금해서. Thanks Remy – Crispy

+0

편집이 훨씬 더 효과적입니다. 내 머리글 파싱 공간을 가진 첫 번째 콜론 기대 : '단지 콜론': ' – Crispy

+0

레미, 당신이 대답하는 경우 하나 더 질문. 요청을 보낼 때 '표준'방식으로 보내야한다고 생각합니까 아니면 소문자로 모두 보내면됩니까? 'RFC'에 따르지 않고 적절한 웹 상호 작용을 위해서? – Crispy

1

대다수 주요 서버의 대소 문자가 일관 되더라도 모든 Joe PHP 개발자는 코드에 수동으로 응답 헤더를 설정할 수 있으며 대문자 사용 표준을 사용하는 사람을 경찰으로 알릴 방법이 없습니다.

+0

네, 이건 내 불편했습니다. 내 코드가 "Joe PHP Devolper"서면 사이트와 이야기 할 때. – Crispy

1

HTTP 헤더 이름은 대소 문자를 구분하지 않습니다.

파이썬을 사용하고있는 것 같습니다. requests 라이브러리를 확인하십시오. 그것은 당신의 삶을 많이 만들 것입니다

+0

예. 모듈을 잘 압니다. 나는 애플리케이션 프로그래밍이 아닌 네트워크 프로그래밍에 대한 이해를 높이기 위해 휠을 다시 고안했습니다. – Crispy