HTTP的请求、响应
Ps:本篇博客是学习真实的归宿博主总结而写
HTTP请求
大多数的通信协议,分割方式都是“消息头/消息体”来分割的,消息头主要是标注这个消息是干什么的;而消息体主要是标注这个消息是怎么干的;一般来说,消息体可有可无,但是消息头不可缺少。HTTP协议的分割方式:每个HTTP的包包含一个HTTP头和HTTP体两部分。
当一个客户端向服务端请求资源时的请求格式是:请求行(请求方法URI协议/版本)、请求头、请求正文。
请求例子
请求行
以上请求的方法是GET请求方式,协议版本是HTTP/1.1
请求方式我们最常用的是GET和POST两种方式,但是在HTTP/1.1中请求方式有8种:GET,POST,HEAD,PUT,DELETE,CONNECT,TARCE,OPTIONS。
- GET:请求获取Request-URI所标识的资源。
- POST:请求服务器接收的实体,并把他并在REquest-Line的Request-URI的标识中。
- HEAD:和GET方式区别不大,他请求的是REquest-URI的头部分。
- PUT:向服务器请求添加REquest-URI标识数据。
- DELETE:向服务器请求删除Request-URI标识的数据
- CONNECT:建立一个长连接。
- TARCE:向服务器发送请求,主要用来调试。
- OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求
GET和POST的区别
- 在客户端提交的数据get可以看到,POST看不到。
- GET的数据提交有大小的限制(因为URL有长度的限制),POST没有长度的限制(因为数据放在了HTTP的Body中)。
- 无论在什么编译平台,他们的取值不一样。
- 数据安全方面,个人觉得安全性都差不多,不加密的数据无论用什么提交都不安全,虽然post提交的数据前台看不到,但是专业的抓包工具就能把数据筛选出来,所有个人觉得这两个在安全上的区别不大。
PS:在HTML中其中的提交方式大小写都没有关系,但是在HTTP协议中,只能大写。
HTTP响应
和请求格式一样,它的响应格式也有三部分:状态行、消息报头、响应报文
状态行
状态行就是 HTTP/1.1 200 OK,这种数据。其中常见的状态如下:
- 1XXX:表示消息已经接受,待继续处理。
- 2XXX:表示成功,已经接受处理完毕。200:表示成功
- 3XXX:表示重定向,需要进一步操作。303:表示重定向
- 4XXX:表示客户端出现错误。400:客户端有语法错误,或者服务器端不能理解语句。401:请求未经授权。403:决绝服务。404:请求资源不存在。
- 5XXX:表示服务器端出现错误。500:不可预期的错误。504:服务器超时。
HTTP协议是无状态的和Connection: keep-alive的区别
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。
从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。