Http协议HTTP是一种可以获取HTML等网络资源的协议(通信协议)。它是Web上数据交换的基础,是一种客户端-服务器协议,即请求通常由浏览器等接收方发起。HTTP在1990年代初被设计为可扩展协议。它是一个应用层协议,通过TCP发送,或者TLS加密的TCP连接,理论上任何可靠的传输协议都可以使用。由于其良好的可扩展性,不仅可以用来传输超文本文档,还可以用来传输图片、视频或向服务器发送HTML表格等信息。HTTP也可以根据网页的要求只获取Web文档的部分内容来更新网页。形式:提交数据交互:HTTP协议客户端大前端请求------><--------响应服务器后端HTTP报文有两种:请求报文和响应报文。顾名思义,请求消息是客户端向服务器发送请求的信号,响应消息是服务器处理响应后返回给客户端的信号。2.1.请求消息HTTP请求消息由四部分组成,分别是请求行、请求头、空行和请求体。空行也是组成部分之一,是分隔所必需的。2.1.1.请求行第一行为请求行,由三个字段组成:请求方法、URI、HTTP协议版本。它们之间用空格隔开,最后内容用回车和换行符隔开,表示后面的内容(从下一行开始)不是请求行的内容。比如GET/index.phpHTTP/1.1,GET是请求方式,/index.php是URL,HTTP/1.1表示使用的HTTP版本是1.1。这行很容易理解,只是请求方法有很多种,包括GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,其中GET和POST是最常用的,这里详细介绍一下。-GETGET最常见的请求方式,通常用在客户端想从服务器读取文档的时候,比如点击网页上的链接,或者在浏览器的地址栏中输入URL来浏览网页。使用GET方式。需要注意的是,使用GET方式请求时,请求参数和对应的值后面跟的是URL,用问号(“?”)、和连接符(“&”)、“=符号。GET方法要求服务器将URL所定位的资源放在响应报文的数据部分,并发回给客户端。比如/index.php?id=100&slec=yes,这样通过GET方式传递的数据直接在地址中表示。形式上,因为要传递的参数和值已经存在于URL中,所以GET方法请求的HTTP报文是没有请求体的。很明显,GET方法暴露了URL中的参数和参数值。好处是显而易见的,缺点是不利于数据的保密和安全。另外,浏览器对地址的字符长度有限制。虽然各自的标准不同,但一般都不会超过1024个字符。因此,如果要传输的数据量比较大,GET方式就不适用了。-POSTPOST也是一种很常见的请求方式,完美弥补了GET方式的不足。因为POST方法将要传输的数据封装在消息的请求体中,并且对传输数据的大小没有限制,所以可以传输大量的数据,又因为数据封装在请求体中并且不直接暴露在URL中,更加私密安全。-其他请求方式其他请求方式很少用到,其中HEAD方式偶尔用到。服务端收到HEAD请求后,只返回响应头,不发送响应内容,提高了传输效率。所以当我们只需要查看某个页面的状态时,使用HEAD是非常高效的。2.1.2.请求头请求头由键/值对组成,每行一对,键和值之间用冒号“:”(英文)分隔。请求标头告诉服务器有关客户端请求的所有信息。典型的请求头有:User-Agent:产生请求的用户代理信息(浏览器信息):Mozilla/5.0(Macintosh;IntelMacOSX10_12_3)AppleWebKit/537.36等;accept:客户端可以识别的内容类型栏目:text/html、application/xhtml+xml、application/xml;Accept-Language:客户端可接受的自然语言——zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4;accept-Encoding:客户端可接受的编码压缩格式——gzip、deflate、sdch、brHost:请求的主机名,允许多个域名在同一个IP地址,即虚拟主机连接:连接方式,有两种类型:关闭和保持活动。close:告诉WEB服务器或代理服务器完成对本次请求的响应后断开连接keep-alive:告诉WEB服务器或代理服务器。完成对本次请求的响应后,保持连接等待后续请求Cookie:存放在客户端扩展字段中,将属于该域的cookie发送给同域名的服务器-PSTM=1490844191;BIDUPSID=2145FF54639208435F60E1E165379255;2.1.3。空行用户划分内容,表示请求头到此结束,下一行的内容不再是请求头。2.1.4.请求正文请求正文包含请求数据。上面说过,使用GET方法时,是没有请求体的。2.2.响应报文客户端向服务器端发送请求后,服务器端正常接收并处理客户端发送的请求后会返回一个HTTP响应报文,这就是响应报文。HTTP响应也由四部分组成,即:状态行、消息头、空行和响应文本。除状态行外,其他三部分与请求报文类似。2.2.1.状态行格式为:HTTP-VersionStatus-CodeReason-PhraseCRLF。其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态码;Reason-Phrase表示状态码的文本描述。状态码由三位数字组成,第一位数字定义响应的类别,有五个可能的值。1xx:指令信息--表示请求已经收到,继续处理。2xx:成功——表示请求已被成功接收、理解和接受。3xx:重定向-需要进一步操作才能完成请求。4xx:ClientError-请求有语法错误或请求无法完成。5xx:服务器端错误——服务器未能完成合法请求。常见状态码说明及各类型状态说明如下:200OK:客户端请求成功。301永久移动。请求的资源已经永久移动到新的URI,返回的信息会包含新的URI,浏览器会自动定向到新的URI。以后任何新的请求都应该使用新的URI而不是400BadRequest:客户端请求有语法错误,服务器无法理解。401Unauthorized:请求未经授权。此状态代码必须与WWW-Authenticate标头字段一起使用。403Forbidden:服务器收到请求但拒绝提供服务。404NotFound:请求的资源不存在,例如:输入了错误的URL。500InternalServerError:服务器发生意外错误。501服务器不支持请求的功能,无法完成请求。503ServerUnavailable:服务器当前无法处理客户端的请求,过一段时间可能会恢复正常。例如:HTTP/1.1200OK(CRLF)。2.2.2.响应头类似于请求消息的请求头。响应头也是由键值对组成,每行一对,键和值之间用冒号:分隔。响应头字段允许服务器传递不能放在状态行中的附加信息。这些字段主要描述服务器信息和Request-URI的进一步信息。典型的响应头是:服务器:包含处理请求的原始服务器的软件信息;日期:服务器日期;Content-Type:返回的资源类型(MIME);连接方式:连接方式;close:连接已经关闭;keep-alive:一直保持连接,等待本次连接的后续请求;Cache-Control:缓存控制;expires:设置过期时间;Set-Cookie:设置cookie信息。2.2.3.一个空行作为内容划分,表示下面不再是响应头的内容。2.2.4.响应体这是服务器返回给浏览器的响应信息。
