# HTTP

HyperText Transfer Protocol

네트워크 통신 규약이다.

컴퓨터는 0과 1로 이루어진 데이터를 만들고 읽고 쓰고 지우고(CRUD) 하게 되어 있다.

이런 모든 행위를 프로그래밍이라고 할 수 있는데, 우리는 실제로 어떠한 데이터를 이용하여 메모리를 적극적으로 활용하는 것을 프로그램이라 칭하고 각종 방법으로 메모리를 적극적으로 사용하였다.

단지, 브라우저는 내 컴퓨터내에서만 작동하는 프로그램이 아니라 다른 프로그램과 통신을 하고 있는 것일 뿐이다. (인터넷의 통신을 위한 프로그램이 웹 서버이다)

결국 HTTP는 Protocol이다. 즉 약속과 규약이다.

철수가 영희를 처음만나면 : 악수를하고 인사를 하고, 자기소개를 하는 관례가 있는 것 처럼 (인간들의 규약 or 규칙 or 약속)

브라우저는 웹 서버에게 HTTP라는 관례에 맞추어 통신하는 것이다.

HTTP는 주소를 정하고 이 주소에 특정한 message를 전달하는 것으로 통신을 한다.

요청을 보내면

GET  /HTTP/1.1
Host: www.facebook.com

인간이 만든 프로그램인 HTTP 또한 message로 response한다.

응답을 한다.

HTTP/1.1 200 OK
Content-Type: text/html
HTTP/1.1 404 Not Found
HTTP/1.1 301 Moved Permanently
Content-Type: text/html
Location: https://www.harvard.edu

HTTP의 response는 statusCode를 가지고 통신의 결과 상태를 알려준다

Code status 내용
200 OK 요청이 성공적으로 됨 GET:리소스를 불러와서 메세지를 바디에 전송 \n HEAD: 개체 해더가 메시지 바디에 있음 \n PUT or POST: 수행 결과 리소스가 메시지 바디에 전송 \n TRACE: 메시지 바디는 서버에서 수신한 요청 메시지를 포함 \n
201 create 새로운 리소스가 생성됨 POST PUT
202 Accpted 수신하였지만 그에 응한 행공은 할 수 없음, 다른 프로세스에서 처리 또는 서버가 요청을 다루고 있음 배치 프로세스를 하고 있는 경우
203 Non-Authoritative Information 메타 정보 세트가 오리진 서버의 것과 일치하지 않지만 로컬이나 서드 파티 복사본에서 모아졌음
204 No Content 요청에 대해서 보내줄 수 있는 콘텐츠 x
205 Rest Content 요청을 완수한 이후 이 요청을 보내 문서 뷰를 리섹하라고 알려줌
206 Partial Content 클라이언트에서 복수의 스트림을 분할 다운로드
207 Multi-Status 멀티-상태 응답 여러 리소스가 여러 상태 코드인 상황
208 Multi-Status DAV에서 사용 컬렉션으로 바인드된 복수의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 사용
226 IM Used 서버가 GET 요청에 대한 리소스의 의무를 다 함, 응답이 하나 또는 그 이상의 인스턴스 조작이 현재 인스턴스에 적용이 되었음
300 Multi Choise 요청에 대하여 하나 이상의 응다비 가능함. 둘 중 하나를 반드시 선택해야함
301 Moved Permanently 요청한 리소스의 URI가 변경됨
302 Found URI가 일시적으로 변경됨
303 See Other 요청이 다른 URI에서 얻어햐 할 때, 서버가 클라이언트를 리다이렉트함
304 Not Modified 이것은 캐시를 목적으로함. 응답이 수정되지 않았음을 알려줌, 클라이언트는 계속 은답의 캐시된 버전을 사용함
305 X 더 이상 안 쓰임
306 X 더 이상 안 쓰임
307 Temporary Redirect 리소스가 다른 URI에 있음 302code와 동일한 의미, but 사용자가 HTTP method를 변경하지 말아야 함
308 Permanent Redirect 리소스가 HTTP Header Location:에 명시된 다른 URI에 위치함 301code와 동일, but 사용자가 HTTP method를 변경하지 말아야 함
400 Bad Request 이 응답은 잘못됨
401 Unauthorized "비인증(unauthenticated)", 스스로를 인증해야함
403 Forbidden 콘텐츠에 접근할 권리가 없음, 401과는 다름 인증됐지만 권한 없음
404 Not Found 요청받은 리소스 찾을 수 없음
405 Method Not Allowed 메소드는 서버에서 알고 있지만, 제거되었고 사용할 수 없음.
406 Not Acceptable 사용자 에이전트에서 정해준 규격에 따른 콘텐츠를 찾지 않았을 때
407 Proxy Authentication Required 401과 비슷하지만 프록시 완료 인증이 필요
408 Request Timeout 서버가 사용되지 않는 연결을 끊고 싶어한다는 것을 의미함
409 Conflict 현재 서버의 산태와 충돌
410 Gone 요청한 콘텐츠가 서버에서 영구적으로 삭제됨
411 Length Required Content-Length 해더 필드가 정의 되지 안흥ㅁ
412 Precondition Failed 헤더 전제조건 서버의 전제조건에 적절하지 않음
413 Payload Too Large 서버에서 정의한 한계보다 큼 Retry-After 헤더 필드로 돌려 보낼듯
414 URI Too Long URI는 서버에서 처리하지 않기로 한 길이보다 길다.
415 Unsupported Media Type 요청한 미디어 포맷은 서버에서 지원하지 않는다.
416 Reqyested Range Not Satusfiable Range 헤더 필드에 요청한 지정 범위를 만족시킬 수 없음. 데이터의 크기를 벗어났을 가능성
417 Expectation Failed 이 응답 코드는 Expect 요청 헤더 필드로 요청한 예상이 서버에서는 적당하지 않음
421 Misdirected Request 서버로 요청된 응답을 생성할 수 없음, URI와 연결된 스킴과 권한을 구성하여 생성할 수 없을 때 보냄
422 Unorocessable Ebtity 요청은 잘 만들었으나, 문법 오류가 있음
423 Locked 리소스는 접근하는 것이 잠김
424 Failed Dependency 이전 요청이 실패 그래서 지금도 실패
426 Upgrade Required 클라이언트가 다른 프로토콜로 업그레이드 하면 처리 할지도 모름을 알려줌
428 Precondition Required 오리진 서버는 요청이 조건적이여야함 업데이트 상실을 예방하기 위해
429 Too Many Requests 너무 많은 요청을 보냄
431 Request Header Fields Too Large 요청한 헤더 필드가 너무 큼
451 Unavailable For Legal Reasons 정부에 의하여 검열됨
500 Internal Server Error 서버가 처리 방법을 모르는 상황이 발생.
501 Not Implemented 서버에서 지원되지 않으므로 처리할 수 없다.
502 Bad Gateway 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음
503 Service Unacailable 서버가 요청을 처리할 준비가 되지 않음
504 Gateway Timeout 서버가 게이트웨이 역활을 하고 적시에 응답을 받을 수 없음
505 HTTP Version Not Supported 요청에 사용된 HTTP 버전은 서버에서 지원되지 않음
506 Variant Also Negotiates 서버에 내부 구성 오류
507 Insufficient Storage 서버에 내부 구성 오류
508 Loop Detected 서버가 요청을 처리하는 동안 무한 루프를 감지함
510 Not Extended 서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요함
511 Networl Authentication Required 네트워크 액세스를 얻기 위해 인증이 필요함
© Devlog from jeong