Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Python 으로 만들어보는 HTTP서버
강성일 (Luavis) | luaviskang@gmail.com
b. 1995 Seoul, KR
Junior Software Engineer
Web Front/Back-end / iPhone Developer / Eme...
선수지식
Python Socket
Python 으로 만들어보는 HTTP서버
Flask
배경
Codelab
Python 으로 만들어보는 HTTP서버
Python을 이용해서 어떻게 HTTP서버를 만
들까
배경
HTTP의 구조 / HTTP2
이걸 Python으로 짜둔
소스 조금 설명?
기본 지식
HTTP
TCP/IP
여기부터는
사실상
하드웨어
기본 지식
HTMLHyper Text Markup Language
기본 지식
Hyper TextTransfer
하이퍼 텍스트를 옮기는
Protocol
프로토콜
기본 지식
Request
Client Server
Response
Request
Request
Request packet
POST / HTTP/1.1
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/we
bp,*/*;q=0.8
Accept-E...
Packet 구조 Request packet
POST / HTTP/1.1
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/we
bp,*/*;q=0....
Request packet
POST / HTTP/1.1
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,ima
ge/webp,*/*;q=0.8
Accept-E...
Packet 구조 Request packet
POST / HTTP/1.1
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/we
bp,*/*;q=0....
Request
packet
POST / HTTP/1.1
Method
Path
Version
Method
GET
HEAD
POST
PUT
DELETE
TRACE
OPTIONS
CONNECT
PATCH
General usage
POST / HTTP/1.1
Method
Path
Version
Method
GET
HEAD
POST
PUT
DELETE
TRACE
OPTIONS
CONNECT
PATCH
Restful usage
POST / HTTP/1.1
Method
Path
Version
Method
GET
HEAD
PUT
DELETE
OPTIONS
CONNECT
자료를 요청
자료의 존재 요청
POST TRACE
자료 업로드
자료 수정
자료 삭제
서버 확인
가능한 메소드 확인
PATCH
부분적 수정
Path
POST / HTTP/1.1
Method
Path
Version
Path
https://www.pycon.kr/2016apac/about/coc/
Path
/2016apac/about/coc/https:// www.pycon.kr
프로토콜
도메인
Path(경로)
Versions
- Berners-Lee first proposed the "WorldWideWeb" project in 1989.
- The first documented version of HTTP was HTTP ...
정리해보면
GET /2016apac/about/coc/ HTTP/1.1
자료 요청
이런 경로에 있는걸
HTTP 1.1 프로토콜로
Response
Response
Packet 구조 Response packet
HTTP/1.1 200 OK
Content-Language:en
Content-Location:O-HTTP-charset.en.php
Content-Type:text/htm...
Packet 구조 Response packet
HTTP/1.1 200 OK
Content-Language:en
Content-Location:O-HTTP-charset.en.php
Content-Type:text/htm...
Packet 구조 Response packet
HTTP/1.1 200 OK
Content-Language:en
Content-Location:O-HTTP-charset.en.php
Content-Type:text/htm...
Packet 구조 Response packet
HTTP/1.1 200 OK
Content-Language:en
Content-Location:O-HTTP-charset.en.php
Content-Type:text/htm...
Response
packet
HTTP/1.1 200 OK
Status codeVersion
Status
Code
For example
Status
Code
100 200 300 400 500
Status
Code Informational 1xx
100 Continue
서버는 이 코드를 제공하여 요청의
첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸
101 Switching Protocols
서버에 ...
Status
Code
200 OK
이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰
201 Created
서버가 새 리소스를 작성했다.
202 Accepted
접수했지만 아직 처리하지 않았다.
203 Non-Aut...
Status
Code
300 Multiple Choices
서버가 사용자 에이전트에 따라 수행할 작업을 선택하거
요청자가 선택할 수 있는 작업 목록을 제공한다.
301 Moved Permanently
GET 또는 HEA...
Status
Code
400 Bad Request
서버가 요청의 구문을 인식하지 못했다.
401 Unauthorized
서버는 로그인이 필요한 페이지에
대해 이 요청을 제공할 수 있다.
404 Not Found
서버가 ...
Server Error 5xx
Status
Code
500 Internal Server Error
서버에 오류가 발생하여 요청을 수행할 수 없다.
501 Not Implemented
서버에 요청을 수행할 수 있는 기능이...
Header
Header
Header
Accept
Accept-Charset
Accept-Features
Accept-Encoding
Accept-Language
Accept-Ranges
Access-Control-Allow-Credential...
Header
Accept
Accept-Charset
Accept-Features
Accept-Encoding
Accept-Language
Accept-Ranges
Access-Control-Allow-Credential...
Header
Server : 어떤 서버 프로그램의 정보를 클라이언트에게 제공
Host : 요청하는 도메인을 제공
ex) Server: nginx/1.7
ex) Host: www.example.com
Location : ...
Header
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
클라이언트가 서버에게 받을 수 있는 파일의 형식 정의
Header
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
MIME TYPE
Header
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
format;quality=0.9
0.0 ~ 1.0
Header
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
ASCII, EUC-KR, EUC-JP, CP949, UTF-8…
Header
ISO 639-1 Code: ko-kr, en-us, en-gb, ja-jp, zh-cn, zh-tw…
Accept-Language: ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3
클라이언...
Header
Accept-Encoding: gzip, deflate, sdch
클라이언트가 서버에게 가능한 자신이 해석 가능한 압축방법을 제시함
Header Accept-Encoding: gzip, deflate, sdch
클라이언트가 서버에게 가능한 자신이 해석 가능한 압축방법을 제시함
compress – UNIX "compress" program method...
Header
Content-Encoding: gzip
서버가 클라이언트에게 보내는 내용의 압축방식을 알려줌
Header
Content-Encoding: gzip
서버가 클라이언트에게 보내는 내용의 압축방식을 알려줌
Header
Content-Type: text/html; charset=utf-8
서버가 클라이언트에게 보내는 내용의 type을 알려줌
Header
Content-Length: 23021
보내는 내용의 크기를 바이트 단위로 알려줌
HTTP 2
HTTP 2
HTTP 2
엄청난 진보
= 전체 페이지 사이즈 증가
In 1998 google
Now google
HTTP 2
HTTP 2
• 훨씬 더 많은 리소스로 구성되어 있다.
• 다수의 도메인을 사용한다.
• 과거에 비해 매우 동적으로 동작한다.
• 보안이 보다 중요한 이슈가 되었다.
• 헤더의 길이가 길어졌다.
HTTP 2
HPACK / Binary Protocol Server Push
Multiplexing
HTTP 2 장점
WSGI
WSGI
PEP 333 / PEP 3333
Web
Application
Handler
Client
Examples
Examples
https://github.com/Luavis/GDG-Devcamp-2016
https://git.io/v61jO
or
References http://nuli.navercorp.com/sharing/blog/post/1132452
https://www.maxcdn.com/blog/spdy-http2-shift/
http://cacm.a...
Upcoming SlideShare
Loading in …5
×

