HTTP

什么是http协议

http是一个计算机世界里专门在两点之前传输文字、图片、音频、视频等超文本数据的约定和规范。

TCP/IP网络分层

http

application layer(应用层)

TCP

transport layer(传输层)

IP

internet layer(网际层)

MAC

link layer(连接层)

TCP和UDP区别

TCP

UDP

面向连接

无连接

面向字节流

面向数据报

有状态

无状态

保证可靠交付

不保证可靠交付

具备拥塞控制

不具备拥塞控制

点对点传播

广播、多播

有序

无序

TCP的三次握手和四次挥手

三次握手

1.客户端主动发送SYN

Client -> SYN -> Server

2.服务端收到并返回SYN以及ACK客户端的SYN

Server -> SYN/ACK -> Client

3.客户端收到服务端的SYN和ACK后,发送ACK的ACK给服务端,服务端收到后连接建立

Client -> ACK -> Server

四次挥手

1.客户端发送FIN给服务端

Client -> FIN -> Server

2.服务端收到后发送ACK给客户端你

Server -> ACK -> Client

3.服务端发送FIN给客户端

Server -> FIN -> Client

4.客户端收到后,发送ACK的ACK给服务端,服务端关闭,客户端等待2MSL后关闭

Client -> ACK -> Server -> CLOSEDClient -> 2MSL时间 -> CLOSED

HTTP的请求方法

  • GET 获取资源(幂等)
  • POST 新增资源
  • HEAD 获取HEAD元信息(幂等)
  • PUT 更新资源(带条件时幂等)
  • DELETE 删除资源(幂等)
  • CONNECT建立Tunnel隧道
  • OPTIONS 获取服务器支持访问资源的方法 (幂等)
  • TRACE 回显服务器收到的请求,可以定位问题(有安全风险)

HTTPS

HTTPS是在HTTP和TCP协议中间加入了SSL/TLS安全套接层。

结合非对称加密和对称加密的各自优点,配合证书。及保证了安全性,也保证了传输效率。

TLS1.2实现原理如下:

DNS

DNS(Domain Name System)是互联网中的重要基础设施,负责对域名的解析工作,为了保证高可用、高并发和分布式,他设计成了树状的层次结构。

由根DNS服务器、顶级域名DNS服务器、权威域名服务器组成

解析顺序:浏览器缓存、操作系统缓存、本地DNS缓存(/etc/hosts)逐级查找,然后从本地DNS服务器、根DNS、顶级DNS 、权威DNS层层递归查询。

CDN

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

为了突破显示生活中的光速、传输距离等物理限制,CDN投入大量资金,在全球范围内各大枢纽城市建立机房,部署大量高存储搞宽带的节点,构建跨运营商、跨地域的专用高速传输网络。

其中分为中心节点、区域节点、边缘节点等。在用户接入网络后,首先通过全局复杂均衡(Global Server Load Balance)简称GSLB算法负责调度,找到离用户最合适的节点。然后通过HTTP缓存代理技术进行缓存,缓存命中就返回给用户,否则回源站去取。CDN擅长缓存静态资源(图片、音频等),当然也支持动态内容缓存。

WebSocket

WebSocket是一种基于TCP的轻量级网络通信协议。WebSocket针对的是“请求-应答”的通信模式。

“请求-应答”是半双工的通信模式,不具备服务器推送能力,限制了HTTP在实时通信领域的发展。虽然可以用轮询来不停的向服务器发送HTTP请求,但是,反复的无效请求占用了大量的带宽和CPU资源。So,WebSocket应运而生。

WebSocket是一种双全工通信协议,具备服务端主动推动的功能。本质上是TCP做了一层包装,让他可以运行在浏览器环境中。

webpack的热更新就是利用了这个协议。

HTTP缓存策略

强缓存

协商缓存

expires(过期时间)

max-age(缓存时间)

last-modified(上次更改时间)

Etag(标识,需要预先在服务端的响应报文设置)

HTTP状态码

1XX 请求已经接收到,需要进一步处理才能完成,HTTP/1.0不支持

  • 100 Continue :上传文件前使用
  • 101 Switch Protocol :协议升级使用
  • 102 Processing :服务器正在处理,无响应可用

2XX 请求成功

  • 200 OK :成功返回响应
  • 201 Created :有新资源在服务端被成功创建
  • 202 Accepted :服务器接受并开始处理请求,但请求未处理完成
  • 206 Partial Content : 使用range协议时返回部分响应内容时的响应码

3XX 重定向

  • 301: 永久重定向、
  • 302:临时重定向
  • 300:是一个特殊的重定向状态码,会返回一个有多个链接选项的页面,由用户自行选择
  • 选择304:是一个特殊的重定向状态码,服务端验证过期缓存有效后,要求客户端使用该缓存

4XX 客户端发现错误

  • 400 Bad Request
  • 401 Unauthorized
  • 402 Payment Required
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowed

5XX 服务器端出现错误

  • 500 Internal Server Error:服务器内部错误,且不属于以下错误类型
  • 502 Bad Gateway:代理服务器无法获取到合法响应
  • 503 Service Unavailable:服务器资源尚未准备好处理当前请求
  • 505 HTTP Version Not Supported:请求使用的 HTTP 协议版本不支持

参考

https://httpstatuses.com/

https://mp.weixin.qq.com/s/Qhn4qhGYHybfSy22wJZGmQ

本文分享自微信公众号 - 女程序员的日常(gh_df41d619fb70),作者:凛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 浏览器缓存机制

    Service Worker是运行在浏览器背后的独立线程,一般可以用于实现缓存。使用service worker,传输协议必须为HTTPS。因为service ...

    用户3258338
  • 为什么我写动画那么卡?

    当使用width、height、margin、padding作为transition的值时,会造成浏览器主线程的工作量较重。比如left:20px渲染到left...

    用户3258338
  • 温故知新-Event Loop (2)

    *注意:这种执行环境是浏览器环境、或者node 11版本及以上都是以上输出结果,node 11开始将event loop 的循环机制与js的保持一致了,所以要注...

    用户3258338
  • PHP 面向对象 trait

    通过 trait 可以实现多继承。 trait A { public function fun1() { echo __FUNC...

    康怀帅
  • php Trait 基础应用讲解

    首先,上手册:自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。

    公众号 碧油鸡
  • 云计算成本管理的6个技巧

    为了避免每月云计算支出超出组织的预期,组织可以使用容器,容量预购和更多的云成本管理策略来控制失控的云支出。 在云中运营组织的业务与在本地部署数据中心运行相比是...

    静一
  • 【算法——Python实现】最大堆和最小

    py3study
  • 烧写FPGA程序配置

    外部控制下载FPGA配置模式,通常称为从模式,有串行和并行两种模式。在从模式中,控制程序下载可以是一个处理器,MCU,DSP处理器或者测试镜像。从模式的程序可以...

    瓜大三哥
  • 大数据时代的数据保护与数据开放┃腾讯研究院公开课

      坤源衡泰·中国民法成长论坛第三十讲   ...

    腾讯研究院
  • PHP神奇又有用的Trait

    php和java,c++一样都是单继承模式。但是像python,是支持多继承(即Mixin模式)。那么如何在php中实现多继承模式?这就需要使用trait。

    写PHP的老王

扫码关注云+社区

领取腾讯云代金券