HTTP方法方面
GET : 请求资源,,可用URL传参给服务器
POST: 发送数据
PUT : 传输文件
HEAD : 获得报文的首部,验证URL是否有效
DELETE : 删除文件
OPTIONS : 查询相应URL支持的HTTP方法
get方法和post方法的区别
1.get重点在从服务器获取资源,post重点在发送数据
2.传参过程不同,前者置于url后,可见,后者通过http的post机制,对用户不可见
3.get传输的数据量小,post可传输大量数据
4.post较get安全性更好,因为后者url是可见的
5.get方式只能支持ASCII字符,传中文会乱码,而post支持标准在字符集
http状态码方面
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码
100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已经接受请求,但尚未处理
301 Moved Permanently 永久重定向
302 Found 临时性重定向
304 Not Modified 自上次请求后,请求的网页未修改过
400 Bad Request 请求报文语法有误,服务器无法识别
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
304缓存的原理
服务器首先产生ETag,使用它判断页面是否已经被修改过,本质上,客户端将该记号传回服务器,验证是否被修改过,如果没有,收到这个状态码,浏览器就会使用缓存的文件
首部字段
通用首部字段
Date : 创建报文时间
Connection : 连接的管理
Cache-Control : 缓存的控制
Transfer-Encoding:报文主体的传输编码方式
请求首部字段
Host : 请求资源所在服务器
Accept:可处理的媒体类型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言
响应首部字段
Accept-Ranges:可接受的字节范围
Location:令客户端重新定向到的URI
Server:HTTP服务器的安装信息
实体首部字段
Allow:资源可支持的HTTP方法
Content-Type:实体主类的类型
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的的字节数
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
http的缺点与https
(1)内容可能被窃听
(2)通信方身份可能被伪装
(3)报文可能被篡改
http+加密+认证+完整性保护=https
http2.0
(1)二进制协议代替文本协议,简洁高效
(2)每个域使用一个多路复用的连接
(3)压缩头部信息减少开销
(4)允许服务器主动推送应答到客户端缓存
一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
(1)浏览器查到域名对应的ip地址
(2)浏览器向服务器发送一个http请求(tcp三次握手)
(3)服务器处理请求,通过路由读取资源
(4)返回一个http响应(将Content-type设置为text/html)
(5)浏览器构建DOM树
(6)浏览器获取嵌在HTML中的资源
(7)显示完成页面
(8)发送异步请求
1.浏览器查找当前URL是否存在缓存
HTTP缓存有多种规则,根据是否需要重新向服务器发起请求分为两种:强制缓存,对比缓存.
强制缓存:
cache-control:相对时间,缓存在相应的时间内有效
Expires:绝对时间,服务器时间,与当前时间比较
对比缓存:
last-modified:第一次请求资源时,服务器返回的字段,表示最后一次更新的时间
Etag:资源的实体标识,当资源更新时Etag会改变,服务器会判断Etag是否变化,否则304
2.域名解析
域名只是ip地址的一个映射
1.浏览器先查找本地hosts文件寻找映射关系
2.查找本地DNS解析器缓存
3.查找本地DNS服务器
4.根域服务器->顶级域名->二级域名->子域名查找
3.发起TCP的三次握手
解析域名后,获取了服务器ip地址,开始建立连接,这由tcp协议完成
第一次:客户端发送发送包(synchronize),等待服务器确认
第二次:服务器接受到包,必须确认,然后再发出一个包(synchronize+acknowledgement)
第三次:客户端受到服务器的包,向服务器发送确认包(acknowledgement),此包发送完毕即完成三次握手
4.建立tcp连接后发起http请求
5.服务器响应http请求
浏览器接受响应
6.浏览器解析html,页面渲染
在浏览器还没接收到完整的HTML文件时,它就开始渲染页面了,在遇到外部链入的脚本或图片时,会再次发生HTTP请求重复上述步骤。在收到css文件后对已经渲染的页面重新渲染,加入它们对应的样式,图片文件加载完立刻显示在相应的位置。在这一过程中可能会触发重绘或重排。
7.四次挥手结束,关闭tcp连接
1.假设client端发起中断连接请求:发送FIN报文
2.Server端收到FIN报文后:发送ACK报文
3.此时clent继续等待Server的FIN报文:收到FIN报文
4.向Server发送ACK报文
为什么连接的时候是三次握手,关闭的时候是四次握手
因为当server端收到FIN报文时,很可能不会立即关闭socket,所以先回复一个acknowledgement,等报文发送完了再发送fin报文,因此需要四步