> Java > java지도 시간 > 본문

Java 및 HTTP 프로토콜에 대한 자세한 설명

黄舟
풀어 주다: 2017-09-08 09:45:45
원래의
1694명이 탐색했습니다.

이 글에서는 주로 Java 및 Http 프로토콜의 세부 소개에 대한 관련 정보를 소개합니다. 이 부분의 내용을 배우고 이해하는 데 도움이 되는 예제가 있습니다. 도움이 필요한 친구는

Java 및 Http 프로토콜의 세부 소개

를 참조하세요.

소개 HTTP(Hypertext Transfer Protocol)는 요청 및 응답 모드를 기반으로 하는 상태 비저장 애플리케이션 계층 프로토콜이며 종종 TCP 연결 방법을 기반으로 합니다. HTTP 프로토콜의 주요 기능은 다음과 같습니다. 1. 클라이언트/서버 모드를 지원합니다.

2. 간단하고 빠릅니다. 클라이언트가 서버에 서비스를 요청할 때 요청 방법과 경로만 보내면 됩니다. HTTP 프로토콜은 단순하기 때문에 통신 속도가 매우 빠릅니다.

3. 유연성: HTTP는 모든 유형의 데이터 개체 전송을 허용합니다. 유형은 Content-Type으로 표시됩니다.
4. 연결 없음: 즉, 각 연결은 하나의 요청만 처리하고 고객의 응답을 받은 후 연결이 끊어집니다. 이 방법을 사용하면 전송 시간이 절약됩니다.
5. Stateless: Stateless는 프로토콜에 트랜잭션 처리를 위한 메모리 기능이 없음을 의미합니다.

http1.0 프로토콜의 기본 연결 방법은 비영구 연결이고, HTTP1.1의 기본 연결 방법은 영구 연결입니다.

비영구 연결

: 서버가 개체를 보낼 때마다 해당 TCP 연결이 닫힙니다. 이는 각 연결이 다른 개체를 전송하는 데 사용될 만큼 오래 지속되지 않음을 의미합니다. 각 TCP 연결은 하나의 요청 메시지와 하나의 응답 메시지를 전송하는 데만 사용됩니다.

지속적인 연결

: 서버는 응답을 보낸 후에도 TCP 연결을 열어 둡니다. 동일한 클라이언트/서버 쌍 간의 후속 요청 및 응답은 이 연결을 통해 전송될 수 있습니다. HTTP/1.1의 기본 모드는 파이프라인 영구 연결을 사용합니다.

1. HTTP 프로토콜에 대한 자세한 설명 요청

//请求行
POST /reg.jsp HTTP/ (CRLF)    

//消息报头
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

//请求正文
user=jeffrey&pwd=1234
로그인 후 복사

위는 http 요청의 세 부분입니다:
요청 라인, 메시지 헤더, 요청 본문.

요청 줄은 공백으로 구분된 메서드 기호로 시작하고 그 뒤에 요청된 URI와 프로토콜 버전이 옵니다.

메소드 요청-URI HTTP-버전 CRLF

여기서 메서드는 요청 메서드를 나타냅니다. POST, GET, PUT, DELETE 등), HTTP-Version은 요청된 HTTP 프로토콜 버전을 나타냅니다. CRLF는 캐리지 리턴 및 줄 바꿈을 나타냅니다.


2. 응답 장 HTTP 프로토콜 세부 설명

//状态行
HTTP/1.1 200 OK (CRLF)

//消息报头
Cache-Control: private, max-age=30
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 25 May 2009 03:20:33 GMT
Last-Modified: Mon, 25 May 2009 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 25 May 2009 03:20:02 GMT
Content-Length: 12173

//响应正文
略
로그인 후 복사

HTTP 응답도 세 부분으로 구성됩니다. 즉:
상태 줄, 메시지 헤더, 응답 본문

상태 줄 형식은 다음과 같습니다.


  HTTP-Version Status-Code Reason-Phrase CRLF
로그인 후 복사

여기서, HTTP-Version은 서버 HTTP 프로토콜의 버전을 나타내고, Status-Code는 서버에서 보낸 응답 상태 코드를 나타냅니다. Reason-Phrase는 상태 코드의 텍스트 설명을 나타냅니다.

공통 상태 코드, 상태 설명, 지침:

200 OK //클라이언트 요청이 성공했습니다.
400 잘못된 요청 //클라이언트 요청에 구문 오류가 있어 서버에서 이해할 수 없습니다.

401 Unauthorized //요청 승인되지 않았습니다. 이 상태 코드는 WWW-인증 헤더 필드와 함께 사용해야 합니다

