>php教程 >PHP开发 >HTTP 프로토콜에 대한 자세한 설명(정말 고전적)

HTTP 프로토콜에 대한 자세한 설명(정말 고전적)

高洛峰
高洛峰원래의
2016-12-12 11:08:071127검색

소개

HTTP는 응용 계층에 속하는 객체 지향 프로토콜로, 간단하고 빠른 방식으로 인해 분산형 하이퍼미디어 정보 시스템에 적합합니다. 1990년에 제안되었으며 수년간의 사용과 개발을 거쳐 지속적으로 개선되고 확장되었습니다. 현재 WWW에서는 HTTP/1.0의 6번째 버전이 사용되고 있습니다. HTTP/1.1의 표준화 작업이 진행 중이며 HTTP-NG(Next Generation of HTTP) 제안이 제시되었습니다.
HTTP 프로토콜의 주요 기능은 다음과 같이 요약됩니다.
1. 클라이언트/서버 모드를 지원합니다.
2. 간단하고 빠릅니다. 클라이언트가 서버에 서비스를 요청할 때 요청 방법과 경로만 전송하면 됩니다. 일반적으로 사용되는 요청 방법은 GET, HEAD 및 POST입니다. 각 방법은 클라이언트와 서버 간의 다양한 연결 유형을 지정합니다. HTTP 프로토콜의 단순성으로 인해 HTTP 서버의 프로그램 크기는 작고 통신 속도는 매우 빠릅니다.
3. 유연성: HTTP는 모든 유형의 데이터 객체 전송을 허용합니다. 전송되는 유형은 Content-Type으로 표시됩니다.
4. 연결 없음: 연결 없음의 의미는 각 연결이 하나의 요청만 처리하도록 제한하는 것입니다. 서버는 클라이언트의 요청을 처리하고 클라이언트의 응답을 받은 후 연결을 끊습니다. 이 방법을 사용하면 전송 시간이 절약됩니다.
5. 상태 비저장: HTTP 프로토콜은 상태 비저장 프로토콜입니다. Stateless는 프로토콜에 트랜잭션 처리를 위한 메모리 기능이 없음을 의미합니다. 상태가 없다는 것은 후속 처리에 이전 정보가 필요한 경우 다시 전송해야 하므로 연결당 전송되는 데이터 양이 증가할 수 있음을 의미합니다. 반면에 서버는 이전 정보가 필요하지 않을 때 더 빠르게 응답합니다.

1. HTTP 프로토콜에 대한 자세한 설명: URL

http(Hypertext Transfer Protocol)는 요청 및 응답 모드를 기반으로 하는 상태 비저장 애플리케이션 계층 프로토콜입니다. HTTP 1.1 버전은 지속적인 연결 메커니즘을 제공합니다. 대부분의 웹 개발은 HTTP 프로토콜을 기반으로 구축된 웹 애플리케이션입니다.

HTTP URL(URL은 리소스를 찾는 데 충분한 정보가 포함된 특수한 유형의 URI입니다)의 형식은 다음과 같습니다.
http://host[":"port][ abs_path]
http는 HTTP 프로토콜을 통해 네트워크 리소스를 찾는 것을 의미합니다. 호스트는 합법적인 인터넷 호스트 도메인 이름 또는 IP 주소를 의미하며, 포트가 비어 있으면 기본 포트 80이 요청된 리소스의 URI를 지정합니다. URL에 abs_path가 제공되지 않은 경우 요청 URI로 사용될 때 "/" 형식으로 제공되어야 합니다. 일반적으로 브라우저가 자동으로 이 작업을 완료합니다.
예:
1. www.guet.edu.cn을 입력하세요
브라우저가 자동으로 http://www.guet.edu.cn/
으로 변환됩니다.2. :8080/index.jsp

2. HTTP 프로토콜에 대한 자세한 설명 - 요청

http 요청은 요청 라인, 메시지 헤더, 그리고 세 부분으로 구성됩니다. 요청 본문

1. 요청 줄은 공백으로 구분된 메서드 기호로 시작하고 그 뒤에 요청된 URI와 프로토콜 버전이 옵니다. 형식은 다음과 같습니다. 메서드 요청-URI HTTP-버전 CRLF
Method는 요청 방법을 나타냅니다. HTTP-Version은 요청된 HTTP 프로토콜 버전을 나타냅니다. CRLF는 캐리지 리턴 및 줄 바꿈을 나타냅니다(후행 CRLF 제외, 별도의 CR 또는 LF 문자는 허용되지 않음).

요청 메소드는 여러 가지가 있습니다(모든 메소드는 대문자임). 각 메소드에 대한 설명은 다음과 같습니다.
GET Request-URI로 식별된 리소스를 얻기 위한 요청
POST 식별된 리소스입니다. by Request-URI 새 데이터 추가
HEAD Request-URI로 식별되는 리소스의 응답 메시지 헤더를 가져오는 요청
PUT 서버에 리소스를 저장하고 Request-URI를 해당 식별자로 사용하도록 요청
DELETE 요청 서버는 요청-URI를 삭제합니다.
TRACE는 서버에 수신된 요청 정보를 다시 보내도록 요청합니다. 이는 주로 테스트 또는 진단에 사용됩니다.
CONNECT는
OPTIONS의 향후 사용을 위해 예약되어 있습니다. 서버의 성능을 조회하거나 리소스와 관련된 옵션 및 요구 사항을 조회하기 위한 요청
적용 예:
GET 방식: 브라우저의 주소 표시줄에 URL을 입력하여 웹 페이지에 접속할 때 브라우저는 다음을 사용합니다. 서버에서 리소스를 얻기 위한 GET 메서드, 예: GET /form.html HTTP/1.1 (CRLF)

POST 메서드는 요청된 서버가 요청에 첨부된 데이터를 수락하도록 요구하며 종종 다음과 같이 사용됩니다. 양식을 제출하세요.
예:POST /reg.jsp HTTP/(CRLF)
수락:image/gif,image/x-xbit,...(CRLF)
...
HOST:www.guet .edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) // 이 CRLF는 메시지 헤더가 끝났음을 나타내며, 그 이전에는 메시지 헤더였습니다.
user=jeffrey&pwd=1234 //다음 줄은 제출된 데이터입니다

HEAD 방식은 거의 동일합니다. HEAD 요청에 대한 GET 메소드 응답 부분의 경우 HTTP 헤더에 포함된 정보는 GET 요청을 통해 얻은 정보와 동일합니다. 이 방법을 사용하면 전체 리소스 내용을 전송하지 않고도 Request-URI로 식별되는 리소스에 대한 정보를 얻을 수 있다. 이 방법은 하이퍼링크의 유효성, 액세스 가능 여부, 최근 업데이트되었는지 여부를 테스트하는 데 자주 사용됩니다.
2. 요청 헤더 설명
3. 요청 본문(생략)

3. HTTP 프로토콜에 대한 자세한 설명이 포함된 응답 장

서버는 요청 메시지를 수신하고 해석한 후 HTTP 응답 메시지를 반환합니다.

