http 协议系统学习 :)

http 是什么 ?

基于 TCP/IP 通讯协议获取网络资源 ( html, css ... ).php

http 协议 ( Hyper Text Transfer Protocol 超文本传输协议 ) 用于从万维网 ( www ) 中传输超文本到本机浏览器的传送协议, 互联网的基础协议.css

有什么角色

1、 客户端 ( user-agent ) :html

  • 一般由浏览器来扮演, 也能够是应用程序, 爬虫等.web

  • 浏览器发送一个请求到 web 服务器获取 html 文档, 解析文档中的资源信息再发送其它请求获取到 css 样式或脚本进行页面渲染, 以及一些其它的资源 ( 图片或视频 ... ), 浏览器最后会整合资源显示.数据库

2、 web 服务端跨域

  • 负责接收处理请求 ( requests ), 返回响应 ( response ) 所请求的文档.浏览器

  • 它能够是负载平衡 ( 负载均衡 ) 的一组服务组成的计算机集群, 也能够是某个复杂的软件, 经过向其它计算机 ( 如缓存, 数据库服务器, 电子商务服务器 ) 发起请求获取资源.缓存

    负载平衡 ( 负载均衡 ): 经过多个计算机、网络链接、CPU、磁盘驱动器或其它资源中分配负载, 以达到最优化的资源使用、最大化的吞吐率、最小化的响应时间、同时避免过载的目的, 经常使用于解决高并发和高可用问题.安全

  • Server 不必定是机器, 但机器上能够有多个 Server, 在 http/1.1 和 Host 头部能够共享一个 IP 地址.服务器

3、 代理 ( Proxies )

处于浏览器和服务器之间, 大都在传输层上 ( 即应用层 ), 主要有以下几种做用 :

  1. 缓存 :可公开也可私有, 如浏览器缓存
  2. 过滤 :如病毒扫描, 家长控制
  3. 负载加载 : 多个服务器服务不一样请求
  4. 认证 :对不一样资源权限管理
  5. 日志记录 :容许存储历史信息

4、 特性

  • 支持客户 / 服务器模式 .
  • 简单快速 : 请求时只需发送请求方法和路径 .
  • 灵活 : 容许传输任何类型的数据对象, 由 Content-Type 标记 .
  • 无链接 :每次链接只能处理一个请求, 收到客户端应答后会断开链接, 目的节省传输时间.
  • 无状态 :对事务处理无记忆能力, 优在于不会形成没必要要的链接占用, 缺在于每次请求都有会大量的重复数据.

5、 请求方法

  • get :请求获取指定资源

  • post : 想指定资源提交数据进行处理请求 ( 如提交表单或上传文件 ... ), 有可能会建立新的资源或修改已有资源

    get 受 url 长度限制, 并非 http 协议规范限制的, 而是浏览器和服务器限制的

    post 理论上无长度限制, 出于安全考虑, 服务器会在实现时作一些限制

  • put : 只对已在的指定资源总体更新

  • patch` : 用于资源部分更新, 当资源不存在时, 会建立一个新的资源

  • delete : 删除指定资源

  • connect : http/1.1 协议中将链接改成管道方式的代理服务器, 一般用于 SSL 加密服务器的连接与非加密的 http 代理服务器的通讯

  • head : 用于查看服务器性能, 只获取响应头信息, 不会返回内容部分 ( 响应主体 )

  • trace : 用于 http 请求的测试或诊断, 返回服务器收到的请求

  • options : 用于查看服务器性能, 测试服务器功能是否正常, 请求服务器返回该资源所支持的全部 http 请求方法 .

    JavaScript XMLHttpRequest 对象进行 CORS 跨域资源共享时, 用此方法发送嗅探请求, 以判断是否有对目的资源访问权限

6、 状态码

  • 1** : 信息, 服务器收到请求, 须要请求者继续执行操做
  • 2** : 成功接受并处理
  • 3** : 重定向, 需进一步操做才能完成请求
  • 4** : 客户端错误
  • 5** : 服务器错误

7、 Cookie

保存在本地的服务器数据, 会在下次请求携带上访问服务器, 一般用于告知服务器两个请求是否源于同一浏览器, 如保持登陆状态 ( http 是无状态的 )

// 设置 Cookie
setcookie('cookie[name]', 'value');

// 刷新输出 Cookie 
if (isset($_COOKIE['cookie'])) { // isset 检测变量是否已设置而且非 NULL
    foreach ($_COOKIE['cookie'] as $name => $value) {
        $name  = htmlspecialchars($name); // htmlspecialchars 将特殊字符转 html 实体
        $value = htmlspecialchars($value);

        echo "$name : $value <br>";
    }
}

主要应用

  • 会话状态管理 ( 如登陆状态、购物车、游戏分数 ... )
  • 个性化设置 ( 用户自定义设置、主题 ... )
  • 行为跟踪 ( 跟踪分析用户行为 ... )

缺点

  • 因为会附加每一个 http 请求中, 会增长流量
  • http 请求中 Cookie 是明文传递, 除非是 https, 不然有安全问题
  • Cookie 大小限制 4kb 左右, 对应复杂的存储需求远远不够

分类

  • 持久 Cookie 保存在硬盘, 消失须要用户清理或到了过时时间

    过时时间的设定只与客户端相关 : Set-Cookie: id=a3fWa; Expires=Wed, 25 Dec 2018 08:20:00 GMT;

  • 非持久 Cookie 保存在内存里, 浏览器关闭后自动删除, 仅在会话期内有效, 无需指定过时时间 ( Expires ) 或有效期 ( Max-Age )

    注意 : 有些浏览器有会话恢复功能, 即便浏览器关闭了, 会话期 Cookie 也会保存着

相关文章
相关标签/搜索