1.什么是HTTP协议
HTTP协议全称是HyperText Transfer Protocol 超文本传输协议.是大家在上网是最经常遇到的协议,它指定了客户端和服务端进行交互的消息格式和步骤.
请求消息就包括两个方面:“对什么进行操作”,“进行什么样的操作”.
- 对什么进行操作就是指的URI (Uniform Resource Identifier统一资源标识符).
- 进行什么样的操作就是指:HTTP方法,如get,post,delete,put等
2.HTTP方法详解
其中我们最常使用的就是get和post方法,我们在使用HTTP协议的时候绝大多数的情况都是使用这两种方法.所以对get和post方法进行一定的认识是非常有必要的
GET和POST的区别
区别 | GET | POST |
---|---|---|
使用场景不同 | GET一般用于请求获取资源,例如我们在浏览器地址栏上输入一个URL,这就是一个GET请求 | 而POST则一般用于表单的提交,例如我们在网页中输入一个账号密码进行登录时就是用的Post |
HTTP请求的格式不同 | 使用GET方法,HTTP的请求消息中不包含消息体,如果需要携带参数,则会将请求参数放在URL的后面.例如:/test/demo_form.asp?name1=value1&name2=value2 | 使用POST方法,需要携带的参数会放在请求消息的消息体中 |
安全程度不同 | GET方法由于会将请求的参数拼接在URL后面,所以很容易被人窃取 | POST的参数放在请求体中所以更加安全 |
携带数据长度不同 | GET由于将数据拼接在URL后面,所以携带的数据长度是有限制,不能超过2kb | POST参数放在请求体中所以没有长度要求 |
Cache | GET请求会被浏览器主动Cache,可以取消 | POST默认情况不会,除非设置 |
回退前进操作 | GET请求在浏览器反复的 回退/前进操作是无害的 | 而POST会需要再次提交表单 |
请求的数据包书数量不同 | GET请求会在发送的过程中会产生一个TCP数据包,浏览器会将 请求报文中的header和data一起发送 | 对于POST请求,浏览器会发送header,服务器返回100 continue状态码之后,浏览器在发送data |
3.HTTP状态码和状态短语
在服务器成功接收到客户端的请求之后,服务器会返回状态码和状态短语,用于告知客户端请求的结果
1.状态码分类
状态码 | 含义 |
---|---|
1XX | 告知请求的处理进度和情况 |
2XX | 成功 |
3XX | 重定向 |
4XX | 客户端错误,请求不合法 |
5XX | 服务器错误 |
2.常见状态码和状态短语
状态码 | 状态短语 | 含义 |
---|---|---|
200 | OK | 请求成功了 |
301 | 永久性转移,资源永久更改,重定向到另一个URL | |
302 | Found | 短暂性转移,资源暂时更改,重定向到另一个URL |
304 | 已缓存 | |
400 | Bad Request | 请求语法有问题 |
401 | 拒绝访问,需要登录或者授权 | |
404 | Not Found | 访问的页面不存在 |
500 | Internal Server Error | 服务器内部错误 |
503 | 服务器不可用,稍等 |
4.HTTP请求报文格式
5.HTTP响应报文格式
6.HTTP中主要的头字段
由于HTTP的请求报文和响应报文的格式不同,所以头字段也会有所不同
1.通用头字段(请求和响应都可以)
- Date:表示请求和响应生成的日期
- Cache-Control:控制缓存的相关信息
- Connection(HTTP1.1):收发完一次数据之后,是否还保持TCP连接,这是因为HTTP1.0每个TCP连接只能发送一个请求,发送完成之后就会关闭
2.实体头字段(用于表示消息体的信息)
- Content-Length:消息体的长度
- Content-Language:消息体的的语言,中文:zh 英文:en
- Content-Encoding:消息体经过压缩等编码处理之后的编码格式
3.请求头字段(用于表示请求消息)
- Host:接收这次请求的服务器的IP地址和端口号(端口号可以不写,默认80)
- Referer:通过超链接到达下一个页面时,会记录上一个页面的URL
- Authorization:身份认证信息
4.响应头字段(用于表示响应消息)
- Set-Cookie:用于服务器向客户端发送sessionID
- Server:服务器程序的名称和版本号等相关信息
7.HTTP协议的特点
- HTTP简单快速:客户端向服务器请求数据时,只需传输 请求方法和路径和必要的参数.
- HTTP十分灵活:HTTP允许传输任意类型的数据,可以通过Content-Type来指定
- HTTP是无连接的:每次连接只处理一次请求,完成一次数据传输之后就会断开TCP连接,早期HTTP1.0协议之所以这样做是因为早期的页面很简单,并且网页浏览器是带有发散性所以这样的设计就可以尽早释放服务器资源.但是随着网页变得越来越复杂并且会嵌入了很多其他资源,这样的话无连接就会使得连接变得低效,所以在HTTP1.1中,我们可以通过Connection:keep-alive来保持连接.
- HTTP是无状态的:无状态是指HTTP协议对于连接没有记忆能力,服务器不知道这一次连接与之前的连接有什么关系,而把它当成一次独立的连接,但是这样就会导致一些问题,例如现在的交互是有着很大关联的,例如我们登陆了网站,每次都需要重新输入一次密码,所以针对这个问题诞生了两种非常重要的技术Cookie和Session.
- HTTP协议是不安全的:HTTP通信使用明文,本身不带有加密的功能,所以内容很容易窃取.并且HTTP协议无法证明通信报文的完整性,即使HTTP协议的报文在传输过程中被人篡改之后,接收方也无法验证.但是HTTPS协议很大程度上解决了这个问题.