HTTP 응답도 상태 줄, 메시지 헤더, 응답 본문의 세 부분으로 구성됩니다.
1 상태 줄의 형식은 다음과 같습니다.
HTTP-버전 상태-코드 이유- Phrase CRLF
그 중 HTTP-Version은 서버 HTTP 프로토콜의 버전을 나타내고, Status-Code는 서버가 보낸 응답 상태 코드를 나타내며, Reason-Phrase는 상태 코드에 대한 텍스트 설명을 나타냅니다.
상태 코드는 세 자리 숫자로 구성되며, 응답 범주를 정의하며 5개의 가능한 값이 있습니다.
1xx: 표시 정보--요청이 수신되었으며 계속 처리되고 있음을 나타냅니다. 2xx: 성공 --요청이 성공적으로 수신되고, 이해되고, 수락되었음을 나타냅니다.
3xx: 리디렉션--요청을 완료하려면 추가 작업을 수행해야 합니다.
4xx: 클라이언트 오류--요청에 구문 오류가 있습니다. 또는 요청을 이행할 수 없습니다
5xx: 서버측 오류-서버가 합법적인 요청을 구현하지 못했습니다
공통 상태 코드, 상태 설명, 지침:
200 OK //클라이언트 요청 성공
400 잘못된 요청 //클라이언트 요청이 유효합니다. 구문 오류가 발생하여 서버에서 이해할 수 없습니다.
401 Unauthorized //요청이 승인되지 않았습니다. 이 상태 코드는 WWW-Authenticate 헤더 필드와 함께 사용해야 합니다.
403 Forbidden //서버가 요청을 받았으나 서비스 제공을 거부했습니다.
404 Not Found //요청한 리소스가 존재하지 않습니다. 예: 잘못된 URL이 입력되었습니다.
500 내부 서버 오류 //예기치 않은 오류가 발생했습니다. 서버
503 서버를 사용할 수 없음 //서버가 현재 클라이언트의 요청을 처리할 수 없습니다. 문단 시간이 지나면 정상으로 돌아올 수 있습니다.
예: HTTP/1.1 200 OK(CRLF)

2. 응답 헤더는 나중에 설명합니다

3. 응답 본문은 서버에서 반환하는 리소스의 내용입니다

4. HTTP 프로토콜 세부 설명 - 메시지 헤더

HTTP 메시지는 클라이언트에서 서버로의 요청과 서버에서 클라이언트로의 응답으로 구성됩니다. 요청 메시지와 응답 메시지 모두 시작 라인(요청 메시지의 경우 시작 라인은 요청 라인, 응답 메시지의 경우 시작 라인은 상태 라인), 메시지 헤더(선택 사항), 빈 라인(CRLF만 해당)으로 구성됩니다. 행), 메시지 본문(선택 사항) 구성.

HTTP 메시지 헤더에는 일반 헤더, 요청 헤더, 응답 헤더 및 엔터티 헤더가 포함됩니다.

각 헤더 필드는 이름 + ":" + 공백 + 값으로 구성됩니다. 메시지 헤더 필드의 이름은 대소문자를 구분하지 않습니다.

1. 일반 헤더

일반 헤더에는 모든 요청 및 응답 메시지에 사용되지만 전송되는 엔터티에는 사용되지 않고 전송되는 메시지에만 사용되는 몇 가지 헤더 필드가 있습니다.
예:
Cache-Control은 캐시 명령을 지정하는 데 사용됩니다. 캐시 명령은 단방향(응답에 나타나는 캐시 명령은 요청에 나타나지 않을 수 있음)이며 독립적입니다(A의 캐시 명령). 메시지는 다른 메시지 처리에 영향을 미치는 캐싱 메커니즘이 아닙니다. HTTP 1.0에서 사용되는 유사한 헤더 필드는 Pragma입니다.
요청 시 캐시 지시문에는 no-cache(요청 또는 응답 메시지를 캐시할 수 없음을 나타내는 데 사용됨), no-store, max-age, max-stale, min-fresh, only-if-cached가 포함됩니다.
응답으로 캐싱 지시어에는 public, private, no-cache, no-store, no-transform, must-revalidate, Proxy-revalidate, max-age, s-maxage가 포함됩니다.
예: IE에 지시하기 위해. 브라우저(클라이언트) 페이지를 캐시하지 않습니다. 서버측 JSP 프로그램은 다음과 같이 작성할 수 있습니다. response.sehHeader("Cache-Control","no-cache");
//response.setHeader("Pragma ","no-cache" ); 함수는 위의 코드와 동일하며 일반적으로 둘 다 // 함께 사용됩니다.
이 코드는 전송된 응답 메시지에 일반 헤더 필드를 설정합니다: Cache-Control:no-cache

날짜 일반 헤더 필드는 메시지가 생성된 날짜와 시간을 나타냅니다.

