JavaWeb 4 -- Http 프로 토 콜 깊이 분석
HTTP 는 하이퍼텍스트 transfer protocol (하이퍼텍스트 전송 프로 토 콜) 의 약자 로 TCP / IP 프로 토 콜 의 응용 층 프로 토 콜 로 WEB 브 라 우 저 와 WEB 서버 간 의 데 이 터 를 교환 하 는 과정 을 정의 합 니 다.클 라 이언 트 가 웹 서버 에 연 결 된 후 웹 서버 의 한 웹 자원 을 얻 으 려 면 일정한 통신 형식 을 지 켜 야 합 니 다. HTTP 프로 토 콜 은 클 라 이언 트 와 웹 서버 의 빠 른 형식 을 정의 하 는 데 사 용 됩 니 다.
2. HTTP 프로 토 콜 의 버 전
HTTP 프로 토 콜 버 전: HTTP / 1.0, HTTP / 1.1
3. HTTP 1.0 과 HTTP 1.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 사용자 가 설정 하지 않 으 면 기본 적 인 상황 에서 브 라 우 저가 서버 에 보 내 는 것 은 모두 get 요청 입 니 다. 예 를 들 어 브 라 우 저 에서 직접 주소 로 접근 하고 하이퍼링크 방문 등 은 get 입 니 다.사용자 가 요청 방식 을 post 로 바 꾸 려 면 폼 의 제출 방식 을 변경 하여 이 루어 질 수 있 습 니 다.POST 나 GET 를 막론하고 서버 에 어떤 WEB 자원 을 요청 하 는 데 사 용 됩 니 다. 이 두 가지 방식 의 차 이 는 주로 데이터 전달 에 나타 납 니 다. 요청 방식 이 GET 방식 이 라면 요청 한 URL 주소 뒤에?
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET 방식 의 특징: URL 주소 뒤에 첨부 된 매개 변 수 는 제한 이 있 고 데이터 용량 은 보통 1K 를 초과 할 수 없습니다.요청 방식 이 POST 방식 이 라면 요청 한 실체 내용 에서 서버 에 데 이 터 를 보 낼 수 있 습 니 다. Post 방식 의 특징: 전송 한 데 이 터 는 무제 한 입 니 다.4.3 HTTP 요청 의 세부 사항 - 메시지 헤더
HTTP 요청 에 자주 사용 되 는 메시지 헤더
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg,
application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: http://localhost:8080/JavaWebDemoProject/Web/2.jsp Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; 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; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3) Accept-Encoding: gzip, deflate Host: localhost:8080 Connection: Keep-Alive
HTTP 응답
5.1 HTTP 응답 에 포 함 된 내용
하나의 HTTP 응답 은 서버 가 클 라 이언 트 에 게 전송 하 는 데 이 터 를 대표 합 니 다. 이 는 하나의 상태 줄, 몇 개의 메시지 헤더, 그리고 실체 내용 을 포함 합 니 다. 범례:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 105
Date: Tue, 27 May 2014 16:23:28 GMT
<html> <head> <title>Hello World JSP</title> </head> <body> Hello World! </body> </html>
5.2 HTTP 응답 디 테 일 - 상태 줄
상태 줄 형식: HTTP 버 전 번호 상태 코드 원인 설명
<CRLF>
:HTTP/1.1 200 OK
상태 코드 는 서버 가 요청 한 처리 결 과 를 나타 내 는 데 사 용 됩 니 다. 세 자리 의 10 진수 입 니 다.응답 상태 코드 는 5 가지 로 나 뉘 는데 다음 과 같다.
5.3 HTTP 응답 디 테 일 -- 상용 응답 헤드
HTTP 응답 에 자주 사용 되 는 응답 헤더 (메시지 헤더)
6. 서버 에서 응답 헤드 를 설정 하여 클 라 이언 트 브 라 우 저의 행동 을 제어 합 니 다.
6.1. 위치 응답 헤드 를 설정 하여 재 설정 요청
package gacl.http.study;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** * @author gacl * */
public class ServletDemo01 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setStatus(302);//
/** * , Location , , */
response.setHeader("Location", "/JavaWeb_HttpProtocol_Study_20140528/1.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
"브 라 우 저 에서 URL 주 소 를 사용 할 때"http://localhost:8080/JavaWeb_HttpProtocol_Study_20140528 / servlet / servletDemo 01 "ServletDemo 01 을 방문 하면 서버 가 응답 한 후 브 라 우 저 에 보 내 는 상태 코드 와 응답 헤드 정 보 를 볼 수 있 습 니 다. 아래 그림 과 같 습 니 다.
서버 가 302 상태 코드 를 되 돌려 브 라 우 저 에 게 당신 이 원 하 는 자원 이 없다 는 것 을 알려 줍 니 다. 그러나 나 는 Location 응답 헤드 를 통 해 어디 에 있 는 지 알려 줍 니 다. 브 라 우 저 는 응답 헤드
Location
를 분석 한 후에 /JavaWeb_HttpProtocol_Study_20140528/1.jsp
페이지 로 넘 어가 야 한 다 는 것 을 알 기 때문에 자동 으로 1.jsp
로 넘 어 갑 니 다. 다음 그림 과 같 습 니 다.6.2 Content - Encoding 응답 헤드 를 설정 하여 브 라 우 저 데이터 의 압축 형식 을 알려 줍 니 다.
package gacl.http.study;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** * @author gacl * *1、 GZIPOutputStream *2、 Content-Encoding , */
public class ServletDemo02 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = "abcdabcdabcdabcdabcdabcdab" +
"cdabcdabcdabcdabcdabcdabcdabcdabc" +
"dabcdabcdabcdabcdabcdabcdabcdabc" +
"dabcdabcdabcdabcdabcdabcdabcdabcdab" +
"cdabcdabcdabcdabcdabcdabcdabcdabcdab" +
"cdabcdabcdabcdabcdabcdabcdabcdabcdab" +
"cdabcdabcdabcdabcdabcdabcdabcdabcdab" +
"cdabcdabcdabcdabcdabcdabcdabcdabcdabcd";
System.out.println(" :" + data.getBytes().length);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
GZIPOutputStream gout = new GZIPOutputStream(bout); //buffer
gout.write(data.getBytes());
gout.close();
//
byte g[] = bout.toByteArray();
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-Length",g.length +"");
response.getOutputStream().write(g);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
서버 가 브 라 우 저 에 보 낸 응답 정 보 는 다음 과 같 습 니 다.
브 라 우 저가 지원 하 는 압축 형식 은 다음 과 같 습 니 다.
6.3. content - type 응답 헤드 를 설정 하고 전송 데이터 형식 을 지정 합 니 다.
package 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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo03 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/** * (Accept) : * application/x-ms-application, * image/jpeg, * application/xaml+xml, * image/gif, * image/pjpeg, * application/x-ms-xbap, * application/vnd.ms-excel, * application/vnd.ms-powerpoint, * application/msword, */
response.setHeader("content-type", "image/jpeg");// content-type "image/jpeg"
// img WP_20131005_002.jpg ,
InputStream in = this.getServletContext().getResourceAsStream("/img/WP_20131005_002.jpg");
byte buffer[] = new byte[1024];
int len = 0;
OutputStream out = response.getOutputStream();//
while ((len = in.read(buffer)) > 0) {// (in) (buffer)
out.write(buffer, 0, len);//
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
서버 가 브 라 우 저 에 보 낸 응답 정 보 는 다음 과 같 습 니 다.
ServletDemo 03 의 운행 결 과 는 다음 그림 과 같다.
브 라 우 저 에 그림 표시
6.4 、 refresh 응답 헤드 를 설정 하여 브 라 우 저 를 정기 적 으로 새로 고침 합 니 다.
package gacl.http.study;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo04 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/** * refresh , 3 */
// response.setHeader("refresh", "3");
/** * refresh , 3 http://www.baidu.com */
response.setHeader("refresh", "3;url='http://www.baidu.com'");
response.getWriter().write("gacl");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
6.5. content - disposition 응답 헤드 를 설정 하여 브 라 우 저 로 하여 금 파일 을 다운로드 하 게 합 니 다.
package 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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo05 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/** * content-disposition , */
response.setHeader("content-disposition", "attachment;filename=xxx.jpg");
InputStream in = this.getServletContext().getResourceAsStream("/img/1.jpg");
byte buffer[] = new byte[1024];
int len = 0;
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
브 라 우 저 에서 ServletDemo 05 를 방문 하면 다음 그림 과 같이 파일 다운로드 상자 가 팝 업 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.