什么是HTTP协议
对于HTTP协议我想任何接触过网络的都不会陌生,它是我们通过浏览器访问各个网页的基础。HTTP,全名超文本传输协议,是一个位于应用层的协议,其特点如下:
①无状态:HTTP对于事务处理没有记忆功能,但是我们在访问某个网站时却需要保持登陆状态,因此需要引入其他机制如Cookie&Session。
②无连接:HTTP限制每次连接只能处理一个请求。也就是客户端发送请求给服务器,服务器对于请求处理后响应并收到来自客户端的应答后,就断开连接。无连接的优点是可以节省传输时间。
需要注意的是HTTP1.1默认采用keepAlive机制,即服务器需要经过一定时间后才能断开连接。跟无状态特性一样,HTTP1.1是通过其他机制实现的长连接,但其本身是无连接的。
③灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
④简单快速:由于HTTP协议简单,使得HTTP服务器的规模小,通信速度快。
⑤支持客户端/服务器模式(C/S):一般都是通过浏览器作为客户端向服务器发送请求。
⑥基于请求/响应模式:完整的一次请求包括了请求的发送和响应的返回,缺一不可。
HTTP基本工作流程
-
首先是客户端通过浏览器访问服务器的域名。浏览器会根据url的域名,逐层查询dns服务器缓存,解析url域名对应的ip地址。
dns缓存从近到远依次是浏览器缓存,系统缓存,路由,ips服务器,根域名服务器缓存,顶级域名服务器缓存,从哪个缓存找到了ip则直接返回
-
客户端根据IP地址核对端口,默认为80,和服务器建立TCP连接,其过程参考TCP的三次握手
-
浏览器发出HTTP请求给服务器
-
服务器收到请求后,处理请求并将包含了HTML的响应报文发送给浏览器。
-
浏览器收到HTML,在显示窗口渲染页面。
-
浏览器主动释放连接,执行TCP的四次挥手。(这里如果设置了KeepAlive机制,则连接会保持一段时间再断开)
HTTP状态码
1xx :请求已经被接收,等待处理
2xx :请求成功
3xx :重定向
4xx :客户端错误
- 400:客户端请求有语法错误
- 401:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
- 403:服务器收到请求,但是拒绝提供服务
- 404:请求资源不存在
5xx :服务端错误
- 500:服务器发生不可预知的错误
- 503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
GET和POST区别
HTTP报文层面:
GET请求将请求信息以键值对的形式放置在请求行中。
POST请求将请求信息放置在请求正文中。
所以POST相较于GET安全性稍微高一些,但是也并没有高到哪里去。用过WireShark的朋友们都知道,我们可以通过抓包抓取报文并能够查看到POST请求中的表单数据。如果没有对信息进行加密处理和采用HTTPS,即便使用POST请求也是非常不安全的。
数据库层面:
GET符合幂等性和安全性,POST不符合。
幂等性:对数据库的一次操作和多次操作的结果是一致的。
安全性:对数据库的操作,没有改变数据库中的数据。
因为GET的幂等性和安全性,GET请求通常都直接被服务器CDN缓存了,这大大减少了Web服务器的负担。
客户端请求数据时,先从本地缓存查找,如果被请求数据没有过期,就直接拿来用,如果过期,就向CDN边缘节点发起请求。CDN便会检测被请求的数据是否过期,如果没有过期,就返回数据给客户端,如果过期,CDN再向源站发送请求获取新数据。简单来说,服务器就是厂家,CDN是代理商家,我们是买家。
其他层面:
GET请求能被缓存:CDN缓存
GET请求能被存储:GET请求可以保存在浏览器浏览记录中;以GET请求访问的URL可以作为书签被存储。
Cookie和Session
参考我的另一篇博文
https://blog.csdn.net/weixin_43624024/article/details/100987744