2009-03-05 5 views
4

모든 단일 URL에 GET 요청을 보낼 필요없이 잠재적으로 큰 URL 목록 (> 1000000)의 가용성을 확인하는 방법이 있는지 확인하려고합니다.URL의 유효성을 확인하는 데 안전한 가정이 있습니까?

http://www.example.com에 액세스 할 수 없거나 (서버에 연결할 수 없거나 도메인에 대한 DNS 요청이 실패하는 경우) 4XX 또는 5XX 응답을 받으면 해당 도메인의 모든 항목에 액세스 할 수 없다고 가정하는 것이 안전합니까? (예 : http://www.example.com/some/path/to/a/resource/named/whatever.jpg)? 302 번째 응답 (whatever.jpg)이 첫 번째 가정을 무효화하기에 충분할 것입니까? 나는 하위 도메인이 http://subdomain.example.comhttp://www.example.com 같은 주소로 지정되지 않을 수 있다고 생각해야한다고 생각하십니까?

내가 생각해내는 바로 가기마다 카운터 예제를 생각할 수있는 것 같습니다. 방금 총알을 물고 모든 URL에 GET 요청을 보내야합니까?

답변

7

불행히도 4xx 또는 5xx 또는 다른 코드에서 아무 것도 추론 할 수 없습니다.

해당 코드는 서버가 아닌 개별 페이지 용입니다. 한 페이지가 다운되고 다른 페이지가 작동 중이거나 한 페이지에 500 개의 서버 측 오류가 있고 다른 하나는 그렇지 않을 수도 있습니다.

GET 대신 HEAD을 사용할 수 있습니다. 그러면 페이지의 MIME 헤더가 검색되지만 페이지 내용은 검색되지 않습니다. 이렇게하면 (페이지를 렌더링 할 필요가 없기 때문에) 서버 측에서 시간을 절약 할 수 있고 콘텐츠를 버퍼링 한 다음 삭제할 필요가 없으므로 스스로 시간을 절약 할 수 있습니다.

또한 keep-alive을 사용하여 동일한 서버의 응답 속도를 높이는 것이 좋습니다. 많은 HTTP 클라이언트 라이브러리가이를 처리합니다.

1

URL을 사용할 수 있는지에 대한 유일한 가정은 "URL을 가져올 수 있고 실패 할 것"입니다.

상위 도메인 요청이 실패 할 때 하위 도메인 요청이 실패한다고 가정하는 것은 안전하지 않습니다. 즉, 두 가지 요청 사이에 네트워크 연결이 끊어 지거나 일반적으로 잘못 될 수 있기 때문입니다. 요청간에 도메인을 변경할 수도 있습니다.

모든 인터넷 연결 문제가 무시됩니다. 끊임없이 변할 수있는 라이브 웹 사이트를 여전히 다루고 있습니다. 지금 사실이라면 5 분 안에 페이지 구조를 변경하거나 특정 페이지를 표시하는 방식을 변경하려고 할 때 사실이 아닐 수도 있습니다. 최선의 방법은 모든 실패가 실패 할 것이라고 가정하는 것입니다.

이것은 극단적 인 관점처럼 보일 수 있습니다. 그러나 이러한 이벤트는 일이입니다. 어떻게 처리하면 프로그램의 견고성이 결정됩니다.

0

서버에 대한 연결이 실제로 실패하면 해당 서버에서 URL을 확인할 이유가 없습니다. 그렇지 않으면 아무것도 취할 수 없습니다.

3

호스트 (예 : www.example.com)의 DNS 검색에 실패하면 해당 호스트의 모든 URL을 무효화 할 수 있습니다. 하위 도메인이나 다른 호스트는 별도로 확인해야합니다.

4xx 코드는 특정 페이지를 사용할 수 없다고 말할 수도 있지만 다른 페이지에 대해서는 어떤 가정도 할 수 없습니다.

5xx 코드는 실제로 아무 것도 말하지 않습니다. 예를 들어 페이지가 있지만 서버가 너무 바빠서 그럴 수는 있습니다. 나중에 다시 시도해도 문제가 없습니다.

1

처음에는 하나의 페이지가 잘못되어 있다고 가정하지 마십시오. IIS가 정적 콘텐츠를 계속 제공하지만 동적 콘텐츠를 제공 할 수없는 많은 경우를 보았습니다.

각 호스트 이름을 고유하게 처리하면 subdomain.example.com을 가정 할 수 없으며 example.com은 동일한 IP를 가리 킵니다. 또는 그들이 할지라도 동일한 사이트 인 아무런 보증이 없습니다. IIS에는 단일 IP 주소를 사용하여 여러 사이트를 실행할 수있는 호스트 헤더가 있습니다.

0

다른 사람들이 말하는 것 외에도 GET 요청 대신 HEAD 요청을 사용하십시오. 그것들은 동일하게 기능하지만 응답에는 메시지 본문이 포함되지 않으므로 모든 사람이 대역폭을 절약 할 수 있습니다.

관련 문제