文章目录
一、初步了解HTTP协议
HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议,是一种应用层的协议。HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口是动态分配的。当我们没有指定端口访问时,浏览器会默认帮我们添加80端口。我们也可以自己指定访问端口。但是现在大多数访问都使用了HTTPS协议,而HTTPS的默认端口为443,如果使用80端口访问HTTPS协议的服务器可能会被拒绝。
1、HTTP 工作原理
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
2、HTTP请求过程
1.首先通过DNS对域名进行解析(如果是IP地址就不用解析了),DNS解析的顺序:浏览器缓存->操作系统缓存->hosts文件->DNS服务器。
2.通过TCP三次握手,浏览器与服务器端建立连接。
3.浏览器发起HTTP请求。
4.服务器响应HTTP请求。
5.浏览器解析html代码,并请求html代码中的资源(css/js/image)。
6.浏览器对页面内容进行渲染并展示。
7.TCP四次挥手关闭连接。
3、HTTP请求的方法
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式:GET, POST 和HEAD、OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
请求方法 | 备注 |
---|---|
GET | 当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET 方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制 |
POST | 当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,将数据提交给服务器处理。POST 会附带用户数据,一般用于更新资源信息。POST 方法将请求参数封装在HTTP 请求数据中,以名称/值的形式出现,可以传输大量数据; |
HEAD | 获取响应头 |
PUT | 替换资源 |
DELETE | 删除资源 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 允许客户端查看服务器性能 |
TRACE | 回显服务器收到的请求,用于测试或诊断 |
4、HTTP报头
(1)HTTP请求报文
HTTP 请求报文主要由请求行、请求头、空行、请求正文四部分组成。
- 请求行
请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。- 请求头
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息。- 空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。- 请求正文
请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。
(2)HTTP响应报文
HTTP 响应报文主要由状态行、消息报头、空行、响应正文四部分组成。
- 状态行
状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开。
状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类。- 响应头部
响应头包括:Location、Serve、Vary、Connection、WWW-Authenticate、- 空行
最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。- 响应正文
服务器返回给客户端的文本信息。
二、HTTP请求消息Request和Response
1、HTTP请求消息Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行、请求头部、空行和请求数据四个部分组成。
- Get请求例子
- 第一部分: 请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。- 第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等- 第三部分:空行,请求头部后面的空行是必须的
即使第四部分的请求数据为空,也必须有空行。- 第四部分:请求数据也叫主体,可以添加任意的其他数据。
这个例子的请求数据为空。
- POST请求例子
第一部分:请求行,第一行明了是post请求,以及http1.1版本。
第二部分:请求头部,第二行至第六行。
第三部分:第七行的空行。
第四部分:第八行,请求数据。
2、HTTP之响应消息Response
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
- 第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
- 第二部分:消息报头,用来说明客户端要使用的一些附加信息。
- 第三部分:空行,消息报头后面的空行是必须的
- 第四部分:响应正文,服务器返回给客户端的文本信息。
三、使用IDEA创建一个SpringBoot服务,并创建三个restful风格的接口
1、创建SpringBoot项目
在IDEA的菜单栏,选择File,然后New 目录下选择Project选项,选择Spring Initializr,其余具体选择见图,点击next:
在Artifact里为项目命名,java version选8,点击next: