Method
GET
서버에게 Resource를 보내도록 요청하는데 사용 (서버의 Resource를 읽음)
HEAD
GET과 동일하지만 서버에서 Body를 Return 하지 않음
- Resource를 받지 않고 오직 찾기만 원할때
- object가 존재할 경우 응답의 상태 코드를 확인할때
- 서버의 응답 헤더를 봄으로써 Resource가 수정 되었는지 확인
PUT
서버에 문서를 쓸때 사용 (GET과 반대)
- PUT 메소드는 서버가 Client 요청의 Body를 확인한다.
- 요청된 URL에 정의된 새로운 Resource를 생성하기 위함
- 요청된 URL이 존재할 경우 대체하여 사용
POST
Server에 Input Data를 보내기 위함 (HTML form에 많이 사용)
- PUT vs. POST
— PUT은 서버의 Resource에 Data를 저장하기 위한 용도
— POST는 서버에 DATA를 보내기 위한 용도
TRACE
Client로 부터 Request Packet이 방화벽, Proxy Server, Gateway등을 거치면서 packet의 변조가 일어날 수 있는데, 이 때 Server에 도달 했을 때의 최종 Packet의 Request Packet을 볼수 있다.
- 즉, Original Data와 서버에 도달했을 때의 비교본 Data를 서버의 응답 Body를 통해 확인 할 수 있다.
- 요청의 최종 수신자는 반드시 송신자에게 200(OK) 응답의 내용(Body)로 수신한 메세지를 반송해야 한다.
- 최초 Client의 요청에는 Body가 포함될수 없다.
OPTION
- Target Server의 지원 가능한 method(ex> GET, POST …)를 알아보기 위함
DELETE
- 요청 Resource를 삭제하도록 요청
- 그러나!! HTTP 규격에는 Client의 요청에도 서버가 무효화 시킬수 있도록 정의되어 있음
- DELETE Method는 항상 보장되지 않는다.
이 부분은 공부하면서 추가하는방향으로 (경우의 수가 워낙 많으니..)
Status Code
1xx (정보제공)
- 100 continue
- HTTP 1.1 에서 제공
- Expect 헤더가 전송되어지면 초기 요청내의 폼 데이터(body)는 전송되지 않는다.
- 웹서버가 해당 응답을 할수 있도록 구현 했다면 100 continue로 응답하지만, 모든 웹서버가 그런것은 아니다.
- Client의 100 continue 요청
- HTTP Client Application에서 서버에 Entiti Body를 보내기 전에 해당 Body를 받을 수 있는지 서버에 check 해볼 때 사용
(Large body가 서버가 수용할 수 있는지를 확인하고 수용할수 없을 경우 피함으로서 Client가 미리 판단을 할 수 있음)
— Server의 100 continue 응답
— 200 OK 로 100 continue에 대한 Response를 보내주거나, error code로 응답한다.
— 서버는 100 continue에 대한 entity body를 받을 경우에 Client에게 해당 응답을 한다.
— 서버가 Client에게 100 continue에 대한 Header가 아닌 entity body를 받을 경우에는 100 continue에 대응하는 status code(ex> 200OK)는 보내지 않는다. (Client는 이미 데이터를 보내기로 결정 하였기 때문에)
- Proxy와 100 continue
— client -> proxy 로 100 continue 요청이 올경우 아래 두가지로 동작한다.
- next hop이 http 1.1을 호환하거나 net hop의 호환 버전을 모를경우 100 continue 패킷을 forwording 한다.
- next hop이 http 1.1 아래버전이 호환될 경우 417 Expectation Failed Error 발생 (417: 서버가 “Expect: “ 요청 헤더의 value를 만족할 수 없다. ex>100-continue)
2xx (성공)
3xx (리다이렉션)
4xx (클라이언트요청오류)
- 403 Forbidden 해당 접근이 거부되었을때
— 허용되지 않은 메소드가 있을 때 (GET POST 만 허용해뒀는데 TRACE와 같이 허용되지 않은 메소드로 요청했을 경우)
— ID/PASSWD로 인증이 실패하였을때
- 406 Not Acceptable 허용불가능
— 서버에서 ACL 걸었을 때
5xx (서버응답오류)
- 500 Interner Server Error 내부 서버 오류
— Apache <-> PHP <-> MySQL 간 데이터를 주고 받을 때, 내부적으로 Error가 발생될 경우 해당 응답코드 발생
— 일반적으로 SQL에서 문제가 발생됨
— Blind SQL 공격: 스키마의 종류를 알아낸다. 예를 들면 필드가 int인지 char인지를 확인 할 수 있다.
— a=1 을 넣어 integer 필드 인지 char 필드인지 확인 할 수 있다.
— 하나의 IP로 여러번 접속 했을 경우~ 웹방화벽 접근 로그를 통해 확인해 볼수 있다.
- 503 Service Unavailable : 서비스 불가능
— 일반적으로 Proxy장비에서 서버에 서비스가 불가능할 때 띄어준다.