• HTTP 基础


    一、HTTP 概述

    • 概述

      • HTTP协议:是Hyper Text Transfer Protocol的缩写

      • HTTP协议:是超文本传输协议,广义的讲是资源传输协议

    • 特点:

      • 支持 B/S、C/S 架构模式

      • 简单快速: 客户向服务器请求服务时,只需传送 请求方法、url、请求参数 等

      • 灵活: HTTP允许传输任意类型的数据对象(正在传输的类型由Content-Type加以标记)

      • 短连接: 每次请求都需要新建立一个连接,请求完成,连接就断开

      • 无状态: 指协议对于事务处理没有记忆能力

    二、HTTP 请求报文、响应报文

    请求报文

    • 由客户端发起,其规范格式为:请求行、请求头、请求主体

    • 请求行:由请求方式、请求URL、协议版本 构成

    • 请求头:由浏览器自动生成

      • Host:localhost请求的主机
      • Cache-Control:max-age=0控制缓存
      • Accept:/ 接受的文档MIME类型
      • User-Agent:很重要
      • Referer:从哪个URL跳转过来的
      • Accept-Encoding:可接受的压缩格式
      • If-None-Match:记录服务器响应的ETag值,用于控制缓存,此值是由服务器自动生成的
      • If-Modified-Since:记录服务器响应的Last-Modified值,此值是由服务器自动生成的
    • 请求主体:即传递给服务端的数据

    响应报文

    • 由服务器发出,其规范格式为:状态行、响应头、响应主体

    • 状态行: 由协议版本号、状态码和状态信息构成 HTTP/1.1 200 OK

    • 响应头: 由服务器自动生成

      • Date:响应时间
      • Server:服务器信息
      • Last-Modified:资源最后修改时间 由服务器自动生成
      • ETag:资源修改后生成的唯一标识,由服务器自动生成
      • Content-Length:响应主体长度
      • Content-Type:响应资源的类型
    • 响应主体: 服务端返回给客户端的内容

    三、HTTP 状态码

    • 状态代码 由三位数字组成,第一个数字定义了响应的类别,共分五种类别:

      • 1xx:指示信息--表示请求已接收,继续处理

      • 2xx:成功--表示请求已被成功接收、理解、接受

      • 3xx:重定向--要完成请求必须进行更进一步的操作

      • 4xx:客户端错误--请求有语法错误或请求无法实现

      • 5xx:服务器端错误--服务器未能实现合法的请求

    • 常见的状态码,如下:

      • 200:客户端 请求成功

      • 301:永久 网页重定向,也就是接收到响应后会自动跳转一个新的url(可从响应的Location首部中获取这个url)

      • 302:暂时 网页重定向,也就是接收到响应后会自动跳转一个新的url(可从响应的Location首部中获取这个url)

      • 304:告诉客户端本地缓存数据可用

      • 400 Bad Request //客户端请求有语法错误,不能被服务器所理解

      • 401:请求未授权,也就是服务器无法辨别用户身份,需要先登录

      • 403:客户端无权访问,服务端拒绝提供服务

      • 404:请求的资源在服务器上未找到

      • 415:请求数据的格式 服务器不支持

      • 500:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理

      • 503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    • 更多状态码详解

    四、HTTP 请求方式

    • HTTP 定义了很多 与 服务器交互的方法

      • 最基本的有 GET, POST, PUT, DELETE 四个方法,对应着 资源的 增、删、改、查 四种操作
    • GET 方式请求

      • 请求数据量4kb左右(较小):查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集

      • 安全性较低

      • 请求参数是作为一个 key/value 的查询字符串,附加到URL上 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1

    • POST 方式请求

      • 请求数据量较大

      • 相对安全

      • 请求参数,在请求体中,通过 xhr.send(request) 添加;并且需要设置请求头中的 Content-Type

     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    
    • GET请求 POST请求 的区别
      • 用途: GET 请求常用于请求数据;POST 请求常用于存储、更新数据

      • 请求参数的传输: GET 请求的请求参数,在URL中,? 连接,& 分割;POST 请求的请求参数在请求体中

      • 请求数据 量大小: GET 请求数据量4kb左右 为上限;POST 请求数据量相对较大

      • 安全问题: GET 请求 请求参数暴露在地址栏,不安全;POST 请求的请求参数在请求体中,相对安全

    五、HTTP 工作流程

    • HTTP 工作流程 等同于 从输入URL到页面加载发生了什么? 简述如下:

      • (1)DNS 域名解析: 找到输入URL 对应的IP地址;查找顺序:本地域名服务器中 ---> 根域名服务器 ---> com顶级域名服务器

      • (2)TCP 连接: 建立一个从客户端 到 服务端的 HTTP 请求连接通道

      • (3)客户端发送 HTTP请求: 请求行、请求头、请求主体

      • (4)服务端响应 HTTP请求: 状态行、响应头、响应主体

      • (5)TCP 断开连接: HTTP优化 keep-alive

      • (6)浏览器渲染页面

    • 参考

  • 相关阅读:
    钉钉服务器端SDK PHP版
    戒不掉
    亲历钓鱼网站
    我整理的PHP 7.0主要新特性
    JavaScript中JSON的处理心得
    X3D中Profile如何翻译
    你可以写什么?
    Gitblit中采用Ticket模式进行协作开发
    理解JavaScript中的事件处理 阻止冒泡event.stopPropagation();
    测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)
  • 原文地址:https://www.cnblogs.com/zxvictory/p/8748081.html
Copyright © 2020-2023  润新知