HTTP协议

简介

1.1990年伯纳斯.李,发明了万维网(WWW),写了第一个Web Server
2.HTTP协议(Hyper Text Transfer Protocol):应用层协议,是浏览器和Web Server之间通信的协议,处理客户端和服务端之间的通信
3.HTTP协议通过请求头和返回头控制协议工作。无论是请求头还是返回头都是Key/Value的形式。

请求(Request)

一次请求,分成头(Header)和体(Body)。 注意:请求头和消息体中间需要空行换行,下面是一个请求头+消息体的示例:
在这里插入图片描述

返回(Response)

一次返回,也同样分(Header)和体(Body)。 下面是一个返回头+消息体的示例:
在这里插入图片描述

常见得请求头

Content-Length:发送/接收Body内容的字节数。
User-Agent:这个字段可以帮助统计客户端用了什么浏览器、操作系统等 。
在这里插入图片描述
Content-Type:请求的时候,告知服务端数据的媒体类(MediaType/MIME Type)。返回的时候告知客户端,数据的媒体类型。
在这里插入图片描述
Origin:描述请求来源地址
在这里插入图片描述
Accept:是HTTP协议协商能力的体现,用于建议服务端返回何种媒体类型(MIME Type)
/:代表所有类型(默认),多个类型用逗号隔开例如:text/html, application/json
Accept-Encoding:建议服务端发送哪种编码(压缩算法)
deflate, gzip;q=1.0, *;q=0.5
Accept-Language:建议服务端传递哪种语言
Accept-Language:fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
在这里插入图片描述
Referer:告诉服务端打开当前页面的上一张页面的URL,非浏览器环境有时候不发送Referer(或者虚拟Referer,通常是爬虫),常用于用户行为分析
在这里插入图片描述
Connection:决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭。Http1.0 默认是 close,Http1.1 后默认是 keep-alive
在这里插入图片描述

HTTP的请求方法

GET:从服务器获取资源
POST:在服务器创建资源(幂等性)
PUT:在服务器修改资源
DELETE:在服务器删除资源
OPTION :跨域部分讲解
TRACE :用于显示调试信息 多数网站不支持
CONNECT: 代理部分讲解
PATCH :对资源进行部分更新(极少用)

HTTP的状态码

1xx:提供信息
100 — continue
101 — 切换协议(switch protocol)

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 永久重定向
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重定向资源

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(版本不支持)

注:多数服务端开发已经不遵循状态码

HTTP连接

http底层还是TCP协议,需要三次握手才能建立连接,为了节省网络成本,会考虑多个请求复用一个TCP连接。
Keep-Alive:多次请求复用一个TCP连接。
如,Keep-Alive: timeout=5, max=1000
单个请求:请求完成后,在timeout时间内没第二个请求进来则会关闭。
多个请求:在一个请求响应之后,在 timeout 时间内有另一个请求进来,就会利用相同的 TCP 连接继续响应这个请求,直到没有更多请求进来,可以通过 max 字段设定最多响应的请求数。

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

URL

URL也称为网址,比如我们输入的网址:
https://www.baidu.com:8080/s?ie=UTF-8&wd=csdn
https:代表请求协议
www.baidu.com:代表请求地址,通过DNS解析成IP
8080:目标端口
s:请求资源路径
ie=UTF-8&wd=csdn:请求参数,多个参数用‘&’隔开

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

DNS(Domain Name System):域名解析系统。
用户访问www.baidu.com时,会先在DNS系统里根据域名去查询对应的IP地址,DNS返回IP,客户端发送http请求到这个ip地址的服务器请求资源。
在这里插入图片描述

如果所有压力都在一台DNS服务器上…?
这肯定不可能,全国那么多域名,如果解析域名全部都请求同一个服务器,那根据承受不住的。所以有了DNS Query的分级缓存策略
1.先查询浏览器的本地缓存(通常在内存中)
2.本地没缓存,查找操作系统的hosts文件,该文件在linux 中在 /etc/hosts里
3.上述步骤没有找到,DNS会查询本地服务提供商(ISP)
4.ISP没找到,请求指向Root根服务器,返回顶级域名服务器地址
5.浏览器发送请求给顶级域名服务器,返回权威域名服务器地址
6.浏览器发送Lookup请求给权威域名服务器,找到具体DNS记录,返回给浏览器
在这里插入图片描述

CDN 内容分发网络(Content Delivery Network)

CDN(Content Delivery Network):将请求分散到全世界各地,分发流量,加快访问速度。但是,CDN上无法部署业务逻辑,更新慢,无法保证一致性,比较适合纯的静态资源,比如图片、视频、脚本文件、样式文件等。

HTTP缓存

存储将被用到的数据,提升访问速度。缓存优势:成本低(速度快,时间少),有选择性存储数据
缓存的工作原理:
在这里插入图片描述
缓存条目:通常是Key/Value结构。如HTTP缓存,通常以Key为URL;Value通常不仅仅只包括数据,还会包括一些描述字段,比如缓存的失效时间等。
缓存置换:缓存满了后,每次创建新的缓存条目,就会删除旧的缓存条目。
采用LRU(LRU-Least recently used)缓存置换算法:按照最近最少使用原则来删除旧缓存。
HTTP缓存最重要的配置项为Cache-Control HTTP 返回头。 不仅浏览器可以缓存,浏览器和服务器之间的HTTP代理服务器也可以缓存。
在这里插入图片描述

强制缓存

强制缓存行为是强制执行的,在缓存到期前,一定会使用浏览器的缓存。
在这里插入图片描述
强制缓存使用例子:
在这里插入图片描述
基于确定时间的强制缓存:
Cache-Control:public
Expires: Fri, 16 Oct 2020 02:31:07 GMT
超过Expires限定的日期缓存就会失效
注意:如果 max-age 和 Expires 都有, Expires 会被忽略。

协商缓存

协商缓存的行为是基于变更协商的。在缓存条目对应的资源发生生变化前,都使用浏览器缓存。因此协商缓存必须每次都请求服务端。
Etag:服务端想实现协商缓存时可返回ETag,资源不变,ETag的数值也不会改变。
浏览器保存服务端的E-Tag后缓存资源,下次请求时带上该E-Tag(服务器匹配成功后返回304 Not Modified)
Last-Modifed(Depreciated):基于变更时间的协商缓存方案:
服务器返回资源时返回一个 Last-Modifed 头,浏览器收到后,进行缓存,保存该时间。 下次发请求时,带上该数据,在实际之后资源后更新,则返回新资源,若无更新,就返回304 Not Modifed 。
在这里插入图片描述

代理服务器

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

正向代理

定义:把要请求的网址(资源)发送给代理服务器,由代理服务器向目标发送请求后获取资源再返回给请求方。也就是你知道访问的服务器是一个代理服务器,你也知道代理服务器的目标服务器是谁。
在这里插入图片描述

反向代理

定义:当请求方向一个网址发送一个请求的时候,请求方意识不到请求的其实是一个反向代理服务器,这个代理服务器将请求代理给了内部的网络。也就是你不知道你访问的服务器是代理服务器
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值