https://www.runoob.com/http/http-intro.html
OSI七层模型:
上三层---应用层,控制软件方面
应用层:文件传输,电子邮件传输,文件服务,虚拟终端 :TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层:数据格式化,代码转换,数据加密
会话层:解除或建立与别的接点的联系(会话)
下四层---数据流层,用来管理理硬件
传输层:提供端对端的接口: TCP,UDP
网络层:为数据包选择路由: IP,ICMP,IGMP
数据链路路层 :传输有地址的帧以及错误检测功能: ARP
物理理层: 以二进制数据形式在物理理媒体上传输数据
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
SNMP:简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式
TCP:传输控制协议
UDP: 数据报文协议
ARP:地址解析协议
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息
1 HTTP协议(HyperText Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
2 HTTP 工作原理
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
3:HTTP三点注意事项:
HTTP是无连接:无连接的含义是限制每次连接只处理一个请求
HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力
4 客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
POST http://openapi.tuling123.com/openapi/api/v2 HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: 1a39439e-61c8-4e59-82a1-736a362c5962
User-Agent: PostmanRuntime/7.2.0
Accept: */*
Host: openapi.tuling123.com
accept-encoding: gzip, deflate
content-length: 468
Connection: keep-alive
5 服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
6 请求方法:
1 GET请求指定的页面信息,并返回实体主体。
2 HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT从客户端向服务器传送的数据取代指定的文档的内容(修改内容)。
5 DELETE请求服务器删除指定的页面。
7 URL
URL:统一资源定位符,接口的访问地址(包含服务器器地址+接口地址)
URL组成格式
协议\\: 服务器器地址:端口号\资源路路径?参数1=值1&参数2=值2
如:https://www.sojson.com/open/api/weather/json.shtml?city=北北京
8 URI:统一的资源标识符
9 GET请求和POST请求的区别
GET请求:
GET请求可被缓存
GET请求保留留在浏览器历史记录中
GET请求可被收藏为书签
GET请不不应在处理敏感数据时使用
GET请求有长度限制
GET请求只应当用于取回数据
POST请求:
POST请求不会被缓存
POST请求不会保留留在浏览器器历史记录中
POST不能被收藏为书签
POST请求对数据长度没有要求
10 请求头
11 请求数据(又称为Request Body 或 Data)
请求数据类型(Content-Type)(重点)
application/x-www-form-urlencoded: 网页表单格式(默认)
application/json:REST接口常用格式
text/xml:xml格式,RPC接口,Dubbo接口常用格式
test/html: html格式
multipart/form-data: 混合表单,支持上传图片
12 常见的响应格式有:
html
json
xml(可扩展标记语言),树桩结构
13 HTTP状态码
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误
常见HTTP响应码
200: 成功
301;永久重定向
302: 请求重定向到另外一个接口
400: 请求语法错误
403:资源没有访问权限
404:资源不存在(有可能是请求url错误或参数不正确)
405:请求方法不被允许(比如接口只允许Post,使用Get请求接口)
500:服务器器内部错误(通常是服务器挂了或接口Bug)
502: 网关失效
504: 网关请求超时
13:HTTP与HTTPS区别
HTTP协议传输的数据都是未加密的,HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
HTTP和HTTPS使⽤用的是完全不同的连接方式,⽤用的端口也不一样,前者是80,后者是443。
HTTP的连接很简单,是无状态的;HTTPS协议是由HTTP+SSL协议构建的可进行行加密传输、身份认证的网络协议,比HTTP协议安全。
14 cookie与session
cookie为访问网站时,由服务器返回的一种cookie类型的数据;会存储在浏览器所在的电脑;
cookie保存在客户端,保存机制
session:服务端为客户端访问所建立和维持的会话,通常会生成一个唯一的session id,会话有一定的有效期;将会话id(Session ID)随响应返回,并保存在客户端的Cookies里里--会话机制
请求:cookie:session-id=xx
响应:set-cookie:sessin-id=xx
15 授权与加密:
1 Session/Cookie机制: 即需要登录,登录后可访问各个接口,最常用的一种策略略,适用于内部接口。
2 固定appid模式: 用户注册时会生成一个唯一的appid,用户调用接口时需要携带appid,适用于公开接口,安全性较差。
3 动态token模式: token即身份令牌,用户访问接口需要使用个人appid临时申请一个token,token有一定有效期,适用于公开接口,安全性较appid模式好。
4 开放协议: Basic Auth/ Oauth1.0 / Oauth2.0: 适用于开放接口。类似auth,登录授权相关
5 数字签名(sign或sig)是用来对原始参数整体进行加密后生成的一个字符串,请求时参数和签名一期发送,服务器收到请求后对参数再次计算签名核对和所携带的签名是否一致。
16 缓存
HTTP 缓存机制作是 web 性能优化的重要手段,当用户第一次请求服务器器资源时,服务器将资源缓存到客户端本地,在一定时间内(缓存有效期内)当用户
再次向服务器请求同样的资源时,可以直接从缓存中读取,而不用从服务器下载。
17 TCP三次握手:
SYN:同步序列编号(Synchronize Sequence Numbers):是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递
ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。
FIN:关闭连接(四次挥手用到)
SYN,ACK,FIN都是标注位
三次握手流程图
三次握手过程:
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN-SENT状态,等待Server确认;
第二次握手:Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN-RCVD状态;
第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED(已建立)状态,完成三次握手,随后Client和Server就可以开始传输数据。
四次挥手流程:
四次握手断开连接:
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当 然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。