연결 공통 헤더 필드를 사용하면 연결을 지정하기 위한 옵션을 보낼 수 있습니다. 예를 들어 연결이 계속되도록 지정하거나 "close" 옵션을 지정하여 응답이 완료된 후 연결을 닫도록 서버에 알립니다.

2. 요청 헤더
요청 헤더를 사용하면 클라이언트가 요청에 대한 추가 정보와 클라이언트 자신의 정보를 서버에 전달할 수 있습니다.
일반적으로 사용되는 요청 헤더
수락
수락 요청 헤더 필드는 클라이언트가 수락하는 정보 유형을 지정하는 데 사용됩니다. 예: Accept: image/gif는 클라이언트가 GIF 이미지 형식의 리소스를 허용하기를 원함을 나타냅니다. Accept: text/html은 클라이언트가 html 텍스트를 허용하기를 원한다는 것을 나타냅니다.
Accept-Charset
Accept-Charset 요청 헤더 필드는 클라이언트가 허용하는 문자 집합을 지정하는 데 사용됩니다. 예: Accept-Charset:iso-8859-1, gb2312 이 필드가 요청 메시지에 설정되지 않은 경우 기본값은 모든 문자 집합이 허용되는 것입니다.
Accept-Encoding
Accept-Encoding 요청 헤더 필드는 Accept와 유사하지만 허용되는 콘텐츠 인코딩을 지정하는 데 사용됩니다. 예: Accept-Encoding:gzip.deflate 요청 메시지에 이 도메인이 설정되지 않은 경우 서버는 클라이언트가 다양한 콘텐츠 인코딩을 수락할 수 있다고 가정합니다.
Accept-Language
Accept-Language 요청 헤더 필드는 Accept와 유사하지만 자연어를 지정하는 데 사용됩니다. 예: Accept-Language:zh-cn. 요청 메시지에 이 헤더 필드가 설정되어 있지 않으면 서버는 클라이언트가 다양한 언어를 수락할 수 있다고 가정합니다.
Authorization
Authorization 요청 헤더 필드는 주로 클라이언트가 특정 리소스를 볼 수 있는 권한이 있음을 증명하는 데 사용됩니다. 브라우저가 페이지에 접근하여 서버로부터 401(Unauthorized) 응답 코드를 수신하면 Authorization 요청 헤더 필드가 포함된 요청을 보내 서버에 이를 확인하도록 요청할 수 있습니다.
Host(요청을 보낼 때 이 헤더 필드가 필요함)
Host 요청 헤더 필드는 주로 요청된 리소스의 인터넷 호스트와 포트 번호를 지정하는 데 사용됩니다. 일반적으로 HTTP URL에서 추출됩니다. 🎜>브라우저에 http://www.guet.edu.cn/index.html을 입력합니다.
브라우저에서 보낸 요청 메시지에는 다음과 같은 호스트 요청 헤더 필드가 포함됩니다.
호스트: www .guet.edu.cn
여기에서는 기본 포트 번호 80이 사용됩니다. 포트 번호를 지정하면 호스트: www.guet.edu.cn:포트 번호 지정
User-Agent
온라인 포럼에 로그인하면 운영 체제의 이름과 버전, 사용 중인 브라우저의 이름과 버전이 나열된 환영 메시지가 종종 표시됩니다. 이는 실제로 많은 사람들을 놀라게 합니다. 이 페이지에서 서버 애플리케이션은 User-Agent 요청 헤더 필드에서 이 정보를 얻습니다. User-Agent 요청 헤더 필드를 통해 클라이언트는 서버에 운영 체제, 브라우저 및 기타 속성을 알릴 수 있습니다. 그러나 이 헤더 필드는 필요하지 않습니다. 브라우저를 직접 작성하고 User-Agent 요청 헤더 필드를 사용하지 않으면 서버가 우리 정보를 알 수 없습니다.
요청 헤더 예:
GET /form.html HTTP/1.1(CRLF)
수락:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/ vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*(CRLF)
Accept-Language:zh-cn(CRLF)
Accept-Encoding:gzip,deflate(CRLF)
수정된 이후:수, 2007년 1월 5일 11:21:25 GMT(CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317"(CRLF)
사용자 에이전트:Mozilla /4.0(호환;MSIE6.0;Windows NT 5.0)(CRLF)
호스트:www.guet.edu.cn(CRLF)
연결:Keep-Alive(CRLF)
(CRLF)

3. 응답 헤더

응답 헤더를 사용하면 서버에 대한 정보와 요청에 의해 식별된 리소스에 대한 다음 액세스에 대한 정보뿐만 아니라 상태 줄에 배치할 수 없는 추가 응답 정보를 서버가 전달할 수 있습니다. -URI.
일반적으로 사용되는 응답 헤더
위치
위치 응답 헤더 필드는 수신자를 새 위치로 리디렉션하는 데 사용됩니다. 위치 응답 헤더 필드는 도메인 이름을 변경할 때 자주 사용됩니다.
서버
서버 응답 헤더 필드에는 서버가 요청을 처리하는 데 사용하는 소프트웨어에 대한 정보가 포함됩니다. User-Agent 요청 헤더 필드에 해당합니다. 다음은
서버 응답 헤더 필드의 예입니다.
Server: Apache-Coyote/1.1
WWW-Authenticate
WWW-Authenticate 응답 헤더 필드는 401(승인되지 않음)에 포함되어야 합니다. 응답 메시지 클라이언트가 401 응답 메시지를 수신하고 Authorization 헤더 필드를 보내 서버에 이를 확인하도록 요청하면 서버 응답 헤더에 이 헤더 필드가 포함됩니다.
예: WWW-Authenticate:Basic realm="Basic Auth Test!" //서버가 리소스 요청을 위해 기본 인증 메커니즘을 사용하는 것을 볼 수 있습니다.


4. 엔터티 헤더
요청 메시지와 응답 메시지 모두 엔터티를 전송할 수 있습니다. 엔터티는 엔터티 헤더 필드와 엔터티 본문으로 구성됩니다. 그러나 엔터티 헤더 필드와 엔터티 본문을 함께 보내야 한다는 의미는 아닙니다. 엔터티 헤더는 엔터티 본문(예: 엔터티 본문의 존재 여부)과 요청에 의해 식별되는 리소스에 대한 메타 정보를 정의합니다.
일반적으로 사용되는 엔터티 헤더
Content-Encoding
Content-Encoding 엔터티 헤더 필드는 미디어 유형의 수정자로 사용됩니다. 해당 값은 엔터티 본문에 적용된 추가 콘텐츠의 인코딩을 나타냅니다. 따라서 Content-Type 헤더 필드에서 참조되는 미디어 유형을 얻으려면 해당 디코딩 메커니즘을 사용해야 합니다. Content-Encoding은 문서의 압축 방법을 기록하는 데 사용됩니다. 예: Content-Encoding: gzip
Content-Language
Content-Language 엔터티 헤더 필드는 리소스에서 사용되는 자연 언어를 설명합니다. 이 필드가 설정되지 않으면 엔터티 콘텐츠가 모든 언어
의 독자에게 제공되는 것으로 가정됩니다. 예: Content-Language:da
Content-Length
Content-Length 엔터티 헤더 필드는 엔터티 본문의 길이를 나타내는 데 사용되며 바이트 단위로 저장된 십진수로 표시됩니다.
Content-Type
Content-Type 엔터티 헤더 필드는 수신자에게 전송되는 엔터티 본문의 미디어 유형을 나타내는 데 사용됩니다. 예:
Content-Type: text/html; charset=ISO-8859-1
Content-Type: text/html; charset=GB2312
Last-Modified
Last-Modified 엔터티 헤더 필드 리소스가 마지막으로 수정된 날짜와 시간입니다.
Expires
Expires 엔터티 헤더 필드는 응답이 만료되는 날짜와 시간을 제공합니다. 프록시 서버나 브라우저가 일정 시간 후에 캐시에 있는 페이지를 업데이트할 수 있도록(이전에 방문한 페이지에 다시 액세스할 때 캐시에서 직접 로드하여 응답 시간을 단축하고 서버 부하를 줄임) 다음을 수행할 수 있습니다. Expires 엔터티 헤더 필드를 사용하여 페이지 만료 시간을 지정합니다. 예: 만료: Thu, 15 Sep 2006 16:23:12 GMT
HTTP 1.1의 클라이언트와 캐시는 다른 불법 날짜 형식(0 포함)을 만료된 것으로 처리해야 합니다. 예: 브라우저가 페이지를 캐싱하는 것을 방지하기 위해 Expires 엔터티 헤더 필드를 사용하고 이를 0으로 설정할 수도 있습니다. jsp의 프로그램은 다음과 같습니다: response.setDateHeader("Expires","0");

5. Telnet을 사용하여 http 프로토콜의 통신 프로세스를 관찰합니다.

실험 목적 및 원리:
MS의 Telnet 도구를 사용하여 서버는 http 요청 정보를 수동으로 입력하여 서버가 수신하면, 요청을 해석하고 수락한 후 응답을 반환하고 이를 텔넷 창에 표시함으로써 http 프로토콜의 통신 프로세스에 대한 지각적 이해를 심화시킵니다.

실험 단계:

1. 텔넷 열기
1.1 텔넷 열기
실행-->cmd-->telnet

1.2 텔넷 에코 기능 열기
localecho 설정

2. 서버에 연결하고 요청 보내기
2.1 open www.guet.edu.cn 80 //포트 번호는 생략할 수 없으니 주의하세요

HEAD /index.asp HTTP/1.0
Host:www.guet.edu.cn

/*요청 방법을 변경하여 Guilin Electronics 홈페이지의 콘텐츠를 요청할 수 있으며, 다음과 같이 메시지를 입력하세요*/
open www.guet.edu.cn 80

GET /index.asp HTTP/1.0 //요청된 리소스의 내용
호스트:www.guet.edu.cn

2.2 open www.sina.com.cn 80 //명령 프롬프트에서 telnet 직접 입력 www.sina.com.cn 80
HEAD /index.asp HTTP/1.0
Host:www.sina.com .cn

3 실험 결과:

3.1 정보 요청 2.1에서 얻은 응답은 다음과 같습니다.

HTTP/1.1 200 OK //웹 서버 >날짜: 목 ,08 Mar 200707:17:51 GMT
연결: Keep-Alive     
콘텐츠 길이: 23330
콘텐츠 유형: text/html
만료: Thu,08 Mar 2007 07:16:51 GMT
Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
Cache-control: private

//리소스 내용 생략

3.2 요청 정보에서 가져옴 2.2 응답은 다음과 같습니다.

HTTP/1.0 404 찾을 수 없음 //요청 실패
날짜: 2007년 3월 8일 목요일 07:50:50 GMT
서버: Apache/2.0.54
마지막 수정: 2006년 11월 30일 목요일 11:35:41 GMT
ETag: "6277a-415-e7c76980"
Accept-Ranges: bytes
X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix
Vary: Accept-Encoding
Content-Type: text/html
X-Cache: MISS from zjm152-78.sina.com.cn
Via: 1.0 zjm152-78.sina.com.cn :80
X-Cache: MISS from th-143.sina.com.cn
연결: 닫기


호스트에 대한 연결이 끊어졌습니다.

계속하려면 아무 키나 누르세요...

4. 참고: 1. 입력 오류가 있는 경우 요청이 성공하지 않습니다.
2. 헤더 필드는 대소문자를 구분하지 않습니다.
3. HTTP 프로토콜에 대해 자세히 알아보려면 RFC2616을 확인하고 http://www.letf.org/rfc에서 문서를 찾으세요.
4. 백그라운드 프로그램을 개발하려면 http 프로토콜을 마스터해야 합니다

6. HTTP 프로토콜 관련 기술 보충

1. 기본 사항:
고급 프로토콜에는 파일 전송 프로토콜 FTP, 이메일 전송 프로토콜 SMTP, 도메인 이름 시스템 서비스 DNS, 네트워크 뉴스 전송 프로토콜 NNTP 및 HTTP 프로토콜 등이 포함됩니다.
세 가지 유형이 있습니다. 중개자: 프록시), 게이트웨이 및 터널인 프록시는 URI의 절대 형식에 따라 요청을 수락하고 메시지의 전체 또는 일부를 다시 작성한 다음 형식화된 요청을 URI 식별자를 통해 서버에 보냅니다. 게이트웨이는 다른 서버 위의 계층 역할을 하며 필요한 경우 요청을 기본 서버 프로토콜로 변환할 수 있는 수신 프록시입니다. 채널은 메시지를 변경하지 않는 두 연결 간의 중계 지점 역할을 합니다. 채널은 통신이 중개자(예: 방화벽 등)를 통과해야 하거나 중개자가 메시지 내용을 식별할 수 없는 경우에 자주 사용됩니다.
프록시: 다른 클라이언트에 대한 요청을 설정하기 위해 서버 또는 클라이언트 역할을 할 수 있는 중간 프로그램입니다. 요청은 가능한 번역을 통해 내부적으로 또는 다른 서버를 통해 전달됩니다. 프록시는 요청 메시지를 보내기 전에 요청 메시지를 해석하고 가능하면 다시 작성해야 합니다. 프록시는 방화벽을 통해 클라이언트를 위한 포털 역할을 하는 경우가 많습니다. 프록시는 사용자 에이전트에 의해 완료되지 않은 프로토콜을 통한 요청을 처리하는 도우미 응용 프로그램 역할도 할 수 있습니다.
게이트웨이: 다른 서버를 중개하는 역할을 하는 서버입니다. 프록시와 달리 게이트웨이는 요청된 리소스에 대한 원본 서버인 것처럼 요청을 수락합니다. 요청 클라이언트는 자신이 게이트웨이를 처리하고 있다는 사실을 인식하지 못합니다.
게이트웨이는 방화벽을 통해 서버 측 포털 역할을 하는 경우가 많습니다. 게이트웨이는 HTTP가 아닌 시스템에 저장된 리소스에 액세스하기 위한 프로토콜 변환기 역할도 할 수 있습니다.
채널(터널) : 두 연결 사이를 중계하는 역할을 하는 중개 프로그램입니다. 일단 활성화되면 채널은 HTTP 요청에 의해 시작될 수 있지만 HTTP 통신에 속하는 것으로 간주되지 않습니다. 릴레이된 연결의 양쪽 끝이 닫히면 채널이 사라집니다. 채널은 포털이 반드시 존재해야 하거나 중개자가 릴레이된 트래픽을 해석할 수 없는 경우에 자주 사용됩니다.

