본문 바로가기

TIL

[2022-1-22] HTTP 공부

form 태그의 enctype="multipart/form-data"

form 태그의 enctype은 서버로 보내고자하는 데이터의 인코딩하는 방법을 명시한다. 아래의 세가지 타입으로 설정할 수 있다.

application/x-www-form-urlencoded

Default로 설정되어 있는 타입으로 모든 데이터가 인코딩 되었음을 뜻한다.

 

text/plain

공백 문자만을 "+"으로 치환하고 나머지 문자는 인코딩 되어 있지 않음을 뜻한다.

 

multipart/form-data

모든 문자가 인코딩되어있지 않음을 뜻한다. 보통 이미지나 파일의 바이트 데이터를 서버로 전속할 때 사용한다.

 

 

HTTP 데이터 전송 방식

HTTP 에서 서버로 데이터를 보낼때 전송 방식은 쿼리 파라미터를 통한 방식(GET), 메세지 바디를 통한 방식(POST,PUT,PATCH) 두가지로 나뉜다.

이 '방식'들을 통해 아래 네가지의 데이터 '전송' 상황을 해결한다.

 

1. 정적 데이터 조회를 위한 전송

2. 동적 데이터 조회를 위한 전송

3. HTML의 form 태그를 통한 전송

4. HTTP API를 통한 전송

 

 

Post

Post 방식을 통해서 새로운 자원을 등록할 경우, 클라이언트는 자원이 등록될 위치(URI)를 알지 못한다.(아직 특정되지 않음) 요청을 보내고 서버에서 처리하는 과정에서 새로 등록된 리소스의 URI를 생성하고 응답 메세지에 이를 넣어 보내줌 ex) Location: /members/100

 

리소스를 등록할때,

Post방식은 요청이 들어올 때 내부에서 요청으로 들어온 리소스에 대한 식별자를 새로 생성해냄

Put방식은 요청이 들어올 때 그 요청에 어떤 리소스에 대한 것인지에 대한 식별자가 포함 되어 있음(클라이언트가 URI를 알고 있음)

 

때문에 Post 방식으로 요청이 여러번 들어오면 서버는 새로운 리소스를 계속 생성하고 그에 대한 URI를 반환한다.

하지만 Put 방식은 한번의 요청이든 100번의 요청이든 식별자가 같으므로 새로운 자원을 생성하는 것이 아니라 교체 한다. 때문에 결과가 같다.

 

컨트롤 URI

HTML 의 form 태그를 사용할 경우 request 방식이 POST와 GET으로 제한됨, 때문에 URI에 동사를 적어서 해결할 수 있다. 이러한 URI를 컨트롤 URI라고 한다. ex)/edit, /delete 등 HTTP 메소드 만으로 의미가 맞지 않는 경우에만 사용해야한다.(그런 경우가 많아서 실무에서 자주 사용됨)

 

 

URI 설계 개념

Document, Collection, Store, Controll URI(Controller)따로 공부할 것