HTTP协议

358 阅读2分钟

一、为什么学习HTTP(搞清楚几个问题)

  • 问题一:在浏览器上输入一串地址然后打开一个网页经历了什么?
  • 问题二:AJAX是如何获取数据的?
  • 问题三:img 标签加载图片

二、理论知识

  • 物理层:主要作用是定义物理设备如何传输数据
  • 数据链路层:在通信的实体间建立数据链路连接
  • 网络层:为数据在结点之间传输创建逻辑链路
  • 传输层:
    • 像用户提供端到端的服务(从自己的电脑和百度的服务器 连接之后,两端是如何传输数据的? 传输数据的方式是怎样的?传输的资源的大小,分片,组装?都是在传输层定义的。 )
    • 传输层向高层屏蔽了下层通信数据的细节
  • 应用层:
    • HTTP协议
    • 为应用软件提供了很多服务
    • 构建于TCP协议之上
    • 屏蔽了网络传输相关细节

三、HTTP的三次握手

避免数据传输失败,服务器为关闭连接。减少服务端开销

四、URI、URL、URN

  • URI:Uniform Resource Identifier 统一资源标志符
    • 用来标识互联网上的信息资源
    • 包含URL和URN
  • URL:Uniform Resource Locator 统一资源定位器
    • 用来找到资源所在的位置、并且访问他

五、跨域请求

  • Access-control-Allow-origin
  • CORS 跨域限制以及预请求验证
  • 在跨域请求的时候默认允许的方法只有GET、POST、HEAD
  • 在跨域请求的时候默认允许的content-type 类型有:text/plain multipart/form-data application/x-www-form-urlencoded

六、缓存头cache-control

  • public http经过的 任何地方都可以缓存
  • private 发起请求的浏览器才能进行缓存
  • no-cache 任何一个节点都不可以缓存

缓存到期时间

  • max-age = 时间
  • s-age = 时间(专门为代理服务器设置)
  • max-sale(在浏览器中使用不到)

重新验证

  • must-revalidate 如果时间过期了必须去原服务端发送请求
  • proxy-revalidate 如果时间过期了必须去原服务端发送请求(指定缓存服务器)
  • no-store 本地代理服务器是不允许使用缓存
  • no-cache 可以本地缓存,都要去服务器验证。然后验证成功才能使用缓存
  • no-transform 不要随便改变我返回的内容
  • 只是申明作用,没有强制性原则

资源验证

验证头 Last-Modified

  • 上次修改的时间
  • 配合If-Modified-Since 或者 If-Unmodified-Since 使用

验证头 Etag