HTTP协议
一、概念
HTTP协议(超文本传输协议)规定了客户端浏览器和服务器通信时发送数据的格式。HTTP协议使用TCP连接。通信开始时,首先在浏览器和服务器之间建立TCP连接,接着浏览器向服务器发送HTTP请求报文,服务器在收到该请求报文后向服务器发送HTTP响应报文,最后当通信结束后,释放TCP连接。
特点:
- 默认端口号:80
- 基于请求/响应模型:即一次请求对应一次响应
- 无状态的:即每次的请求之间是相互独立的,不能交换数据
历史版本:
1.0:每一次的请求响应都会建立新的连接,通信结束后释放连接,效率较低。
1.1:可以复用连接,提高了效率。
二、请求报文数据格式
-
请求行
格式:请求方式 请求url 请求协议/版本(举例:GET /login.html HTTP/1.1)
【注】HTTP协议有7种请求方式,常见的有2种,GET和POST。
GET:请求参数在请求行中,在url后;请求的url长度是有限制的;不太安全。
POST:请求参数在请求体中;请求的url长度时没有限制的(适用于文件的上传);相对安全。
-
请求头
格式: 请求头名称:请求头值
常见的请求头:
User-Agent:该请求头中的值为此次访问服务器使用的浏览器版本信息。这样可以在服务器端获取该头的信息,从而解决浏览器的兼容性问题。
Referer:http://localhost/login.html 告诉服务器,我(当前请求)从哪里来?可以用来防盗链和做统计工作。
-
请求空行
空行,就是用于分割POST请求的请求头和请求体的。
-
请求体(正文)
封装了POST请求消息的请求参数。比如:username=zhangsan
一个完整的请求报文例子:
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.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/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
username=zhangsan
三、响应报文数据格式
-
响应行
格式:协议/版本 响应状态码 状态码描述
【注】响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。状态码都是3位数字。常见的状态码有以下几类:
- 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码
- 2xx:成功。代表:200
- 3xx:重定向。代表:302(重定向),304(访问缓存)
- 4xx:客户端错误。代表:404(请求路径没有对应的资源),405(请求方式没有对应的doXxx方法)
- 5xx:服务器端错误。代表:500(服务器内部出现异常)
-
响应头
格式: 响应头名称:响应头值
常见的响应头:
Content-Type:服务器告诉客户端浏览器本次响应体的数据格式以及编码格式。
Content-disposition:服务器告诉客户端浏览器要以什么样的方式打开响应体数据。
值:
in-line:默认值,在当前页面内打开。
attachment;filename=xxx:以附件形式打开响应体。文件下载。
-
响应空行
-
响应体
封装了服务器发送给客户端浏览器的数据。
一个完整的响应报文例子:
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello,response!
</body>
</html>