目录
1、请求行
2、请求头
3、请求空行
1、响应行
2、响应头
3、响应空行
4、响应体
HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是浏览器和服务器之间进行“沟通”的一种规范,客户端通过请求服务器发送请求消息给服务器;服务器端通过响应发送响应消息给客户端,实现客户端和服务器端之间的通信。
目前有1.0 和 1.1 两个版本,1.0 的版本每一次请求响应都会断开连接再建立新的连接,1.1 的版本可以服用链接
二、HTTP 特点- 基于 TCP/IP 的高级协议
- 无状态的协议:每次请求之间相互独立,不能交换数据
- 默认端口号:80
- 基于请求/响应模型的:一次请求对应一次响应
1、请求行
格式:请求方式 请求URL 请求协议/版本
eg:GET /mySubmit.html HTTP/1.1
- 请求方式:HTTP协议协议有 7 种请求方式,常用的有两种:GET 和 POST,他们的主要区别有:
- GET:
- 请求参数在请求行中,在URL后
- 请求的URL长度有限
- 不太安全
- POST:
- 请求的参数在请求体中
- 请求的URL没有长度限制
- 相对较安全
2、请求头
- 格式:请求头名称:请求头值
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/mySubmit.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
Connection: keep-alive
Cookie: Idea-f4f5aed6=f93a91f4-613a-47ea-85c5-ab40a7eb0b35
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0 - 常见的请求头:
- User-Agent:浏览器告诉服务器,要访问所使用的浏览器的版本信息,可以在服务器端获取该头的信息,解决浏览器的兼容性问题
- Referer:能够告诉服务器,当前请求从哪里来,作用:
- 防止盗链
- 统计工作
3、请求空行
空行,用于分隔 POST 请求的请求头和请求体的
4、请求体(正文)
封装 POST 请求消息的请求参数
四、响应消息数据格式1、响应行
格式:协议/版本 响应状态码 状态码描述
- 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态,状态码都是三位数字,一般是1xx、2xx、3xx、4xx、5xx 这五类
- 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码
- 2xx:表示成功
- 3xx:表示重定向
- 302:重定向
- 304:访问缓存
- 4xx:客户端错误
- 404:请求路径没有对应的资源
- 405:请求的方式没有对应的doxxx方法
- 5xx:服务器端错误
- 500:服务器内部出现异常
2、响应头
- 格式:头名称:值
HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"147-1567070212093"
Last-Modified: Thu, 29 Aug 2019 09:16:52 GMT
Content-Type: text/html
Content-Length: 147
Date: Thu, 29 Aug 2019 09:21:17 GMT - 常见响应头
- Content-Type:服务器告诉客户端本次响应数据格式以及编码格式
- Content-disposition:服务器告诉客户端以什么格式打开响应体数据
- in-line:默认值,在当前页面打开
- attachment:以附件形式打开响应体,如文件下载
3、响应空行
4、响应体
数据:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>LSTAR</title>
</head>
<body>
我的世界!
</body>
</html>
五、一次完整http请求的过程在HTTP工作开始之前,客户端首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,该协议与 IP 协议共同构建 Internet,即著名的 TCP/IP 协议族,因此 Internet 又被称作是 TCP/IP 网络。HTTP 是比 TCP 更高层次的应用层协议,根据规则,只有低层协议建立之后,才能进行高层协议的连接,因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是80。
- 进行DNS域名解析(浏览器缓存、系统缓存、hosts、DNS服务器)
- 建立 TCP 连接
- 客户端发送请求命令
例如:GET /sample/hello.jsp HTTP/1.1 - 客户端发送请求头信息
以头信息的形式向服务器发送一些的信息,之后客户端发送了一空白行来通知服务器,它已经结束了该头信息的发送 - 服务器应答
例如: HTTP/1.1 200 OK
响应的第一部分是协议的版本号和响应状态码 - 服务器返回响应头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同响应向用户发送关于它自己的数据及被请求的文档; - 服务器向客户端发送数据
服务器向客户端发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以 Content-Type 响应头信息所描述的格式发送用户所请求的实际数据; - 服务器关闭 TCP 连接
一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接,然后如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive ,TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。