190529 HTTP/1.0 syntax

2019-05-29

HTTP/1.0의 신택스

HTTP의 역사
  • 1990년 HTTP/0.9
    • HTML 문서 요청-가져오는 단순한 프로토콜.
    • 이후로 폼 전송, 정보 갱신,채팅기능 구현 등에 사용되면서 기능 확장
  • 1996년 HTTP/1.0
  • 1997년 HTTP/1.1
  • 2015년 HTTP/2
HTTP와 관련된 고유 명사들
  • IETF
    • The Internet Engineering Task Force
    • 인터넷의 상호 접속성을 향상시키는 것을 목적으로 만들어진 임의 단체
  • RFC
    • Request For Comments
    • IETF가 만든 규약 문서
  • IANA
    • Internet Assigned Numbers Authority
    • 포트 번호와 파일타입(Content-Type)등 웹에 관한 데이터베이스를 관리하는 단체
  • W3C
    • World Wide Web Consortium
    • 웹 관련 표준화를 하는 비영리단체
    • HTML 사양 책정, server-sent events, 웹소켓 등 API를 동반하는 통신 프로토콜
  • WHATWG
    • Web Hypertext Application Technology Working Group
    • 웹 관련 규격을 논의하는 단체

인터넷이 서로 연결되는 것도, 메일을 주고받을 수 있는 것도 모두 RFC로 정해진 규칙을 따라 인터넷 세계의 시스템이 구성되었기 때문이다.

테스트용 에코 서버 실행해보기
package main

import (
	"fmt"
	"log"
	"net/http"
	"net/http/httputil"
)

func handler(w http.ResponseWriter, r *http.Request) {
	dump, err := httputil.DumpRequest(r, true)
	if err != nil {
		http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)
		return
	}
	fmt.Println(string(dump))
	fmt.Fprintf(w, "<html><body>hello</body></html>\n")
}

func main(){
	var httpServer http.Server
	http.HandleFunc("/", handler)
	log.Println("start http listening: 18888")
	httpServer.Addr=":18888"
	log.Println(httpServer.ListenAndServe())
}

실행시 handler 함수 호출, 대기중인 포트 번호인 18888이 출력된다.

HTTP 0.9로 할 수 있는 것
  • 텍스트 정보가 적힌 페이지 경로를 서버에 지정, 해당 페이지를 가져오기만 하는 프로토콜
  • 0.9버전은 현행 프로토콜과 하위 호환성이 없다
    • 아래 예제는 HTTP/1.0을 사용한다.
# curl 실행 예
$ curl --http1.0 http://localhost:18888/greeting
<html><body>hello</body></html>

# 서버 측 로그
GET /greeting HTTP/1.0
Host: localhost:18888
Connection: close
Accept: */*
User-Agent: curl/7.52.1
  • 폼과 검색 기능
    • HTML 태그 내에서 <isindex>태그를 이용하면 텍스트 입력란이 생겨 검색 가능했음.

출처

리얼월드 HTTP - 한빛미디어