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)浏览器渲染页面

  • 参考

posted @ 2018-04-08 22:49  执着的程序员~  阅读(145)  评论(0编辑  收藏  举报