HTTP协议

HTTP协议(Hyper Text Transfer Protocol): 应用层协议

目标: 是处理客户端和服务端之间的通信

请求(Request):一次请求,分成头(Header)和体(Body) 

返回(Response):一次返回,也同样分(Header)和体(Body) 

网址:

URL(Uniform Resource Locator):用于在互联网上定为一个资源,URL也称为网址,比如我们输入的网址。

DNS(Domain Name System):域名解析系统

DNS Query的分级缓存策略:

先查询浏览器的本地缓存(通常在内存中)

本地没缓存,查找操作系统的hosts文件,该文件在linux 中在 /etc/hosts里

上述步骤没有找到,DNS会查询本地服务提供商(ISP)

ISP没找到,请求指向Root根服务器,返回顶级域名服务器地址

浏览器发送请求给顶级域名服务器,返回权威域名服务器地址

浏览器发送Lookup请求给权威域名服务器,找到具体DNS记录,返回给浏览器 

DNS记录:

DNS的数据以记录形式存储,就叫DNS记录。DNS记录的种类非常多, 有30多种。每条DNS记录描述了网址(URL)的一种关系。

A记录:定义主机的IP地址

AAAA记录:定义主机的IPv6地址 

CNAME记录(Canonical Name Record):定义域名的别名

MX记录(Mail exchanger record):定义邮件服务器所在的位置

NS记录(Name Server Record):定义DNS信息服务器所在的位置

SOA记录(Start of Authority Record):定义在多个ns服务器中哪个是主服务器

TXT记录:提供一个文本信息

内容分发网络(CDN) :

CDN(Content Delivery Network):将请求分散到全世界各地,分发流量,加快访问速度。

CDN上无法部署业务逻辑,更新慢,无法保证一致性,比较适合纯的静态资源,比如图片、视频、脚本文件、样式文件等。

请求头和返回头:HTTP协议通过请求头和返回头控制协议工作,无论是请求头还是返回头都是Key/Value的形式。

常见头部介绍:

Content-Length:发送/接收Body内容的字节数

User-Agent:这个字段可以帮助统计客户端用了什么浏览器、操作系统等

Content-Type:请求的时候,告知服务端数据的媒体类(MediaType/MIME Type),返回的时候告知客户端,数据的媒体类型

Origin:描述请求来源地址

Accept:是HTTP协议协商能力的体现,用于建议服务端返回何种媒体类型(MIME Type)

Referer:告诉服务端打开当前页面的上一张页面的URL,非浏览器环境有时候不发送Referer(或者虚拟Referer,通常是爬虫),并且常用于用户行为分析

Connection:决定HTTP连接是否在当前事务完成后关闭

HTTP常用的方法:

GET:从服务器获取资源

POST:在服务器创建资源(幂等性)

PUT:在服务器修改资源

DELETE:在服务器删除资源

状态码:

1xx:提供信息 

2xx:成功

  • 200 – OK
  • 201 – Created 已创建
  • 202 – Accepted 已接收
  • 203 – Non-Authoritative Information 非权威内容
  • 204 – No Content 没有内容
  • 205 – Reset Content 重置内容
  • 206 – Partial Content 服务器下发了部分内容(range header)

3xx:重定向

  • 300 – Multiple Choices 用户请求了多个选项的资源(返回选项列表)
  • 301 – Moved Permanently 永久转移
  • 302 – Found 资源被找到(以前是临时转移)
  • 303 – See Other 可以使用GET方法在另一个URL找到资源
  • 304 – Not Modified 没有修改
  • 305 – Use Proxy 需要代理
  • 307 – Temporary Redirect 临时重定向
  • 308 – Permanent Redirect 永久重定向

4xx:客户端错误

  • 400 – Bad Request 请求格式错误
  • 401 – Unauthorized 没有授权
  • 402 – Payment Required 请先付费
  • 403 – Forbidden 禁止访问
  • 404 – Not Found 没有找到
  • 405 – Method Not Allowed 方法不被允许
  • 406 – Not Acceptable 服务端可以提供的内容和客户端期待的不一样

5xx:服务端错误 

  • 500 – Internal Server Error(内部服务器错误)
  • 501 – Not Implemented(没有实现)
  • 502 – Bad Gateway(网关错误)
  • 503 – Service Unavailable(服务不可用)
  • 504 – Gateway Timeout(网关超时)
  • 505 – HTTP Version Not Supported(版本不支持)

301和308:

共同点:资源被永久移动到新的地址

差异:客户端收到308请求后,延用旧的method(POST/GET/PUT)到新地址,客户端收到301请求后,通常用户会向新地址发起GET请求 

302/303/307:

共同点:资源临时放到新地址

差异:302是http1.0提出的,最早叫做Moved Temporarily; 很多浏览器实现的时候没有遵照标准,把所有请求都重定向为GET。1999年标准委员会增加了303和307,并将302重新定义为Found。 303告诉客户端使用GET方法重定向资源,307告诉客户端使用原请求的method重定向资源

HTTP缓存:

传统的HTTP协议层网络结构的三种实体:Web服务器、浏览器、代理

缓存:存储将被用到的数据,提升访问速度

缓存的优势:成本低(速度快,时间少)、有选择性存储数据

缓存条目:通常是Key/Value结构。如HTTP缓存,通常以Key为URL;Value通常不仅仅只包括数据,还会包括一些描述字段,比如缓存的失效时间等。

缓存置换:缓存满了后,每次创建新的缓存条目,就会删除旧的缓存条目(时间上最早的条目)。

HTTP缓存最重要的配置项为Cache-Control HTTP 返回头,不仅浏览器可以缓存,浏览器和服务器之间的HTTP代理服务器也可以缓存。

代理服务器:代理服务器接收一个请求,然后把请求转发给另一个服务器;从另一个服务器接收结果,然后再返回给请求方。根据工作方式的不同,分成正向代理和反向代理。

正向代理:把要请求的网址(资源)发送给代理服务器,由代理服务器向目标发送请求后获取资源再返回给请求方

反向代理:当请求方向一个网址发送一个请求的时候,请求方意识不到,请求的其实是一个反向代理服务器,这个代理服务器将请求代理给了内部的网络

强制缓存:强制缓存行为是强制执行的,在缓存到期前,一定会使用浏览器的缓存

协商缓存:协商缓存的行为是基于变更协商的,在缓存条目对应的资源发生生变化前,都使用浏览器缓存,因此协商缓存必须每次都请求服务端

Etag:服务端想实现协商缓存时可返回ETag,资源不变,ETag的数值也不会改变

Last-Modifed(Depreciated):基于变更时间的协商缓存方案

HTTP连接:

为了节省网络成本,会考虑多个请求复用一个TCP连接

Keep-Alive:多次请求复用一个TCP连接

keep-alive的断开:单个请求:请求完成后,在timeout时间内没第二个请求进来则会关闭。 多个请求:在一个请求响应之后,在 timeout 时间内有另一个请求进来,就会利用相同的 TCP 连接继续响应这个请求,直到没有更多请求进来,可以通过 max 字段设定最多响应的请求数。

keep-alive是不是长连接?

keep-alive并不是长连接,WebSocket:长连接,提供在HTTP协议退化成TCP协议的方式,让客户端和服务器之间保持很长时间的连接且不中断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值