OSI七层模型和四层模型
全称是开放系统互连模型,国际标准化组织ISO制定的互联网通信标准。
四层模型是简化的模型,七层模型是理论层面理想化的,四层模型才是实际应用的模型。
1.HTTP协议
超文本传输协议,是用于从服务器到本地客户端(如浏览器)之间的超文本内容的传输。
HTTP协议的端口号:80,HTTPS端口号是443
0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的。
1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。
1.1交互过程:客户端主动发起请求,服务器响应。
客户端可以使用浏览器等客户端软件发请求,服务器一般都会安装web服务器软件(tomcat\weblogic\apache等等)来相应你的请求,web服务器收到请求后给客户端发送相应的响应信息。
1.2协议特点
一般用于B\S(浏览器\服务器)模式,C\S(客户端\服务器)也可以用。
无连接:通信双方不建立持久的连接的,一发一收间有连接,处理完连接就断了。
无状态:因为不保持连接,所以自然不知道对方的状态。也不知道之前发过什么。
媒体独立:支持任何类型的数据,所以叫超文本,比如音视频、图片、文件、html、xml、json等
简单高效:使用过程中发报文,一个请求报文,一个响应报文。报文有统一的格式。
1.3HTTP请求
1.3.1请求就是发请求报文,客户端来发。请求报文的格式:
请求行:包含:请求方法 请求地址url HTTP协议及其版本,它们之间用空格分隔。
请求头:请求头是一些附加信息,内容比较多,我们只说常用的。这些信息的格式,用键值对来表示,key:value格式。
Accept:用于告诉服务器,我这个客户端可以处理的内容类型有哪些。
Referer:表示请求的来源是哪里。举例,你在百度的页面上点击了淘宝的连接,淘宝服务器收到你的请求后,就知道你的来源是百度。
Accept-Language:客户端可以接受的语言。
User-Agent:用户代理,用户通过什么代理来发请求的。一般都是浏览器,包括操作系统和浏览器版本等相关信息。
Content-Type:请求报文体(正文)的类型
Host:指定请求的资源所在的主机和端口号,如 localhost:8080
Content-Length:报文体的长度(单位是字节)
空行:请求头结束后,有一个空行
请求体:存放请求的数据(GET请求方法没有请求体,POST方法有请求体)
1.3.2 GET请求:
用于查询,比如打开一个网页比如打开百度,就是浏览器给百度服务器发了GET请求。
1.3.3 POST请求:
用于增删改,给服务器发数据,比如使用登录功能,比如使用百度翻译。
1.3.4常用的请求方法:
GET:用来查询获取资源
POST:向服务器提交数据,可以用来增删改
PUT:提交数据,修改资源
DELETE:删除资源
HEAD:类似于GET,只获取报头部分
TRACE:用于测试和诊断,让服务器原样返回我发送的内容
1.3.5 GET 和 POST 的区别:
参数存放的位置不同,get参数直接放在url里面,在?后面。使用键值对的形式表示,如key1=value1&key2=value2...,get请求携带的参数较少。对于汉字使用了URLEncode进行编码。多个参数之间使用&连接。post放在请求体里面。
get请求参数的长度有限制,因为url的长度就有限制。post请求的参数由于放在请求体中,所以长度没有限制。
get请求参数由于在url中,安全性低,post参数在请求体中,安全性高。
get请求可以被浏览器的历史记录记录下来,post请求浏览器无法保存记录。
1.4 HTTP响应
1.4.1响应是服务器发来的报文,响应报文格式:
状态行:协议版本 响应状态码 描述符 这些空格分隔
响应头:由键值对表示,内容跟请求头不太一样,没有请求头多。
Content-Type:响应报文体(正文)的类型,仍然使用MIME类型。
Content-Length:响应报文体的长度(字节单位)。
Set-Cookie:服务端设置的客户端的cookie信息(cookie用来对用户身份鉴权,服务器下发,保存到客户端的一段字符串,下次客户端访问服务器带上这段cookie就可以亮明身份)。
Cache-Control:服务器的响应内容是否要缓存到浏览器本地。
Content-Encoding:服务端发送的数据使用的压缩格式。
Content-Language:响应数据所使用的语言。
空行:表示响应头结束
响应体:存放服务端返回给客户端的数据
1.4.2常见的响应码有以下几大类:
信息响应:100-199:代表服务器收到了请求,但是需要请求者继续执行操作(比如报文很长,没有接收完整)。
成功响应:200-299:代表成功响应,你的请求被成功接收并且处理了。200是常见的,就代表请求成功。
重定向消息:300-399:代表重定向,需要进一步操作才能完成请求。常见的有300,表示多种选择,请求的资源可包括多个位置,可返回一个资源与地址的列表用于用户终端(例如:浏览器)选择。301,代表目标资源被永久的移动到了一个新的 URI。
客户端错误响应:400-499:代表客户端错误,404常见,代表你请求的资源不存在,在浏览器中,这意味着无法识别 URL。403代表没有权限,客户端没有访问内容的权限。
服务端错误响应:500-599:代表服务端错误,常见的500,服务器内部错误。501代表服务器不支持请求的功能。
1.5抓包实践
通过edge或谷歌浏览器自带的抓包工具,来实践抓包,了解报文结构。
get请求抓包:访问百度网站
post请求抓包:使用百度翻译。请求标题是:v2transapi,类型是:fetch/xhr。(xhr (xmlhttprequest) 和fetch 是前端实现ajax(asynchronousjavascript and xml)的两种方法)。