• PHP基础之HTTP协议


    HTTP协议基础

    HTTP概述

    HTTP工作原理

    • 工作原理
      • 客户端连接到web服务器
        • HTTP 客户端与web服务器建立一个 TCP 连接
      • 客户端向服务器发起 HTTP 请求
        • 通过已建立的TCP 连接,客户端向服务器发送一个请求报文
      • 服务器接收 HTTP 请求并返回 HTTP 响应
        • 服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取
      • 释放 TCP 连接
        • 若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接
        • 若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求
      • 客户端浏览器解析HTML内容
        • 客户端将服务器响应的 html 文本解析并显示

    HTTP场景模拟

    • 浏览器地址栏键入URL,场景模拟
      • 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址
      • 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
      • 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求
      • 服务器对浏览器请求作出响应
        • 把对应的 html 文本发送给浏览器
      • 释放 TCP 连接
      • 浏览器将该 html 文本并显示内容

    HTTP请求

    HTTP请求行

    • HTTP请求行
      • 方法字段
        • GET
          • 发送的数据都在地址栏中,不安全
          • 发送的数据对数据大小有限制
          • 没有请求体
          • 请求头相对较少,性能稍微要高些
        • POST
          • 发送的数据在请求体当中,相对安全
          • 对请求的数据大大小没有限制
          • 有一个特殊的请求头
            • Content-Type:application/x-www-form-urlencoded
      • URL字段
      • HTTP协议版本字段
      GET /index.php HTTP/1.1
    

    HTTP请求消息头

    • HTTP请求消息头
      • Host 请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机
      • Accept 客户端可识别的响应内容类型列表
        • 星号 * 用于按范围将类型分组
        • */* 指示可接受全部类型
        • type/* 指示可接受 type 类型的所有子类型
      • Referer 客户端浏览器是从哪个页面去访问服务器的
      • Accept-Language 客户端可接受的自然语言
      • Accept-Encoding 客户端可接受的编码压缩格式
      • Accept-Charset 可接受的应答的字符集
      • Content-Type POST方法特殊请求头
      • User-Agent 产生请求的浏览器类型,包括使用的操作系统,浏览器版本等
      • connection 请求完成后,连接方式(close 或 keepalive)
      • Cookie 存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie
      • Cache-Control 缓存控制
      Host: localhost:8080
      Accept: image/gif, image/x-xbitmap, *
      Referer: http://localhost:8080/index/
      Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
      Accept-Encoding: gzip, deflate
      Content-Type:application/x-www-form-urlencoded
      User-Agent: Mozilla/4.0 (compatible;MSIE 7.0;windows NT 5.1; GTB6.5; CIBA)
      Connection: Keep-Alive
      Cache-Control: no-cache
    

    HTTP请求空行

    • 请求空行
      • 回车符或换行符
      • 代表请求结束

    HTTP请求体

    • 请求体
      • 请求包体不在 GET 方法中使用,而是在POST 方法中使用
      • POST 方法适用于需要客户填写表单的场合
      • 与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length

    getallheaders() 获取HTTP请求头信息

    • getallheaders() 函数
      • PHP用于获取全部的HTTP请求头信息
    <?php
      foreach(getallheaders() as $name=>$value){
        echo "$name: $value"."<br>";
      }
    ?>
    

    HTTP响应

    HTTP响应状态行

    • HTTP响应状态行
      • HTTP 协议版本字段
      • 状态码
        • 1xx 表示服务器已接收了客户端请求,客户端可继续发送请求
        • 2xx 表示服务器已成功接收到请求并进行处理
        • 3xx 表示服务器要求客户端重定向
        • 4xx 表示客户端的请求有非法内容
        • 5xx 表示服务器未能正常处理客户端的请求而出现意外错误
      • 状态码描述信息
        • 200 OK 表示客户端请求成功
        • 302 Found 表示请求的资源临时从不同的URL响应请求,但请求者应继续使用原有位置来进行以后的请求
        • 404 Not Found 请求的资源不存在,例如,输入了错误的URL
        • 500 Internal Server Error 表示服务器发生不可预期的错误,导致无法完成客户端的请求
      HTTP/1.1 200 OK
    

    HTTP响应消息头

    • HTTP响应消息头
      • Location 控制浏览器显示哪个页面
      • Server 服务器的类型
      • Content-Encoding 服务器发送的压缩编码方式
      • Content-Length 服务器发送显示的字节码长度
      • Content-Language 服务器发送内容的语言和国家名
      • Content-Type 服务器发送内容的类型和编码类型
      • Last-Modified 服务器最后一次修改的时间戳
      • Refresh 控制浏览器1秒后转发URL所指向的页面
      • Accept-Ranges 服务器是否支持断点续传,bytes表示支持,none表示不支持
      • Content-Disposition 服务器控制浏览器以下载方式打开文件
      • Transfer-Encoding 服务器分块传递数据到客户端
      • Set-Cookie 服务器发送Cookie相关的信息
      • Expires 本次发送的HTTP响应中的实体内容的过期时间
      • Cache-Control发送的HTTP响应消息在浏览器中的缓冲时间
      • Pragma 服务器控制浏览器不要缓存网页
      • Connection HTTP请求的版本的特点,连接方式(close 或 keepalive)
      • Date 响应网站的时间戳
      • nginx-hit 负载均衡
      • CloudServiceDiscount 云服务器加速
      HTTP/1.1 200 OK
      Server: nginx
      Date: Thu, 05 Nov 2020 01:00:57 GMT
      Content-Type: text/html
      Last-Modified: Thu, 07 Nov 2019 04:08:10 GMT
      Vary: Accept-Encoding
      Expires: Thu, 05 Nov 2020 01:00:57 GMT
      Cache-Control: max-age=60
      X-Powered-By: schi_v1.02
      Age: 1
      Content-Length: 539457
      X-Cache: HIT from ja108-181.sina.com.cn
      Connection: close
    

    HTTP响应空行

    • 响应空行
      • 最后一个响应头部之后是一个空行,发送回车符和换行符
      • 通知服务器以下不再有响应头部

    HTTP响应体

    • 响应体
      • 服务器返回给客户端的文本信息

    获取消息头函数

    • $http_response_header 函数
      • 获取消息头
      • file_get_contents() 将整个文件的内容读入一个字符串
      • get_headers() 获取消息头
    <?php
      $url= "http://www.sina.com.cn";
      $html= file_get_contents($url);
      foreach($http_response_header as $name=>$value){
        echo "$value"."<br>";
      }
    ?>
    

    HTTPS

    • 基础配置
      • 公钥
        • 公开的加密方式
      • 私钥
        • 存在服务器的唯一解公钥加密的方式
      • 签名
        • 确保数据的一致性
        • 保证数据不被改
      • 证书
        • 确保当前发送数据单位可信
        • 表示数据发送者的身份
        • CA证书颁发机构,代表某个域名,并且包含加密的钥匙
        • 保证服务器的真实性
  • 相关阅读:
    《机器与人》(读至第一章)
    Solution Architect
    InfoQ Trends Report
    阿里云场景化阿里云企业数字化转型售前方法PSA
    AWS 6R
    .NET Core Ecosystem
    《如何阅读一本书》
    《数字化转型方法论:落地路径与数据中台》
    《亿级流量网站架构核心技术》
    .NET面试题整理
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/13977867.html
Copyright © 2020-2023  润新知