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