2. 프로토콜 분석의 장점 - HTTP 분석기는 네트워크 공격을 탐지합니다
고급 프로토콜을 모듈식으로 분석하고 처리하는 것이 향후 침입 탐지의 방향이 될 것입니다.
HTTP에서 자주 사용되는 포트 80, 3128, 8080과 해당 프록시는 포트 태그를 사용하여 네트워크 섹션에 지정됩니다.

3. HTTP 프로토콜 콘텐츠 길이 제한 취약점으로 인해 서비스 거부 공격이 발생합니다
POST 메서드를 사용하면 ContentLenth를 설정하여 전송해야 하는 데이터 길이를 정의할 수 있습니다(예: ContentLenth:999999999). 공격자는 이 결함을 지속적으로 이용하여 전송이 완료될 때까지 해제되지 않습니다. 웹 서버의 메모리가 부족해질 때까지 웹 서버에 정크 데이터를 보냅니다. 이 공격 방법은 기본적으로 흔적을 남기지 않습니다.
http://www.cnpaf.net/Class/HTTP/0532918532667330.html

4. HTTP 프로토콜의 특성을 이용하여 서비스 거부 공격을 수행하는 몇 가지 아이디어
서버측 공격자의 위조 TCP 연결 요청을 처리하느라 바쁘고 클라이언트의 정상적인 요청에 주의를 기울일 시간이 없습니다(결국 클라이언트의 정상적인 요청 비율은 매우 작습니다). 이때 일반 클라이언트의 관점에서 보면 서버는 손실을 입게 됩니다. 이 상황을 서버가 SYNFlood 공격(SYN 플러드 공격)을 받는다고 합니다.
Smurf, TearDrop 등은 ICMP 메시지를 사용하여 Flood 및 IP 조각화 공격을 수행합니다. 이 문서에서는 "정상 연결" 방법을 사용하여 서비스 거부 공격을 생성합니다.
포트 19는 초기에는 Chargen 공격, 즉 Chargen_Denial_of_Service에 사용되었지만! 그들이 사용하는 방법은 두 개의 Chargen 서버 간에 UDP 연결을 생성하여 서버가 너무 많은 정보를 처리하고 다운되도록 하는 것입니다. 그런 다음 웹 서버를 종료하려면 두 가지 조건이 있어야 합니다. 1. Chargen 서비스가 있습니다. 2. 거기에 있습니다. HTTP 서비스
방식: 공격자가 소스 IP를 위조하여 N Chargens에 연결 요청(Connect)을 보냅니다. Chargen은 연결을 수신한 후 초당 72바이트 문자 스트림을 반환합니다(실제로 실제 데이터에 따르면). 네트워크 상황에 따라 이 속도가 더 빠릅니다)를 서버에 전달합니다.

