HTTP简介:
HTTP:超文本传输协议
超文本指的是HTML,css,JavaScript和图片等。
HTTP协议是用于客户端和服务端之间通信
客服端发送请求,服务端接受并响应。
HTTP传输协议的特点:
1、允许传输任何类型的数据
2、无状态性:每次请求都是独立的,两个请求之间没有联系
3、无连接性:每次请求并做响应之后就断开连接。
由于是无状态的,所以有了Cookie,可以用来管理状态。
HTTP过程中包含3个重要部分,消息头,响应头和状态码。
- 消息头中存放的信息是客户端告诉服务器能回传什么,就是客户端能接收的信息是什么类型的,如果客户端需要传值,则传值信息也会放在消息头中。
- 响应头中存放的信息是服务器告诉客户端返回的内容相关信息,包括回传内容的长度,内容和缓存的时间等。
- 状态码为服务器告诉客户端它的响应结果是什么。
常见状态码:
200:服务器响应成功,请求正在被处理
302:所请求的资源已暂时更改.通常会重定向到另一个 URL
404:所请求的资源无法找到
500:服务器出现错误
工作原理:
请求方式:
get 方法一般用于请求,比如你在浏览器地址栏输入 www.baidu.com 其实就是发送了一个 get 请求,它的主要特征是请求服务器返回资源,而 post 方法一般用于表单的提交,相当于是把信息提交给服务器,等待服务器作出响应,get 相当于一个是 pull/拉的操作,而 post 相当于是一个 push/推的操作。
不同点:
- get请求不安全,在发送请求时,会将请求参数拼在URL之后,容易被窃听,对信息造成破坏。而post请求的请求参数是放在请求体body当中,对用户不可见。
- get请求URL地址有长度限制,post请求参数和值都放在body中,没有限制。
- get请求会被浏览器主动cache,post请求不会,除非主动设置。
- get请求可以随意回退,而post请求一次回退需要再次提交表单。
- get请求在发送过程中,会产生一个TCP数据包,浏览器会把http header和data一并发送,服务器响应200(返回数据)。post请求在发送过程中,会产生两个TCP数据包,浏览器先发送http header,服务器响应100 continue,再发送 data,服务器响应200 ok
HTTP是无状态性的,怎么解决?
-
Cookie:当客户端向服务器端发送一个请求信息时,服务器端会创建一个session对象,生成一个sessionid,并通过响应头的 Set-Cookie:JSESSIONID=XXXXXXX 命令,向客户端发送要求设置 Cookie 的响应;客户端收到响应后,在本机客户端设置了一个 JSESSIONID=XXXXXXX 的 Cookie 信息,该 Cookie 的过期时间为浏览器会话结束;
接下来客户端向同一个网站发送请求时,请求头会带上这个Cookie 信息。
-
JWT:与Cookie不同,JWT保存在客户端,JWT直接进行本地验证,验证完毕之后,这个 Token 就会在 Session 中随请求一起发送到服务器,通过这种方式,可以节省服务器资源,并且 token 可以进行多次验证。
TCP的三次握手四次挥手
连接开始阶段,三次握手
连接结束,四次挥手
地址栏输入 URL 发生了什么
当在浏览器中输入一个URL地址时,浏览器会根据你输入的 URL 地址,去查找域名是否被本地 DNS 缓存,不同浏览器对 DNS 的设置不同,如果浏览器缓存了你想访问的 URL 地址,那就直接返回 ip。如果没有缓存你的 URL 地址,浏览器就会发起系统调用来查询本机 hosts 文件是否有配置 ip 地址,如果找到,直接返回。如果找不到,就向网络中发起一个 DNS 查询。
未完待续~