>  기사  >  http 메시지 형식에 대한 자세한 설명

http 메시지 형식에 대한 자세한 설명

藏色散人
藏色散人원래의
2019-06-06 14:13:2313781검색

HTTP 메시지는 텍스트 중심입니다. 메시지의 각 필드는 ASCII 코드 문자열이며 각 필드의 길이는 불확실합니다. HTTP에는 요청 메시지와 응답 메시지라는 두 가지 유형의 메시지가 있습니다.

http 메시지 형식에 대한 자세한 설명

HTTP 요청 메시지

HTTP 요청 메시지는 요청 라인, 요청 헤더, 빈 라인, 요청 데이터의 네 부분으로 구성됩니다. 다음 그림은 요청 메시지 기사의 일반적인 형식을 보여줍니다.

or

<request-line>
<headers>
<blank line>
[<request-body>

1. 요청 헤더

요청 라인은 공백으로 구분된 요청 방법 필드, URL 필드, HTTP 프로토콜 버전 필드의 세 가지 필드로 구성됩니다. 예를 들어 GET /index.html HTTP/1.1입니다.

HTTP 프로토콜의 요청 방법에는 GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE 및 CONNECT가 포함됩니다.

일반적인 요청 방법은 다음과 같습니다.

1).GET

가장 일반적인 요청 방법은 클라이언트가 서버에서 문서를 읽으려고 할 때, 웹 페이지의 링크를 클릭하거나 탐색할 때입니다. 웹 브라우징을 위해 서버의 주소 표시줄에 URL을 입력하면 GET 방식이 사용됩니다. GET 메소드를 사용하려면 서버가 응답 메시지의 데이터 부분에 URL로 찾은 리소스를 넣고 이를 클라이언트로 다시 보내야 합니다. GET 메소드를 사용하는 경우 요청 매개변수와 해당 값이 URL에 추가됩니다. 물음표("?")는 URL의 끝과 전달된 요청 매개변수의 시작을 나타내는 데 사용됩니다. 매개변수가 제한되어 있습니다. 예를 들어 /index.jsp?id=100&op=bind의 경우 GET을 통해 전달된 데이터가 주소에 직접 표현되므로 요청 결과를 링크 형태로 친구들에게 보낼 수 있습니다. Google로 Dodomy를 검색하는 경우 요청 형식은 다음과 같습니다.

GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r

보시다시피 GET 요청에는 일반적으로 "요청 콘텐츠" 부분이 포함되지 않으며 요청 데이터는 다음 형식의 요청 라인에 표현됩니다. 주소. 주소 링크는 다음과 같습니다.


<a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp
&q=domety&aq=f&oq=</a>

주소에서 "?" 뒤의 부분은 GET을 통해 전송된 요청 데이터입니다. 주소 표시줄에서 각 데이터가 "&" 기호로 구분되어 있음을 확인할 수 있습니다. 분명히 이 방법은 개인 데이터를 전송하는 데 적합하지 않습니다. 또한 브라우저마다 주소에 대한 문자 제한이 다르기 때문에 일반적으로 최대 1024자까지만 인식할 수 있으므로 많은 양의 데이터를 전송해야 하는 경우 GET 방법은 적합하지 않습니다.

2).POST

위에서 언급한 GET 방식이 적합하지 않은 상황에서는 POST 방식을 사용하면 클라이언트가 서버에 더 많은 정보를 제공할 수 있으므로 POST 방식을 고려해 볼 수 있습니다. POST 방식은 요청 매개변수를 HTTP 요청 데이터에 캡슐화해 이름/값 형태로 나타나며, 이런 방식으로 전송되는 데이터의 크기에 제한이 없다. URL에는 표시되지 않습니다. 위의 검색 돔티를 예로 들면, POST 메소드를 사용하는 경우 형식은 다음과 같습니다.

POST /search HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  

hl=zh-CN&source=hp&q=domety

POST 메소드 요청 라인에는 데이터 문자열이 포함되어 있지 않음을 알 수 있습니다. 이러한 데이터는 "요청 콘텐츠"에 저장됩니다. 섹션, 각 데이터 사이도 "&" 기호로 구분됩니다. POST 방식은 주로 페이지 형태로 사용됩니다. POST는 GET의 기능도 완성할 수 있기 때문에 대부분의 사람들은 폼을 디자인할 때 항상 POST 방식을 사용합니다. 사실 이는 오해입니다. GET 방식에도 나름의 특징과 장점이 있습니다. 상황에 따라 GET을 사용할지, POST를 사용할지 선택해야 합니다

3).HEAD

HEAD는 서버가 수신 후에만 응답을 반환한다는 점을 제외하면 GET과 같습니다. 응답 내용을 보내지 않고 HEAD 요청 헤더. 특정 페이지의 상태만 확인해야 하는 경우 전송 과정에서 페이지 내용이 생략되므로 HEAD를 사용하는 것이 매우 효율적입니다.

2. 요청 헤더

요청 헤더는 한 줄에 한 쌍씩 키워드/값 쌍으로 구성되며, 키워드와 값은 영문 콜론 ":"으로 구분됩니다. 요청 헤더는 클라이언트의 요청에 대해 서버에 알립니다. 일반적인 요청 헤더는 다음과 같습니다.

User-Agent: 요청을 생성한 브라우저 유형입니다.

수락: 클라이언트가 인식하는 콘텐츠 유형 목록입니다.

호스트: 요청된 호스트 이름으로, 여러 도메인 이름이 동일한 IP 주소, 즉 가상 호스트에 있을 수 있습니다.

3. 빈 줄

마지막 요청 헤더가 빈 줄이 된 후 캐리지 리턴 및 라인 피드 문자를 보내 아래에 더 이상 요청 헤더가 없음을 서버에 알립니다.

4. 요청 데이터

요청 데이터는 GET 방식이 아닌 POST 방식에서 사용됩니다. POST 방법은 고객이 양식을 작성해야 하는 상황에 적합합니다. 요청 데이터와 관련하여 가장 일반적으로 사용되는 요청 헤더는 Content-Type 및 Content-Length입니다.

HTTP 메시지

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

아래에 표시된 것처럼 HTTP 응답 형식은 요청 형식과 매우 유사합니다.

<status-line>
<headers>
<blank line>
[<response-body>]

보시다시피 응답의 유일한 실제 차이점은 첫 번째 줄이 요청 정보를 상태 정보로 대체한다는 것입니다. . 상태 줄은 상태 코드를 제공하여 요청된 리소스를 설명합니다.

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

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

  • 1xx:指示信息--表示请求已接收,继续处理。
  • 2xx:成功--表示请求已被成功接收、理解、接受。
  • 3xx:重定向--要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误--请求有语法错误或请求无法实现。
  • 5xx:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的说明如下。

  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

下面给出一个HTTP响应报文例子

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

关于HTTP请求GET和POST的区别

1.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

  POST提交:把提交的数据放置在是HTTP包的包体<request-body>中。上文示例中红色字体标明的就是实际的传输数据

  因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

2.传输数据的大小:

首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

因此对于GET提交时,传输数据就会受到URL长度的限制。

POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

3.安全性:

POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。

위 내용은 http 메시지 형식에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.