GDG Dev camp 발표자료 - python으로 만들어보는 http서버

GDG Devcamp 2016 - "python으로 만들어보는 http서버"에서 진행한 발표자료 입니다.

  • Login to see the comments

GDG Dev camp 발표자료 - python으로 만들어보는 http서버

  1. 1. Python 으로 만들어보는 HTTP서버
  2. 2. 강성일 (Luavis) | luaviskang@gmail.com b. 1995 Seoul, KR Junior Software Engineer Web Front/Back-end / iPhone Developer / Emebed Developer Technical Tools Python, Swift, PHP, JavaScript(Node.JS/React), Objective-C, HTML, Linux, C, TCP socket, MariaDB, NGINX, flask, AVR, Freescale, ... Professional Experience • Freelancer Aug, 2015 to now • iPhone Developer, Feb, 2014 to Aug, 2014, Hoit company – Seoul, KR Achievement • Korea Olympiad in Informatics, in 2013 • Hanyang univ, Smart car competition in 2015 Research Papers • Lane Detection and Tracking Based on Line Scan Camera in Autonomous Driving Miniature Vehicle, 2015 Education • Soongsil Univ, Since 2014 – Seoul, KR In college of Electronic Engineering • SW Maestro 6th, 2015 - 2016 – Seoul, KR • Korea Digital Media High school, 2011 - 2013 – Ansan, KR Major in Web-promgramming
  3. 3. 선수지식 Python Socket Python 으로 만들어보는 HTTP서버 Flask
  4. 4. 배경 Codelab Python 으로 만들어보는 HTTP서버 Python을 이용해서 어떻게 HTTP서버를 만 들까
  5. 5. 배경 HTTP의 구조 / HTTP2 이걸 Python으로 짜둔 소스 조금 설명?
  6. 6. 기본 지식 HTTP TCP/IP 여기부터는 사실상 하드웨어
  7. 7. 기본 지식 HTMLHyper Text Markup Language
  8. 8. 기본 지식 Hyper TextTransfer 하이퍼 텍스트를 옮기는 Protocol 프로토콜
  9. 9. 기본 지식 Request Client Server Response
  10. 10. Request Request
  11. 11. Request packet POST / HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/we bp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2 Cache-Control:max-age=0 Connection:keep-alive Host:www.w3.org Referer:https://www.google.co.kr/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 search=google&utf-8=&page=10 Packet 구조
  12. 12. Packet 구조 Request packet POST / HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/we bp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2 Cache-Control:max-age=0 Connection:keep-alive Host:www.w3.org Referer:https://www.google.co.kr/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 search=google&utf-8=&page=10
  13. 13. Request packet POST / HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,ima ge/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2 Cache-Control:max-age=0 Connection:keep-alive Host:www.w3.org Referer:https://www.google.co.kr/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 search=google&utf-8=&page=10 Packet 구조
  14. 14. Packet 구조 Request packet POST / HTTP/1.1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/we bp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2 Cache-Control:max-age=0 Connection:keep-alive Host:www.w3.org Referer:https://www.google.co.kr/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 search=google&utf-8=&page=10
  15. 15. Request packet POST / HTTP/1.1 Method Path Version
  16. 16. Method GET HEAD POST PUT DELETE TRACE OPTIONS CONNECT PATCH General usage POST / HTTP/1.1 Method Path Version
  17. 17. Method GET HEAD POST PUT DELETE TRACE OPTIONS CONNECT PATCH Restful usage POST / HTTP/1.1 Method Path Version
  18. 18. Method GET HEAD PUT DELETE OPTIONS CONNECT 자료를 요청 자료의 존재 요청 POST TRACE 자료 업로드 자료 수정 자료 삭제 서버 확인 가능한 메소드 확인 PATCH 부분적 수정
  19. 19. Path POST / HTTP/1.1 Method Path Version
  20. 20. Path https://www.pycon.kr/2016apac/about/coc/
  21. 21. Path /2016apac/about/coc/https:// www.pycon.kr 프로토콜 도메인 Path(경로)
  22. 22. Versions - Berners-Lee first proposed the "WorldWideWeb" project in 1989. - The first documented version of HTTP was HTTP V0.9 (1991). - Dave Raggett led the HTTP Working Group (HTTP WG) in 1995. - RFC 1945 officially introduced and recognized HTTP V1.0 in 1996. - The HTTP/1.1, RFC 2068 was officially released in January 1997
  23. 23. 정리해보면 GET /2016apac/about/coc/ HTTP/1.1 자료 요청 이런 경로에 있는걸 HTTP 1.1 프로토콜로
  24. 24. Response Response
  25. 25. Packet 구조 Response packet HTTP/1.1 200 OK Content-Language:en Content-Location:O-HTTP-charset.en.php Content-Type:text/html; charset=UTF-8 Date:Tue, 19 May 2015 15:23:39 GMT P3P:policyref="http://www.w3.org/2014/08/p3p.xml" Server:Apache/2 TCN:choice Transfer-Encoding:chunked Vary:negotiate,accept-language <html> <p>hello World</p> </html>
  26. 26. Packet 구조 Response packet HTTP/1.1 200 OK Content-Language:en Content-Location:O-HTTP-charset.en.php Content-Type:text/html; charset=UTF-8 Date:Tue, 19 May 2015 15:23:39 GMT P3P:policyref="http://www.w3.org/2014/08/p3p.xml" Server:Apache/2 TCN:choice Transfer-Encoding:chunked Vary:negotiate,accept-language <html> <p>hello World</p> </html>
  27. 27. Packet 구조 Response packet HTTP/1.1 200 OK Content-Language:en Content-Location:O-HTTP-charset.en.php Content-Type:text/html; charset=UTF-8 Date:Tue, 19 May 2015 15:23:39 GMT P3P:policyref="http://www.w3.org/2014/08/p3p.xml" Server:Apache/2 TCN:choice Transfer-Encoding:chunked Vary:negotiate,accept-language <html> <p>hello World</p> </html>
  28. 28. Packet 구조 Response packet HTTP/1.1 200 OK Content-Language:en Content-Location:O-HTTP-charset.en.php Content-Type:text/html; charset=UTF-8 Date:Tue, 19 May 2015 15:23:39 GMT P3P:policyref="http://www.w3.org/2014/08/p3p.xml" Server:Apache/2 TCN:choice Transfer-Encoding:chunked Vary:negotiate,accept-language <html> <p>hello World</p> </html>
  29. 29. Response packet HTTP/1.1 200 OK Status codeVersion
  30. 30. Status Code For example
  31. 31. Status Code 100 200 300 400 500
  32. 32. Status Code Informational 1xx 100 Continue 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸 101 Switching Protocols 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중이다.
  33. 33. Status Code 200 OK 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰 201 Created 서버가 새 리소스를 작성했다. 202 Accepted 접수했지만 아직 처리하지 않았다. 203 Non-Authoritative Information 다른 소스에서 수신된 정보를 제공하고 있다. 204 No Content 처리했지만 콘텐츠를 제공하지 않는다. Successful 2xx
  34. 34. Status Code 300 Multiple Choices 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거 요청자가 선택할 수 있는 작업 목록을 제공한다. 301 Moved Permanently GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된 302 Found 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다 304 Not Modified 마지막 요청 이후 요청한 페이지는 수정되지 않았다. 307 Temporary Redirect 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다. Redirection 3xx
  35. 35. Status Code 400 Bad Request 서버가 요청의 구문을 인식하지 못했다. 401 Unauthorized 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 404 Not Found 서버가 요청한 페이지를 찾을 수 없다. 405 Method Not Allowed 요청에 지정된 방법을 사용할 수 없다. 408 Request Timeout 서버의 요청 대기가 시간을 초과하였다. 413 Request Entity Too Large 요청이 너무 커서 서버가 처리할 수 없다. Client Error 4xx
  36. 36. Server Error 5xx Status Code 500 Internal Server Error 서버에 오류가 발생하여 요청을 수행할 수 없다. 501 Not Implemented 서버에 요청을 수행할 수 있는 기능이 없다. 502 Bad Gateway 서버가 게이트웨이나 프록시일때, 업스트림 서버에서 잘못된 응답을 받았다. 503 Service Unavailable 서버가 오버로드되었거나 유지관리를 위해 다운됨. 504 Gateway Timeout 서버가 게이트웨이나 프록시일때, 응답을 제때 못 받았다. 505 HTTP Version Not Supported 사용된 HTTP 프로토콜 버전을 지원안함.
  37. 37. Header Header
  38. 38. Header Accept Accept-Charset Accept-Features Accept-Encoding Accept-Language Accept-Ranges Access-Control-Allow-Credentials Access-Control-Allow-Origin Access-Control-Allow-Methods Access-Control-Allow-Headers Access-Control-Max-Age Access-Control-Expose-Headers Access-Control-Request-Method Access-Control-Request-Headers If-None-Match If-Range If-Unmodified-Since Last-Event-ID Last-Modified Link Location Max-Forwards Negotiate Origin Pragma Proxy-Authenticate Proxy-Authorization Range Referer Retry-After Sec-Websocket-Extension Sec-Websocket-Key Sec-Websocket-Origin Sec-Websocket-Protocol Sec-Websocket-Version Server Set-Cookie Set-Cookie2 Strict-Transport-Security TCN TE Transfer-Encoding Upgrade User-Agent Variant-Vary Vary Via Warning WWW-Authenticate X-Content-Duration X-Content-Security-Policy X-DNSPrefetch-Control X-Frame-Options X-Requested-With Age Allow Alternates Authorization Cache-Control Connection Content-Encoding Content-Language Content-Length Content-Location Content-MD5 Content-Range Content-Security-Policy Content-Type Cookie Date ETag Expect Expires From Host If-Match
  39. 39. Header Accept Accept-Charset Accept-Features Accept-Encoding Accept-Language Accept-Ranges Access-Control-Allow-Credentials Access-Control-Allow-Origin Access-Control-Allow-Methods Access-Control-Allow-Headers Access-Control-Max-Age Access-Control-Expose-Headers Access-Control-Request-Method Access-Control-Request-Headers If-None-Match If-Range If-Unmodified-Since Last-Event-ID Last-Modified Link Location Max-Forwards Negotiate Origin Pragma Proxy-Authenticate Proxy-Authorization Range Referer Retry-After Sec-Websocket-Extension Sec-Websocket-Key Sec-Websocket-Origin Sec-Websocket-Protocol Sec-Websocket-Version Server Set-Cookie Set-Cookie2 Strict-Transport-Security TCN TE Transfer-Encoding Upgrade User-Agent Variant-Vary Vary Via Warning WWW-Authenticate X-Content-Duration X-Content-Security-Policy X-DNSPrefetch-Control X-Frame-Options X-Requested-With Age Allow Alternates Authorization Cache-Control Connection Content-Encoding Content-Language Content-Length Content-Location Content-MD5 Content-Range Content-Security-Policy Content-Type Cookie Date ETag Expect Expires From Host If-Match
  40. 40. Header Server : 어떤 서버 프로그램의 정보를 클라이언트에게 제공 Host : 요청하는 도메인을 제공 ex) Server: nginx/1.7 ex) Host: www.example.com Location : Moved 일 경우 이동할 주소를 제공 ex) Location: www.example.com ex) Date: Wed, 15 Nov 1995 06:25:24 GMT Date : 서버의 시간을 제공
  41. 41. Header Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 클라이언트가 서버에게 받을 수 있는 파일의 형식 정의
  42. 42. Header Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 MIME TYPE
  43. 43. Header Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 format;quality=0.9 0.0 ~ 1.0
  44. 44. Header Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 ASCII, EUC-KR, EUC-JP, CP949, UTF-8…
  45. 45. Header ISO 639-1 Code: ko-kr, en-us, en-gb, ja-jp, zh-cn, zh-tw… Accept-Language: ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3 클라이언트가 서버에게 받을 수 있는 언어의 종류를 보냄
  46. 46. Header Accept-Encoding: gzip, deflate, sdch 클라이언트가 서버에게 가능한 자신이 해석 가능한 압축방법을 제시함
  47. 47. Header Accept-Encoding: gzip, deflate, sdch 클라이언트가 서버에게 가능한 자신이 해석 가능한 압축방법을 제시함 compress – UNIX "compress" program method deflate – compression based on the deflate algorithm, wrapped inside the zlib data format exi – W3C Efficient XML Interchange gzip – GNU zip format. This method is the most broadly supported identity – No transformation is used. This is the default value for content coding. pack200-gzip – Network Transfer Format for Java Archives. bzip2 – compression based on the free bzip2 format, supported by lighttpd lzma – compression based on (raw) LZMA is available in Opera 20, and in elinks via a compile-time option peerdist – Microsoft Peer Content Caching and Retrieval sdch – Google Shared Dictionary Compression for HTTP, based on VCDIFF. xz - LZMA2-based content compression, supported by a non-official Firefox patch.
  48. 48. Header Content-Encoding: gzip 서버가 클라이언트에게 보내는 내용의 압축방식을 알려줌
  49. 49. Header Content-Encoding: gzip 서버가 클라이언트에게 보내는 내용의 압축방식을 알려줌
  50. 50. Header Content-Type: text/html; charset=utf-8 서버가 클라이언트에게 보내는 내용의 type을 알려줌
  51. 51. Header Content-Length: 23021 보내는 내용의 크기를 바이트 단위로 알려줌
  52. 52. HTTP 2 HTTP 2
  53. 53. HTTP 2 엄청난 진보 = 전체 페이지 사이즈 증가 In 1998 google Now google
  54. 54. HTTP 2
  55. 55. HTTP 2 • 훨씬 더 많은 리소스로 구성되어 있다. • 다수의 도메인을 사용한다. • 과거에 비해 매우 동적으로 동작한다. • 보안이 보다 중요한 이슈가 되었다. • 헤더의 길이가 길어졌다.
  56. 56. HTTP 2 HPACK / Binary Protocol Server Push Multiplexing HTTP 2 장점
  57. 57. WSGI WSGI PEP 333 / PEP 3333 Web Application Handler Client
  58. 58. Examples
  59. 59. Examples https://github.com/Luavis/GDG-Devcamp-2016 https://git.io/v61jO or
  60. 60. References http://nuli.navercorp.com/sharing/blog/post/1132452 https://www.maxcdn.com/blog/spdy-http2-shift/ http://cacm.acm.org/magazines/2012/12/157870-spdying-up-the-web/abstract http://www.slideshare.net/oddpoet/spdy-13231459 http://helloworld.naver.com/ http://www.w3.org/ http://wikipedia.org/ http://wpcertification.blogspot.kr/2010/07/difference-between-no-cache-and-no.html http://icecreamie.tistory.com/52 http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/ Thanks! 감사합니다! http://fb.com/luavis http://github.com/Luavis http://luavis.kr

×