1、HTTP 简介
什么是HTTP?
HTTP是目前最为广泛的一种网络协议,所有的万维网文件都必须遵守这个标准。
设计HTTP的目的:是为了提供一种发布和接受HTML页面的方法。
HTTP的历史由来:(可自行百度...)
HTTP的主要特点:
1)、支持客户端/ 服务器 模式。
客户端向服务器发送请求时,只需要传送请求方法 和 路径。
常用的请求方式有 POST 和 GET。(还有其他的请求方式,详情如下.....)
2)、简单。
由于HTTP简单,服务器的程序规模小,因而通信速度就比较快。
3)、灵活。
HTTP允许传输任意类型的数据对象。
传输的数据类型由Content-Type 标记识别。
4)、无连接。
限制每次连接,使其每次只处理一个请求。
服务器处理完客户端的请求,并接收客户端返回的应答后,就断开连接。
这种连接方式 可以节省传输时间。
5)、无状态
HTTP是无状态协议,无状态是指HTTP协议对事物的处理没有记忆能力。
缺少状态意味着如果后续处理需要前面的信息,则必须重新上传,这样会导致每次连接传送的数据量较大;反之,如果后续处理不需要前面的信息,则应答速度就会较快。
2、HTTP请求
HTTP请求的组成部分:统一资源定位符(URL)、请求方法(Method)、头(Header)、请求体(Request-body)
统一资源定位符:(Uniform Resource Locator,URL)是用于完整的描述互联网上网页和其他资源 地址的一种标识方法。可以通过这种方法对网络上的资源进行定位和操作。
URL的一般表现形式为:<协议>://<主机名>:<端口>/<路径>/<文件名>
如:http://www.baidu.com
<协议>:是指获取互联网资源所使用的协议。HTTP请求是使用的HTTP协议,除此之外,还有 文件传输协议(Fail Transfer Protocol,FTP)。
<主机>:是指目标文件存放在哪一台主机上,可以给出 域名 或者 IP地址。
<端口>:是服务器监听的端口,HTTP默认为 80,FTP默认为 21。
<路径 - 文件名>:是为了进一步给出资源在服务器上的位置,但名称是 虚拟的。
对于动态网页,用户访问时还需要提供访问动态网页的参数,是为 查询串(Query String)。
具体表现形式为:<协议>://<主机名>:<端口>/<路径>/<文件名>?<参数1>=<值1>&<参数2>=<值2>&......(后面再多参数同上)
方法:(Method)HTTP请求定义了与服务器交互的不同方法,基本方法有四种:POST、GET、PUT、DELETE。
可以简单理解为:URL地址用于定位描述一个网络上的资源,而这四种交互方法则可以对URL定位的资源进行 改、查、增、删 等操作。
POST:一般用于更新资源。
GET:一般用于获取(查询)资源。
PUT:一般用于上传资源。
DELETE:一般用于删除资源。
除了上面介绍的四种交互方法,HTTP请求还包含 PATCH、COPY、HEAD、OPTIONS、LINK、UNLINK、PURGE、LOCK、UNLOCK、PROPFIND、VIEW等方法。
在此处,POST 和 GET 的区别 小做赘述:
1)、提交数据的方式不同
GET:请求数据会直接附在URL后面,显示在地址栏。
格式:以 ? 分割URL和传输参数,多个参数以 & 连接。如果数据是英文字母、数字,则直接发送
如果是空格 ,则转换为 + 后发送
如果是中文、其他字符,则会用Base64(或其他加密方式) 加密字符串,转换后发送
POST:提交数据会放在HTTP请求的 请求体 <request-body>中。
2)、传输数据的大小不同。虽然HTTP请求没有对传输数据的大小进行限制,HTTP规范也没有对URL的长度进行限制,但在实际开发中还会存在一些限制。
3)、安全性不同
POST方式 比 GET方式的安全性更高些。通过GET提交用户名和密码时,会明确显示在地址栏,如果浏览器有缓存的情况下,则通过查询浏览器的使用记录会泄露账户密码。
头:(Header)
体:(Body)
HTTP请求报文是面向文本的,报文中的每一个字段都是 ASCII码串,各个字段的长度是不确定的。请求报文的一般格式如下:
<request-line> 请求行
<Header> 头
<blank line> 空行
[<request-body>] 请求体[请求数据]
3、HTTP响应
什么是HTTP响应?
将HTTP请求发送到服务器后,服务器会给出相应的应答,服务器返回的应答消息 称为 HTTP响应。
HTTP响应报文的组成部分?
三个部分,与请求报文类似,一般格式如下:
<status-line> 状态行(响应结果状态码,用来说明所请求的资源情况)
<Header> 消息报头
<blank line> 空行
[<response-body>] 响应正文(响应结果数据)
状态行的格式为:HTTP-Version Status-Code Reason-Phrase CRLF。
HTTP-Version:表示服务器HTTP(协议)的版本
Status-Code: 表示服务器返回的响应状态码。由三位数组成,有如下五种取值可能,以及常见的状态码及说明:
1xx:指示信息。表示信息已接收,会继续处理。
2xx:成功。表示请求已被成功接收、理解和接受。
200 OK:客户端请求成功。
3xx:重定向。表示要完成请求,必须进行更进一步的操作。
4xx:客户端错误。请求语法有误 或者 请求无法实现。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:客户端请求未经授权。
403 Forbidden:服务器未收到请求,但拒绝提供服务。
404 Not Found:请求资源不存在,如输入了错误的URL,客户端请求在服务器上未定位到该URL标记的资源。
5xx:服务器错误。服务器未能实现合法的请求。
500 Internal Server Error:服务器发生了不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
Reason-Phrase:表示状态代码的文本描述
CRLF: 表示一个回车符 和一个 换行符
4、数据交换格式
此处,记录一种 客户端 与 服务器之间的数据交换格式。
JSON:JS对象标记(JavaScript Object Notation - JSON) 是一种轻量级的数据交换格式。
它是基于ECMAScript(W3C制定的JavaScript规范) 的子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得JSON成为理想的数据交换语言, 其易于阅读和编写,同时也易于机器解析和生成,并能有效的提升网络传输效率。
因此 HTTP(协议)请求的接口响应一般为JSON格式。
JSON的语法规则:
用大括号保存对象、用键值对表示对象、用逗号分隔每个对象、用中括号保存数组
示例:{"name":"Lily", "age":"32", "sex":"male"}