5. Http 핑거프린팅 기술
Http 핑거프린팅의 원리는 기본적으로 동일합니다. 서로 다른 서버에서 HTTP 프로토콜 실행의 약간의 차이를 기록하여 식별하는 것이 TCP/IP 스택보다 좋습니다. 핑거프린팅은 훨씬 더 복잡합니다. HTTP 서버의 구성 파일을 사용자 정의하고 플러그인이나 구성 요소를 추가하면 HTTP 응답 정보를 쉽게 변경할 수 있기 때문에 식별이 어려워지지만 TCP/ IP 스택은 코어 레이어를 수정해야 하므로 식별하기 쉽습니다.
Apache와 같은 오픈 소스 Http 서버의 경우 사용자가 소스에서 배너 정보를 수정할 수 있도록 서버를 설정하는 것은 매우 간단합니다. Microsoft의 IIS나 Netscape와 같은 오픈 소스 코드가 없는 Http 서버의 경우 배너 정보를 저장하는 Dll 파일에서 수정할 수 있으므로 관련 기사에서 다루었습니다. 물론, 이러한 수정의 효과는 여전히 좋습니다. 배너 정보를 모호하게 만드는 또 다른 방법은 플러그인을 사용하는 것입니다.
일반적인 테스트 요청:
1: HEAD/Http/1.0은 기본 Http 요청을 보냅니다.
2: DELETE/Http/1.0은 삭제 요청과 같이 허용되지 않는 요청을 보냅니다.
3: GET/Http/3.0은 잘못된 버전의 Http 프로토콜 요청을 보냅니다
4: GET/JUNK/1.0은 Http 프로토콜 요청의 잘못된 사양을 보냅니다
통계 원리를 사용하는 HTTP 지문 식별 도구 Httprint를 결합합니다. 퍼지 논리 기술은 HTTP 서버의 유형을 효과적으로 결정할 수 있으며 다양한 HTTP 서버에서 생성된 서명을 수집하고 분석하는 데 사용할 수 있습니다.

6. 기타: 최신 브라우저에서는 사용자의 브라우저 사용 성능을 향상시키기 위해 웹 페이지 탐색 시 여러 연결이 동시에 설정되어 여러 아이콘을 빠르게 얻을 수 있습니다. 웹 페이지에서 전체 웹 페이지의 전송을 더 빠르게 완료할 수 있습니다.
HTTP1.1은 이러한 지속적인 연결 방법과 차세대 HTTP 프로토콜을 제공합니다. HTTP-NG에는 세션 제어, 풍부한 콘텐츠 협상 및 기타 방법에 대한 지원이 추가되어
보다 효율적인 연결을 제공합니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.