2017-11-16 9 views
0

HTTP 클라이언트 (임베디드 장치 용)를 만들고 있는데, 궁금 해서요. HTTP 3xx 응답이 수신되면 위치 헤더에 다른 호스트 이름이 나타납니다. 내가 요청한 것 중 하나. TCP 연결을 끊고 새 호스트에 다시 연결해야합니까, 아니면 새 호스트 헤더로 새 요청을 보내고 이전 TCP 연결을 유지해야할까요? 고맙습니다.다른 호스트로 HTTP 리다이렉트 (3xx)

답변

0

다른 곳으로 리디렉션되는 경우 원본 TCP 연결을 다시 사용하는 것이 좋습니다. 내 웹 서버가 example.com 만 호스트하고 elsewhere.net으로 리디렉션하면 내 웹 서버는 아마도 elsewhere.net에 대한 요청에 응답하지 않습니다.

내 서버가 http://bank.com으로 리디렉션하고 bank.com에 요청을 보낼 때 동일한 TCP 연결을 재사용하면 중대한 공격자가 될 수 있습니다. 내 서버는 Host: bank.com과 같은 요청에 악의적으로 응답 할 수 있습니다.

동일한 프로토콜을 사용하는 동일한 호스트로 리디렉션되지 않는 한 원래 연결을 다시 사용할 수 있다고 가정 할 수 없습니다.

지속적인 HTTP 연결은 클라이언트/서버 조합의 수에 따라 조금 까다 롭습니다. 당신은 시간 폐쇄을 낭비하고 각 연결을 재 구축하여 복잡성을 피할 수 있습니다 : 당신은 HTTP/1.0 클라이언트를 구현하는 경우

  • , Connection: keep-alive 당신이 구현해야 할 일이 아니다. 호환되는 서버는 영구 연결을 지원하는지 협상하지 않으면 모든 요청 후에 연결을 닫아야합니다.

  • HTTP/1.1 클라이언트를 구현 중이고 연결을 유지하지 않으려면 Connection: close에 요청을 보내면 HTTP/1.1 서버가 연결을 닫아야합니다.

+0

예를 들어 GET 요청을 HTTP://www.google.com/에 보내려고하면 상태 코드 302와 위치 헤더가 HTTP://www.google.de/로 응답합니다. . TCP 연결을 끊고 google.de에 다시 연결해야합니까? 그런 다음 새로운 요청을 보내시겠습니까? –

+0

@A.Boy : 예. 너는 어떤 다른 일을 할 수 있니? – Blender

+0

모르겠다. 두 URL 뒤에있는 서버가 같을 수도있다. 그렇지 않습니까? –