HTTP协议

HTTP协议简介

HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是网络应用层的协议,建立在TCP/IP协议基础之上。HTTP协议是可靠的TCP连接,默认端口号为80.

HTTP协议基于客户/服务器模式,客户端主动发出HTTP请求(并且只能由客户端发现请求),服务器端接收到HTTP请求后返回HTTP响应结果。

HTTP协议严格规定了HTTP请求和HTTP响应的格式。

 

HTTP请求

一个HTTP请求由以下几个部分构成:

  请求行:请求方式、URI、HTTP协议版本

  若干个请求头(Request Header)

  实体内容:请求正文(Request Content)

请求正文和最后一个请求头之间有一个空行。

GET /docs/security-howto.html HTTP/1.1
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/
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)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive

  1.请求行:请求方式、URI、HTTP协议版本

    (1)请求方式包括 POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT

    GET:客户程序可通过此方式访问服务器上的一个文档,服务器把文档发给客户程序。

    POST:客户程序通过此方式发送大量数据给服务器。在HTTP请求中除了要包含要访问的文档的URI外,还包括大量的请求正文,通常是大量的HTML表单数据。

    HEAD:客户程序和服务器之间交流一些内部数据,服务器不会返回具本文档。HEAD一般不单独使用,而作为一种辅助作用。如搜索引擎HEAD请求网页标志信息,HTTP服务器进行安全认证等。

    PUT:客户程序通过此方式上传文档给服务器。

    DELETE:客户程序通过此方式删除服务器上的某个文档。

    常用POST和GET,它们都用于向服务器请求某个WEB资源,区别主要表现在数据传递上:
      GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,但附带的参数是有限制的,其数据容量通常不能超过1K。例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1
               POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

  (2)URI(Universal Resouce Identifier,统一资源标识符)用于标识要访问的网络资源。在HTTP请求中,只要给出相对于服务器根目录的相对目录即可,因此以“/”开头。

  (3)HTTP协议版本: HTTP/1.1或 HTTP/1.0

    在HTTP1.0协议中,服务器返回HTTP响应后即断开,因此客户端与web服务器建立连接后,只能获得一个web资源。

    在HTTP1.1协议中,服务器返回HTTP响应后并不立即断开,因此允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。

2.请求头

  请求头包含客户端向服务器端传递的请求附加信息以及客户端自身的信息。常用的请求头如下:

  Accept:用于指定客户端接受哪些类型的信息。如

    Accept:image/gif,表明客户端希望接受GIF图象格式的资源;

    Accept:text/html,表明客户端希望接受html文本。

  Accept-Charset:指定客户端接受的字符集。如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。如

    Accept-Charset:iso-8859-1,gb2312.

  Accept-Encoding:用于指定可接受的内容。如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。如

    Accept-Encoding:gzip,compress

  Accept-Language:用于指定一种自然语言。如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。如

    Accept-Language:zh-cn

  Authorization:用于证明客户端有权查看某个资源。

    当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

  Host(发送请求时,该报头域是必需的)用于指定被请求资源的Internet主机和端口号。

  User-Agent:允许客户端将它的操作系统、浏览器和其它属性告诉服务器。此域不是必须的。

3.请求正文

  HTTP协议规定,请求头和请求正文之间必须以空行分割(只有CRLF符号的行),用以表示请求头结束,接下来是正文。(CRLF即Carriage Return Linefeed," ")

  请求正文中可以包含客户以POST方式提交的表单数据。如:username="zhangsan"&&password=000000

 

HTTP响应

一个HTTP响应由以下几个部分构成:

  状态行:HTTP协议版本 状态码 原因叙述。如: HTTP/1.1 200 OK     

  若干响应头

  实体内容:响应正文

实体内容和最后一个若干响应头之间有一个空行。

1.状态行

  HTTP协议版本和HTTP请求的含义相同。

  状态码,用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类:

    1xx:信息提示,表示临时的响应。

    2xx:响应成功,表明服务器成功接收了客户端的请求。

    3xx:重定向。

    4xx:客户端错误,表明客户端请求了不正确的资源或请求格式错误。

    5xx:服务器错误,表明服务器由于遇到了某种错误而不能响应客户请求。

  常见的状态代码:

    200:响应成功。

    400:错误的请求。客户端提交的HTTP请求不正确。

    401:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 

    403:服务器收到请求,但是拒绝提供服务

    404:文件不存在。在服务器上没有客户要求访问的文档。

    405:服务器不支持客户的请求方式。

    500:服务器内部错误。

    503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

2.响应头

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

  常用的响应报头
  Location:用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
  Server:包含服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是Server响应报头域的一个例子:
    Server:Apache-Coyote/1.1
  WWW-Authenticate:此域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
    WWW-Authenticate:Basic realm="Basic Auth Test!"  可以看出服务器对请求资源采用的是基本验证机制。

3.响应正文

  服务器返回的具体的文档。

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/diysoul/p/5551044.html