HTTP详解
文章目录
1. HTTP常见的状态码有哪些
- 1XX:
- 2XX:
- 200 OK 成功状态码
- 204 NOT CONTENT 成功,但响应头没有BODY数据
- 206 Partial Content 是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
- 3XX:类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
- 301 Moved Permanently 永久重定向
- 302 Found 临时重定向
- 304 Not Modified :告诉客户端可以继续使用缓存
- 4XX:客户端发送的报文有误,服务器无法处理
- 400 Bad Request
- 403 Forbiddend 服务器禁止访问资源
- 404 Not Found 请求的资源在服务器上找不到
- 5XX
- 500
- 501 Not Implemented 客户端请求的功能还不支持
- 502 Bad Gateway 服务器作为网关或者代理时返回的错误代码,服务器自身工作正常,访问后端服务器出错
2. HTTP 常见的字段
- Host: 客户端发送请求时,用来指定服务器的域名
- Content-length : 用来防止粘包
- Content-type : 用于服务器回应时,告诉客户端,本次数据是什么格式
- Encoding-type
- Connection : Keep-alive长连接
3. GET 和 POST请求
- GET 的含义:是从服务器获取指定的资源
- POST的含义:是根据请求负荷(报文body)对指定的资源做出处理
- 区别:
- GET一般来说没有请求体,请求参数放在URL中。POST请求参数一般放在body中
- GET 由于请求参数放在URL 中,有长度限制,且必须是ASCII字符。POST 理论上没有长度限制
- 幂等性和安全性的角度:
- GET 一般是从服务器端获取指定的资源,一般不改变服务器上的资源,所以说是幂等的。POST请求可能会修改服务器上的资源,非幂等的。
- GET一般是安全的,POST一般是不安全的
- GET请求一般是可被缓存的,POST请求一般是不可缓存的
- 注意点:
- 可以用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法自然就不是安全和幂等。
- 可以用 POST 方法实现查询数据的请求,这样实现的 POST 方法自然就是安全和幂等。
4. HTTP缓存技术
- 强制缓存技术
- 定义:强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。
- 实现原理:HTTP响应报文中头部字段 —— Cache-Control(优先级较高)和 EXPIRES。
当浏览器第一次请求资源的时候,服务器返回的响应报文中在返回这个资源的同时,也会在Cache-Control这个字段中设置过期时间。当浏览器第二次请求这个资源的时候,则贤惠通过请求资源的时间和Cache-Coontrol作比较,若小于这个时间,则直接使用缓存,若大于这个时间则重新请求。重新请求后,同样返回报文中会再次更新Cache-Control的时间。
- 协商缓存技术
- 定义:协商缓存就是与服务端协商之后,通过协商结果来判断是否使用本地缓存。
- 实现原理:相应码——304.这个相应码告诉浏览器可以使用本地的缓存的资源。这种方法是通过服务器端告知客户端是否可以使用缓存。
- 具体分析:基于两种头部实现
- 请求头部If-Modified-Since 字段和响应头部中的Last-Modified字段实现。后者表示这个相应资源的最后修改时间。两者比较,返回200 OK 或者 304 缓存
- 请求头部If-None-Match字段和相应头部中的ETag字段实现。ETag表示相应资源的唯一表示符
- 为什么会有ETag和Last-Modified两个字段?
- 修改时间不能保证资源是否改变
- If-Modified-Since检查的粒度是秒级的,若文件在1秒内修改,无法检测到
- 有些服务器不能获取文件的最后修改时间
- 注意点: 协商缓存这两个字段都需要配合强制缓存中 Cache-Control 字段来使用,只有在未能命中强制缓存的时候,才能发起带有协商缓存字段的请求。
5. HTTP特性 HTTP 1.1
-
HTTP/1.1的优点:
- 简单,报文格式是header + body方式
- 灵活和易于扩展,有很多的拓展字段
- 跨平台
-
HTTP/1.1缺点:
-
无状态: 服务器端不会记录HTTP状态,相对来说可以减轻服务器端的压力。但是遇到需要身份验证等操作的时候会较麻烦(比如说购物车加入,下单,结算,支付整个过程都涉及到要知道用户的身分才行)
解决办法:cookies技术:服务器端在接收到客户端发来的第一次请求的时候,相应报文中就会添加一个cookies,后续同一客户端发送请求的时候,带上这个cookies,这样就知道客户端是谁了
-
明文传输
-
不安全
-
-
HTTP/1.1的特性:
- 长连接
- 管道网络传输:即在同一个TCP连接中,客户端可以发送多个请求,第一个请求出去了不用等响应报文,可以直接发送第二个,减少整体的响应时间。但是由于服务器端必须按照发送顺序接受这些管道的请求,所以可能会导致响应方的队头阻塞
- 队头阻塞
6.HTTP 和 HTTPS
-
两者的区别:
- HTTP是明文传输,HTTPS是加密传输
- HTTP连接建立需要三次握手,HTTPS连接的建立需要三次握手加上SSL/TSL的握手
- 两者默认的端口号不同 HTTP :80 HTTPS:443
- HTTPS协议需要向CA机构申请数字证书
-
HTTPS解决了HTTP哪些问题?
- 窃听风险
- 篡改风险
- 冒充风险
视频详解:
- 通过中间人机制伪造证书。同时也类似于wireshark能抓包看到https中的内容
7. HTTP/1.0 /1.1 /2.0 /3.0的区别
-
HTTP/1.1
- 优点
- 长连接
- 管道通信(但是没有解决响应方队头阻塞的问题)
- 缺点:
- 请求/响应报文header未经压缩就发送
- 分包的时候发送冗长重复的首部
- 相应方队头阻塞
- 没有请求优先级控制
- 请求只能从客户端开始,服务器端只能被动响应
- 优点
-
HTTP/2.0
-
优点
-
缺点
-
-
HTTP/3 (QUIC基于UDP的应用层可靠传输协议)
-
优点
-