欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP 基础知识

程序员文章站 2022-07-10 14:13:45
...

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> 错误原因描述。
  1. method

    通过GET方法发起请求时,会将请求参数拼接在请求的参数后边 ===request-url 尾部 ,格式是url?param1=xxx&param2=xxx&[…]。 地址是直接暴露的 在地址栏上由于url是ASCII 编码。 所以参数中 如果有Unicode 编码的字符 例如汉字 会编码之后重新传输,长度会有限制。
    post方法请求发起的时候 是放在请求体中
    GET方法 是指服务器获取 某个 URL资源,其行为可以看作是一个读操作, 不要对于服务器 产生什么影响。

POST请求 是对某一个 URL 进行添加 ,修改,例如一个表单提交,通常会往服务器插入一条记录 。

  1. 状态码

常见的状态码主要有
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
实体
请求发送的资源,或是响应返回的资源。

  1. Http 缓存
    当我们发起一个http请求后,服务器返回所请求的资源,这时我们可以将该资源的副本存储在本地,当再次对该url资源发起请求时,我们能快速的从本地存储设备中获取到该URL资源,这就是所谓的缓存,缓存可以节约不必要的网络带宽,对http做出响应。
    概念
    新鲜度检测
    再验证
    再验证命中

(1) 有些url对应的资源并不是一成不变的,服务器中该url的资源可能在一定时间之后会被修改,本地缓存中的资源和 服务器一侧的资源有差异。
(2)既然在一定时间之后可能资源会改变,那么在某个时间之前 我们可以认为这个资源没有改变,从而放心大胆的使用缓存资源。当请求时间超过来的时间,我们认识这个缓存资源可能不再与服务器端一致了。当我们发起一个请求时,我们需要对缓存的资源进行判断,判断是否可以直接使用该缓存的资源 这叫做新鲜度检测 。判断这个是不是过期了。
(3)如果发现该缓存资源已经超过一定的时间,我们再次发起请求时不会直接将缓存资源返回,而是先去服务器查看该资源是否已经改变 ,这个叫作再验证, 如果服务器发现对应的url资源并没有发生变化 会返回304 NotModified ,并不在返回对应的实体 ,这被称为再验证命中,如果验证未命中,则返回200 OK 并将改变后的url资源返回,此时缓存可以更新存放。