1. HTTP 프로토콜이란 무엇입니까?
HTTP는 하이퍼 텍스트 전송 프로토콜의 약어입니다. TCP/IP 프로토콜의 애플리케이션 계층 프로토콜로 웹 브라우저와 웹 서버간에 데이터를 교환하는 프로세스를 정의하는 데 사용됩니다. 클라이언트가 웹 서버에 연결 한 후 웹 서버에서 특정 웹 리소스를 얻으려면 특정 통신 형식을 준수해야합니다. HTTP 프로토콜은 클라이언트가 웹 서버와 통신 할 수있는 형식을 정의하는 데 사용됩니다.
2. HTTP 프로토콜 버전
HTTP 프로토콜 버전 : HTTP/1.0, HTTP/1.1
3. HTTP1.0과 HTTP1.1의 차이
HTTP 1.0 프로토콜에서 클라이언트가 웹 서버와 연결을 설정 한 후 하나의 웹 리소스 만 얻을 수 있습니다.
HTTP 1.1 프로토콜에서 클라이언트가 웹 서버와 연결을 설정 한 후 하나의 연결에서 여러 웹 리소스를 얻습니다.
4. HTTP 요청
4.1. HTTP 요청에 포함 된 내용
클라이언트가 서버에 연결하면 서버에서 HTTP 요청을 보내는 클라이언트라고하는 서버에서 특정 웹 리소스를 요청합니다.
완전한 HTTP 요청에는 다음 컨텐츠가 포함됩니다. 요청 행, 여러 메시지 헤더 및 엔티티 컨텐츠의 예 :
4.2. HTTP 요청의 세부 사항 - 요청 라인
요청 줄의 GET을 요청 메소드라고합니다. 요청 방법에는 다음이 포함됩니다 : Post, Get, Head, Options, Delete, Trace, Put 및 일반적으로 사용되는 것은 다음과 같습니다. Get, Post
사용자에게 설정이없는 경우 기본적으로 브라우저는 서버로 요청을 보냅니다. 예를 들어, 액세스는 브라우저에 직접 입력되며 액세스는 하이퍼 링크 등을 클릭합니다. 등이 모두 얻어집니다. 사용자가 게시 할 요청 메소드를 변경하려면 양식 제출 방법을 변경할 수 있습니다.
Post 또는 Get이 서버에서 웹 리소스를 요청하는 데 사용되는지 여부. 이 두 가지 방법의 차이점은 주로 데이터 전송에 반영됩니다. 요청 메소드가 가져 오면 서버에 적용된 데이터를 A 형태로 가져올 수 있습니까? 요청 된 URL 주소 및 여러 데이터가 &와 같이 분리됩니다. get /mail/1.html?name=ABC&password=xyz http/1.1
GET 메소드의 기능 : URL 주소에 첨부 된 매개 변수는 제한되어 있으며 데이터 용량은 일반적으로 1K를 초과 할 수 없습니다.
요청 메소드가 게시되면 요청 된 엔티티 컨텐츠에서 데이터를 서버로 전송할 수 있습니다. 사후 방법의 특성은 다음과 같습니다. 전송 된 데이터의 양은 무제한입니다.
4.3. HTTP 요청의 세부 사항 - 메시지 헤더
HTTP 요청의 공통 메시지 헤더
수락 : 브라우저는이 헤더와 지원하는 데이터 유형을 통해 서버를 지시합니다. accept-charset : 브라우저는이 헤더를 통해 서버를 알려줍니다. 수락-인코딩 : 브라우저는이 헤더를 통해 서버를 지시하고 지원되는 압축 형식 수락 language : 브라우저는이 헤더를 통해 서버를 알려줍니다. if-modified-since : 브라우저는이 헤더를 통해 서버와 데이터를 캐시 할 시간을 알려줍니다. 참조 : 브라우저는이 헤더를 통해 서버와 클라이언트가 어떤 페이지를 입력하는지 알려줍니다. 연결 : 브라우저는이 헤더를 통해 서버를 지시하고 요청이 완료된 후 링크 또는 링크를 분리할지 여부를 알려줍니다.
예를 들어:
수락 : 응용 프로그램/x-ms- 적용, 이미지/jpeg, 응용 프로그램/xaml+xml, image/gif, image/pjpeg,
응용 프로그램/x-ms-xbap, 응용 프로그램/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */ *
참조 : http : // localhost : 8080/javawebdemoproject/web/2.jsp
허용 : ZH-CN
사용자 에이전트 : Mozilla/4.0 (호환 가능; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; 미디어 센터 PC 6.0; .NET4.0C; .NET4.0E; Infopath.3).
인코딩 수락 : gzip, deflate
호스트 : LocalHost : 8080
연결 : 계속하십시오
5. HTTP 응답
5.1. HTTP 응답에 포함 된 내용
HTTP 응답은 서버가 클라이언트로 다시 전송되는 데이터를 나타냅니다. 여기에는 상태 줄, 여러 메시지 헤더 및 엔티티 컨텐츠가 포함됩니다.
예:
HTTP/1.1 200 OKSERVER : Apache-Coyote/1.1content-type : text/html; charset = iso-8859-1content-length : 105date : 105date : Tue 2014 16:23:28 GMT <Html> <Head> <Title> Hello World JSP </head> <Body> Hello World! </body> </html>
5.2. HTTP 응답의 세부 사항 - 상태 라인
상태 라인 형식 : HTTP 버전 번호 상태 코드 이유 이유 <CRLF>
예 : HTTP/1.1 200 OK
상태 코드는 요청의 서버 처리 결과를 나타내는 데 사용됩니다. 3 자리 소수점 수입니다. 응답 상태 코드는 다음과 같이 5 가지 범주로 나뉩니다.
5.3. HTTP 응답 세부 사항 - 일반적으로 사용되는 응답 헤더
HTTP 응답의 공통 응답 헤더 (메시지 헤더)
위치 : 서버는이 헤더를 사용하여 서버로 점프 할 위치를 알려줍니다. 서버는이 헤더를 사용하여 브라우저를 사용하여 서버 컨텐츠 인코딩의 모델을 알려줍니다. 서버는 브라우저를 사용하여 브라우저에 데이터 컨텐츠 길이의 압축 형식을 알려줍니다. 서버는이 헤더를 사용 하여이 데이터의 길이를 사용하여 컨텐츠를 반환합니다. 서버는이 헤더를 사용하여 브라우저를 반환 할 데이터 유형을 알려줍니다. 서버는이 헤더를 사용하여 브라우저를 사용하여 콘텐츠 공로를 새로 고침하도록 지시합니다.이 헤더를 사용하여 브라우저를 사용하여 다운로드 된 방식으로 데이터를 작성 하여이 헤더를 사용하여 브라우저를 사용하여 브라우저를 알리기 위해 브라우저를 알리십시오.-1 블록으로 반환 할 수 있도록 브라우저를 알려줍니다. 캐시가 없습니다
프라그마 : 캐시가 없습니다
6. 클라이언트 브라우저의 동작을 제어하기 위해 서버에서 응답 헤더를 설정
6.1. 요청 리디렉션을 실현하려면 위치 응답 헤더를 설정하십시오
패키지 gacl.http.study; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpervletrequest; import javax.servlet.http.httprsont;/* GACL * */public class servletdemo01은 httpservlet {public void doget (httpservletrequest request, httpservletreponse responske)을 servletexception, ioexception {response.setstatus (302); // 설정을 설정하고 서버를 설정하고 위치를 설정합니다. 소위 요청 리디렉션*/response.setheader ( "위치", "/javaweb_httpprotocol_study_20140528/1.jsp"); } public void dopost (httpservletrequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}URL 주소 "http : // localhost : 8080/javaweb_httpprotocol_stuby_20140528/servlet/servletdemo01"을 사용하면 Servletdemo01에 액세스하려면 아래 그림과 같이 브라우저에 표시된 후 브라우저에 보낸 상태 코드 및 응답 헤더 정보를 볼 수 있습니다.
서버는 302 상태 코드를 반환하여 브라우저에 원하는 리소스가 없다고 알려주지 만 위치 응답 헤더를 통해 어디에 있는지 알려줍니다. 브라우저가 응답 헤더를 구문 분석 한 후 /javaweb_httpprotocol_stuby_20140528/1.jsp 페이지로 점프하고 싶다는 것을 알고 있으므로 아래 그림과 같이 자동으로 1.jsp로 이동합니다.
6.2. 콘텐츠 인코딩 응답 헤더를 설정하여 브라우저에 데이터의 압축 형식을 알려줍니다.
패키지 gacl.http.study; import java.io.bytearrayoutputStream; import java.io.ioexception; import java.util.zip.gzipoutputstream; import javax.servlet.servletexception; import javax.servlet.httpservlet; import; javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpservletrequest; import javax.servlet.http.htttp.httpervletresponse;/***@author gaCl*이 애플릿은 다음 두 개의 작은 지식 지점을 보여주는 데 사용됩니다. GZIPOUTPUTSTREAM 스트림을 사용하여 데이터*2를 압축하십시오. 응답 헤더 컨텐츠 인코딩을 설정하여 브라우저에 서버가 보낸 데이터의 압축 형식이 서버*/public class servletdemo02가 httpservlet {public void doget (httpservletrequest request, httpservletresponse responsk)을 확장한다는 것을 브라우저에 알려줍니다. "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd "cdabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdab "cdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdabcd"; System.out.println ( "原始数据的大小为 :" + data.getBytes (). 길이); BYTEARRAYOUTPUTSTREAM BOUT = 새로운 BYTEARRAYOUTPUTSTREAM (); gzipoutputStream gant = 새로운 gzipoutputStream (Bout); // Buffer gant.Write (data.getBytes ()); gant.close (); // 압축 데이터를 가져옵니다. 바이트 g [] = bout.tobytearray (); Response.SetHeader ( "Content-Encoding", "GZIP"); Response.SetHeader ( "Content-Length", G.Length +""); response.getOutputStream (). 쓰기 (g); } public void dopost (httpservletrequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}서버가 브라우저로 전송 한 응답 정보는 다음과 같습니다.
브라우저에서 지원하는 압축 형식은 다음과 같습니다.
6.3. 컨텐츠 유형 응답 헤더 설정 및 루프백 데이터 유형을 지정합니다.
패키지 gacl.http.study; import java.io.ioexception; import java.io.inputStream; import java.io.outputStream; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.httpp.httpp.httppect. javax.servlet.http.httpertrequest; import javax.servlet.http.htttp.httpservletresponse; public class servletdemo03 확장 httpservlet {public void doget (httpservletrequest 요청, httpservletrepons 브라우저는 다음과 같습니다. "Image/JPEG"); // 컨텐츠 유형 응답 헤더를 사용하여 브라우저로 전송 된 데이터 유형을 "Image/JPEG"로 지정하고 프로젝트의 루트 디렉토리에있는 IMG 폴더의 이미지를 읽고 입력 스트림 입력 스트림 in =를 반환합니다. this.getServletContext (). getResourCeasStream ( "/img/wp_20131005_002.jpg"); 바이트 버퍼 [] = 새로운 바이트 [1024]; int len = 0; outputStream out = response.getOutputStream (); // 출력 스트림을 가져옵니다. request, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}서버가 브라우저로 전송 한 응답 정보는 다음과 같습니다.
Servletdemo03의 실행 결과는 다음과 같습니다.
이미지는 브라우저에 표시됩니다
6.4. 브라우저를 정기적으로 새로 고치도록 새로 고침 응답 헤더를 설정하십시오.
패키지 gacl.http.study; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpervletrequest; import javax.servlet.httpphone; Servletdemo04는 httpservlet {public void doget (httpservletrequest request, httpservletreponse response)을 촉진합니다. servletexception { / ** * 브라우저가 3 초마다 정기적으로 새로 고침되도록 새로 고침 응답 헤더를 설정합니다. /** * 브라우저가 3 초 안에 http://www.baidu.com으로 점프 할 수 있도록 새로 고침 응답 헤더를 설정하십시오. response.getWriter (). 쓰기 ( "GACL"); } public void dopost (httpservletrequest 요청, httpservletResponse 응답) servletexception, ioexception {this.doget (요청, 응답); }} 6.5. 브라우저가 파일을 다운로드하도록 컨텐츠 예측 응답 헤더를 설정하십시오.
패키지 gacl.http.study; import java.io.ioexception; import java.io.inputStream; import java.io.outputStream; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.httpp.httpp.httppect. javax.servlet.http.httpervletrequest; import javax.servlet.http.htttp.httpervletresponse; public class servletdemo05 확장 httpservlet {public void doget (httpservletrequest 요청, httpservletresponse 응답) servletexcemention { /* excementipection 응답 헤더 브라우저가 파일 */ responion.setheader ( "content-disposition", "첨부 파일; filename = xxx.jpg")를 다운로드하도록합니다. inputStream in = this.getServletContext (). getResourCeasStream ( "/img/1.jpg"); 바이트 버퍼 [] = 새로운 바이트 [1024]; int len = 0; outputStream out = response.getOutputStream (); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); }} public void dopost (httpservletrequest 요청, httpservletreponse 응답) servletexception, ioexception {this.doget (요청, 응답); }}브라우저에서 Servletdemo05에 액세스 할 때 다음 그림과 같이 파일 다운로드 상자가 나타납니다.
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.