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证书颁发机构,代表某个域名,并且包含加密的钥匙
      • 保证服务器的真实性
posted @ 2020-11-15 19:08  wing1377  阅读(383)  评论(0编辑  收藏  举报