403 금지됨 //서버가 요청을 받았지만 서비스 제공을 거부했습니다.
404 찾을 수 없음 //요청한 리소스가 존재하지 않습니다. 예: 잘못된 URL이 입력되었습니다
500 내부 서버 오류 / /서버에 예기치 않은 오류가 발생했습니다.
503 서버를 사용할 수 없습니다. //서버가 현재 클라이언트의 요청을 처리할 수 없으며 일정 시간이 지나면 정상으로 돌아올 수 있습니다


3. HTTP 프로토콜 메시지 헤더에 대한 자세한 설명

클라이언트에서 서버로의 HTTP 메시지 요청 및 서버에서 클라이언트로의 응답. 요청 메시지와 응답 메시지 모두 시작 줄(요청 메시지의 경우 시작 줄은 요청 줄, 응답 메시지의 경우 시작 줄은 상태 줄), 메시지 헤더(선택 사항), 빈 줄(한 줄만)로 구성됩니다. CRLF 사용) 및 메시지 본문(선택 사항) 구성.

HTTP 메시지 헤더에는 일반 헤더, 요청 헤더, 응답 헤더 및 엔터티 헤더가 포함됩니다. 각 헤더 필드는 이름 + ":" + 공백 + 값으로 구성됩니다. 메시지 헤더 필드의 이름은 대소문자를 구분하지 않습니다.

1. 요청 헤더

요청 헤더를 사용하면 클라이언트가 추가로 요청한 정보와 클라이언트 자신의 정보를 서버에 전달할 수 있습니다.

일반적으로 사용되는 요청 헤더

Accept请求报头域用于指定客户端接受哪些类型的信息。
Accept-Charset请求报头域用于指定客户端接受的字符集。
Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。
Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。
Authorization请求报头域主要用于证明客户端有权查看某个资源。

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

2、响应报头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

常用的响应报头

Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
Server响应报头域包含了服务器用来处理请求的软件信息

3. 实体报头

请求和响应消息都可以传送一个实体。

常用的实体报头

Content-Encoding指示已经被应用到实体正文的附加内容的编码。

Content-Language实体报头域描述了资源所用的自然语言。

Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。
Last-Modified实体报头域用于指示资源的最后修改日期和时间。
Expires实体报头域给出响应过期的日期和时间。

四、补充

1、HTTP协议Content Lenth限制漏洞导致拒绝服务攻击

使用POST方法时,可以设置ContentLenth来定义需要传送的数据长度,例如ContentLenth:999999999,在传送完成前,内 存不会释放,攻击者可以利用这个缺陷,连续向WEB服务器发送垃圾数据直至WEB服务器内存耗尽。这种攻击方法基本不会留下痕迹。

2、为了提高用户使用浏览器时的性能,现代浏览器还支持并发的访问方式,浏览一个网页时同时建立多个连接,以迅速获得一个网页上的多个图标,这样能更快速完成整个网页的传输。HTTP1.1中提供了这种持续连接的方式,而下一代HTTP协议:HTTP-NG更增加了有关会话控制、丰富的内容协商等方式的支持,来提供更高效率的连接。

五.Java利用HTTP协议实现联网和下载

Url的请求连接(Get方式)


String currentUrl=“http://www.myWeb.com/login.jsp?userName='Devin'&passWord='mypassword'”; //URL ?后面的内容为HTTP请求的正文
URL url = new URL(currentUrl);
 
HttpURLConnection httpurlconnection = url.openConnection();
//下面的设置对应HTTP请求中的消息报头
httpurlconnection.setRequestProperty("User-Agent",CommonValues.User_Agent);
httpurlconnection.setRequestProperty("Accept",CommonValues.Accept);
httpurlconnection.setRequestProperty("Accept-Charset",CommonValues.Accept_Charset);
httpurlconnection.setRequestProperty("Accept-Language",CommonValues.Accept_Language);
httpurlconnection.setRequestProperty("Connection",CommonValues.Connection);
httpurlconnection.setRequestProperty("Keep-Alive",CommonValues.Keep_Alive);
httpurlconnection.setConnectTimeout(CommonValues.ConnectionTimeOut);
httpurlconnection.setReadTimeout(CommonValues.ReadTimeOut);
       
httpurlconnection.connect();
      
int responsecode = httpurlconnection.getResponseCode();
       
if(responsecode == HttpURLConnection.HTTP_OK) //对应HTTP响应中状态行的响应码
{
  //操作请求流,这里对应HTTP响应中的响应正文
}
       
if (httpurlconnection != null) 
{
  httpurlconnection.disconnect();
}
로그인 후 복사

위 내용은 Java 및 HTTP 프로토콜에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!