HTTP 基础知识
HTTP 报文
http报文 可以分为请求报文和响应报文。格式差不多。
分为三个部分:
1.起始行
2.首部
3.主体
请求报文格式:
<method><request-url><version>起始行 请求方法 请求地址 协议版本
<headers> 首部
<entity-body> 主体
响应报文格式:
<version><status><reason-phrase>起始行 版本号 请求状态 错误原因描述
<headers> 首部
<entity-body> 主体
差异主要在 起始行部分
<method> 指 请求方法 就要是 get post head delete put options connect track。
<version> 指 协议版本,通常都是Http/1.1。
<request-url> 请求地址 。
<status> 指响应状态 响应状态码,我们熟悉的200,404等
<resaon-phrase> 错误原因描述。
-
method
通过GET方法发起请求时,会将请求参数拼接在请求的参数后边 ===request-url 尾部 ,格式是url?param1=xxx¶m2=xxx&[…]。 地址是直接暴露的 在地址栏上由于url是ASCII 编码。 所以参数中 如果有Unicode 编码的字符 例如汉字 会编码之后重新传输,长度会有限制。
post方法请求发起的时候 是放在请求体中。
GET方法 是指服务器获取 某个 URL资源,其行为可以看作是一个读操作, 不要对于服务器 产生什么影响。
POST请求 是对某一个 URL 进行添加 ,修改,例如一个表单提交,通常会往服务器插入一条记录 。
- 状态码
常见的状态码主要有
200 OK 请求成功,实体包含请求的资源。
301 Moved permanent 请求URL 被移除 通常在Location 首部中包含新的URL用于重定向。
304 Not Modified 条件请求进行在验证,资源未改变 。
404 Not Found 资源不存在 。
206 partial content 成功执行一个部分请求 用户断点续传。
3.header
在请求报文和响应报文中都可以携带一些信息,通过与其他部分配合 能够实现各种强大的功能,位于起始行之下与请求体之间,以键值对的形式,称之为首部。 每条首部以回车换行符结尾 ,最后一个首部额外多一个换行,与实体分割开。
4.Date
cache-Control
last-Modified
Etag
Expires
If-Modified-Since
If-None-Match
if-Unmodified-Since
If-Range
if-Match
实体
请求发送的资源,或是响应返回的资源。
- Http 缓存
当我们发起一个http请求后,服务器返回所请求的资源,这时我们可以将该资源的副本存储在本地,当再次对该url资源发起请求时,我们能快速的从本地存储设备中获取到该URL资源,这就是所谓的缓存,缓存可以节约不必要的网络带宽,对http做出响应。
概念
新鲜度检测
再验证
再验证命中
(1) 有些url对应的资源并不是一成不变的,服务器中该url的资源可能在一定时间之后会被修改,本地缓存中的资源和 服务器一侧的资源有差异。
(2)既然在一定时间之后可能资源会改变,那么在某个时间之前 我们可以认为这个资源没有改变,从而放心大胆的使用缓存资源。当请求时间超过来的时间,我们认识这个缓存资源可能不再与服务器端一致了。当我们发起一个请求时,我们需要对缓存的资源进行判断,判断是否可以直接使用该缓存的资源 这叫做新鲜度检测 。判断这个是不是过期了。
(3)如果发现该缓存资源已经超过一定的时间,我们再次发起请求时不会直接将缓存资源返回,而是先去服务器查看该资源是否已经改变 ,这个叫作再验证, 如果服务器发现对应的url资源并没有发生变化 会返回304 NotModified ,并不在返回对应的实体 ,这被称为再验证命中,如果验证未命中,则返回200 OK 并将改变后的url资源返回,此时缓存可以更新存放。
推荐阅读
-
nginx HTTP模块配置常用指令
-
微信小程序 封装http请求实例详解
-
CentOS 7中使用Squid提供HTTP代理详解
-
ThinkPHP3.1基础知识快速入门
-
编程必备基础知识|计算机组成原理篇(10):输入输出设备
-
Nginx中使用gzip_http_version解决CDN只支持http 1.0问题
-
Nginx HTTP:413 Request Entity Too Large解决方法
-
学习shell脚本之前的基础知识[图文]
-
nginx: [warn] "log_format" directive used only on "http" level 解决方法
-
Node.js http.createServer 简单服务配置