一、HTTP工作原理
HTTP是超文本传输协议,它定义了客户端与服务器端之间文本传输的规范。 HTTP默认使用的是80端口,这个端口指的是服务端的端口,而客户端使用的端口是动态分配的。 当我们没有指定端口访问时,浏览器会默认帮我们添加80端口。我们也可以自己指定访问端口。 需要注意的是,现在大多数访问都使用了HTTPS协议,而HTTPS的默认端口为443,如果使用端口访问HTTPS协议的服务器可能会被拒绝。
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP协议采用了请求/响应模型。
客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头
部和请求数据。
服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
说明:
请求行:
用来说明请求类型、要访问的URL资源、所使用的HTTP协议版本; 请求头部:
用来说明服务器要使用的附加信息。 空行:
请求头部后面的空行是必须的,即使下面的请求数据为空,也必须有空行。 请求数据:
也叫主体,可以添加任意的其他数据。
HTTP请求/响应的步骤如下:
二、HTTP的8种请求方式
HTTP的请求方法共有8种,来表明Request-URL指定的资源不同的操作方式。
HTTP1.0定义了3种请求方法:GET,POST和HEAD方法,HTTP服务器至少应该实现这3种方法。
HTTP1.1中新增了5种请求方法:OPTIONS、PUT、DELETE、TRACE和CONNECT方法。这些方法是可选的。
除了这8种方法之外,特定的HTTP服务器支持扩展自定义的方法。
注意:
HTTP的请求方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法时,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。 其中最常用的是GET和POST方法,二者之间的区别如下:
GET方法提交的数据会直接填充在请求报文的URL上。
而POST方法提交的数据会附在正文上,一般请求正文的长度是没有限制的,但表单中所能处理的长度一般为100k(不同协议不同浏览器不一样),而且需要考虑下层报文的传输效率,不推荐过长,
GET方法可以用来传输一些可以公开的参数信息,解析也比较方便,如百度的搜索关键词,而POST方法可以用来提交一个用户的敏感信息,如果不适用HTTPS加密,报文正文仍旧是明文,容易被人截获读取。
三、HTTP请求消息的响应
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由4个部分组成,分别是:状态行、消息报头、空行和响应正文。
说明:
状态行:
由HTTP协议版本号(HTTP/1.1)、状态码(200)、状态消息(ok)三部分组成。 消息报头:
用来说明客户端要使用的一些附加信息(生成响应的日期和事件、HMTL的文本类型、编码类型)。 空行:
消息报头后面的空行是必须的。 响应正文
:服务器返回给客户端的文本信息。
请求返回的状态码有如下这些: