HTTP协议的主要特点、报文组成部分、POST 和 GET的区别及状态码详细介绍
时间:2018-08-24
本文章向大家介绍HTTP协议的主要特点、报文组成部分、POST 和 GET的区别及状态码详细介绍,需要的朋友可以参考一下
【要点】
1. HTTP协议的主要特点
2. HTTP报文的组成部分
3. HTTP方法
4. POST 和 GET的区别
5. HTTP状态码
【总结】
HTTP协议的主要特点
主要特点:简单快速, 灵活, 无连接(非keep-alive),无状态
- 每个资源URI是固定的,想访问某个资源 ,浏览器里输入URI就可以了。
- 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:是指协议对于事务处理没有记忆能力。后续处理需要前面的信息的时候必须要重新传。
【补充】什么是URI? 什么是URL? 区别是什么?
简单总结:
URI--统一资源标识符
URL(Uniform Resource Locator):统一资源定位符有时也被俗称为网页地址。
URL 是 URI 的子集
HTTP报文组成
用于HTTP协议交互的信息被称为HTTP报文。
- 请求端的HTTP报文叫做请求报文:
- 请求行: 包含用于HTTP方法,请求URI和HTTP版本
- 请求头:key: value 包含表示请求和响应的各种条件和属性的各类首部
- 空行: 告诉服务端接下来是请求体了
- 请求体
如下图:
- 响应端叫做响应报文:
- 状态行: 包含表明响应结果的状态码,原因短语和HTTP版本
- 响应头,
- 空行,
- 响应体: ...
HTTP方法
- POST:传输实体内容资源
- GET:获取资源
- PUT:更新资源
- HEAD:获得报文首部
- DELET:删除文件
【考点:POST和GET的区别?】(记住3-5个)
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的(2kb 不同浏览器也会有所不同),而POST没有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body(请求主体)中。
- GET请求只能进行url编码 -- encodeURIComponent(),而POST支持多种编码方式。
【补充】POST数据的格式与查询字符串格式相同,如果需要将页面中表单的数据进行序列化,然后再通过 XHR 发送到服务器,可以使用 serialize()函数来创建这个字符串,也就是表单序列化
HTTP状态码
需要记住一些经常碰到的,其他状态码可查阅HTTP状态码文档
- 1xx:指示信息,请求正在处理中
- 2xx:请求正常接收
- 200: ok
- 206:“Partial Content”响应: 客户端发送了一个带有Range请求头的Get请求,是表明自己只需要url上部分的资源,服务器完成了它。 比如:video audio播放一个很大的视频/音频地址时,一般会返回206
- 3xx:重定向 需要进行附加操作才算完成请求
- 301: 永久重定向,所请求的页面已经转移至新的URL
- 302: 临时重定向
- 304:缓存,服务器告诉浏览器可以直接使用缓存,不用请求服务器了
- 4xx(客户端错误)
- 400: 客户端语法错误
- 401: 请求授权失败
- 403: 请求不允许 Forbidden资源禁止被访问
- 404: 没有发现文件、查询或URl
- 5xx(服务器端错误)
- 500:服务器不可预计的错误
- 501: "Internal Server Error" 服务器端在执行请求时发生了错误,此时服务器并没有正常工作
- 503: 服务器当前不能处理客户端的请求 临时过载和当机
- 504: 服务器没连上
- 505: 服务器不支持或拒绝支请求头中指定的HTTP版本
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python解析式
- 面试官:Tomcat 的调优怎么做?你的最佳实践有哪些?
- Tomcat源码分析
- lazy-mock ,一个生成后端模拟数据的懒人工具
- Python拉链法和开地址法实现字典
- Springboot2 整合redis发布订阅 解决订阅多个频道重复代码过多 创建很多bean问题
- 爬虫选择器算法漫谈
- Java 类加载机制及双亲委派模型
- Python函数
- Effective C++条款3 我可以不使用const?
- t想成为微信斗图之王么?你需要这款开源工具的力量!
- 蛋糕被切成了几块
- 偿还技术债(1)-EventBus源码详解
- 两万六千字带你Kotlin入门
- 从源码看 Jetpack(7)-SavedStateHandle源码详解