一、HTTP定义

超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

HTTP是一个属于应用层的面向对象协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出。

HTTP协议是构建再TCP/IP协议之上的,是TCP/IP协议的一个子集。

二、TCP/IP协议

TCP/IP协议族是由一个四层协议组成的系统,这四层分别是:应用层、传输层、网络层、数据链路层

应用层:一般是我们编写的应用程序,决定了向用户提供的应用服务。应用层可以通过系统调用与传输层进行通信。

如FTP、DNS、HTTP等。

传输层:通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能。

传输层由两个性质不同的协议:TCP和UDP。TCP面向连接,UDP无连接。

网络层:用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。

网络层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方。

链路层:用来处理连接网络硬件部分,包括控制操作系统、硬件设备驱动、NIC网络适配器以及光纤等物理可见部分。硬件范畴均在链路层作用范围。

三、数据包封装过程

四、HTTP数据传输过程

发送端发送数据,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。

接收端接受数据,数据会从下层传输到上层,传输前会把下层头部信息删除。

五、传输层TCP三次握手

使用TCP协议进行通信的双方必须先建立连接,然后才能开始传输数据。为了确保连接双方可靠性,在建立连接时,TCP协议采用了三次握手策略。

三次握手主要是为了判断客户端和服务端的收发能力都是正常。

第一次握手服务端能判断客户端发送能力正常

第二次握手客户端能判断服务端接收能力正常和自己发送能力正常

第三次握手服务端能判断服务端发送能力正常

TCP连接全过程:

六、HTTP协议特点

1、支持客户/服务器模式,必须是客户端发起的请求

2、简单快速,发送请求时只需传送请求方法和路径

3、灵活,允许传输任意类型的数据对象,正在传输的类型由Content-Type来标记

4、无连接,限制每次连接只处理一个请求

5、无状态,对于事务处理没有记忆能力

七、URI与URL

URI:一个紧凑的字符串用来标示抽象或物理资源

URI可以进一步被分为定位符、名字或两者都是

术语“Uniform Resource Locator”(URL)是URI的子集,除了确定一个资源,还提供一种定位该资源的主要访问机制(如网络“位置”)

URI可以分为URL,URN或同时具备locators和names特性的一个东西

URN作用就好像一个人的名字,URL就像一个人的地址

URN确定了东西的身份,URL提供了找到它的方式

八、HTTP报文结构

请求报文:

HTTP的报文头可分四类:

1、通用报文头

2、请求报文头

3、响应报文头

4、实体报文头

HTTP1.1中一共定义了47种报文头

响应报文:

九、HTTP请求方法

1、GET

2、POST

3、PUT,PUT和POST的区别,PUT是幂等,而POST是不幂等。

4、HEAD,类似于GET请求,只不过返回的响应中没有具体内容,用于获取报文头。

5、DELETE

6、OPTIONS,用来查询针对请求URI指定的资源支持的方法。

7、TRACE,回显服务器收到的请求,主要用于测试或诊断,容易引发XST的攻击。

8、CONNECT,开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道。一般代理服务会使用。

十、状态码

1XX:表示消息,代表请求已被接受。

2XX:表示成功。

2XX常见状态码:

3XX:表示重定向。

3XX常见状态码

4XX:表示请求错误,一般是客户端发生错误。

4XX常见状态码

5XX:表示服务端错误。

5XX常见状态码

十一、HTTP状态管理

Cookies 与 Session

Cookies工作原理

Session工作原理

Cookies与Session的不同

1、存放位置

2、安全性(隐私策略)

3、有效期

4、对服务器压力

十二、HTTP协议身份认证

1、BASIC认证(基本认证)

2、DIGEST认证(摘要认证)

3、SSL客户端认证

4、FormBase认证(基于表单认证)

十三、HTTP的长连接和短连接

长连接和短连接本质是TCP长连接和短连接。

十四、代理

代理作用:抓包、FQ、匿名访问、过滤器。

代理是相同协议的转发。

十五、网关

网关可以作为某种翻译器使用,它抽象了一种能够到达资源的方。网关是资源和应用程序之间的粘合剂。

网关是不同协议的转发。

十六、HTTP缓存

1、Cache-Control:请求/响应头,缓存控制字段

no-store:所有内容都不缓存

no-cache:缓存,但是浏览器使用缓存前,都会请求服务器判断缓存资源是否是最新

max-age=x(单位秒)请求缓存后的X秒不再发起请求

s-maxage=x(单位秒)代理服务器请求源站缓存后的X秒不再发起请求,只对CDN缓存有效

public:客户端和代理服务器(CDN)都可缓存

private:只有客户端可以缓存

2、Expires:响应头,代表资源过期时间,由服务器返回提供,是http1.0的属性,在与max-age共存的情况下,优先级要低

3、Last-Modified,响应头,资源最新修改时间,由服务器告诉浏览器。

if-Modified-Since,请求头,资源最新修改时间,由浏览器告诉服务器,和Last-Modified是一对,两个进行比对。

4、Etag,响应头,资源标识,由服务器告诉浏览器。

if-None-Match,请求头,缓存资源标识,由浏览器告诉服务器(其实是上次服务器给的Etag),和Etag是一对,两个进行比对。

用户操作对缓存的影响:

十七、HTTP内容协商机制

指客户端和服务端就响应内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。

内容协商方式:

1、客户端驱动,几乎不用,因为需要两次请求才能进行正式内容的发送

2、服务器驱动,服务器检查客户端的请求头部集决定提供哪个版本的页面

请求头部集:

  (1)Accept:告知服务器发送何种媒体类型

  (2)Accept-Language:告知服务器发送何种语言

  (3)Accept-Charset:告知服务器发送何种字符集

  (4)Accept-Encoding:告知服务器采用何种编码

响应头部集:

  (1)Content-Type

  (2)Content-Language

  (3)Content-Type

  (4)Content-Encoding

3、透明协商,中间设备协商,不常用可能是未来趋势

服务器驱动内容协商的近似匹配

如:Accept-Language:en;q=0.5,fr;q=0.0,nl;q=1.0,tr;q=0.0

q1.0的优先级最高

十八、HTTP断点续传和多线程下载

断点续传实现方式:

HTTP是通过在Header里两个参数实现,客户端发请求时对应的时Range,服务端响应时对应的是Content-Range。

  Range:用户请求头中,指定第一个字节位置和最后一个字节位置,

      一般格式:Range:(unit=first byte pos)-(last byte pos)

  Content-Range:用于响应头中,在发出带Range的请求后,服务器在Content-Range头部返回当前接受的范围和文件总大小,

          一般格式:Content-Range:bytes(unit first byte pos)-[last byte pos]/[entity length]

使用断点续传的状态码是206 Partial Content

多线程下载就是利用断点续传进行主动的拆包下载。

十九、HTTPS

内容加密:非对称密钥交换、对称内容加密

身份认证:数字证书

二十、HTTP协议的瓶颈

一条连接上只能发送一次请i去

请求只能从客户端开始。客户端不可以接受除响应以外的指令

请求\响应头部不经压缩就发送

每次相互发送相同的头部造成的浪费

非强制压缩发送

二十一、WebSocket

二十二、HTTP2.0

优势点:

1、性能增强核心:二进制分帧

2、首部压缩

3、多路复用

4、并行双向字节流的请求和响应,即可以无序传输

5、服务器推送

仍存问题

1、队头阻塞

2、建立连接的握手延迟大

二十三、HTTP3.0

基于谷歌提出的QUIC协议进行的改造。

优势:

1、0 RTT

2、没有队头阻塞的多路复用

3、前包纠错功能

最新文章

  1. django rest framework 再撸体验
  2. 我的ef连接mysql之旅
  3. Hadoop2配置详解
  4. Android功能模块化之生成验证码Bitmap
  5. Selection sort
  6. 1509 -- Glass Beads POJ
  7. 多年的.NET开发,也只学会了这么几招
  8. 解决windows下eclipse中android项目关联android library project
  9. Ubuntu12.04 Jdk1.7 Tomct7.0部署配置
  10. VS2008 Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成后事件..."解决方案
  11. HOJ2275 Number sequence
  12. 私有云Mariadb集群搭建
  13. Java经典编程题50道之四十九
  14. linux shell 备注(一)
  15. ASP.NET没有魔法——目录(完结)
  16. 记一次Springboot启动异常
  17. Virtualbox的centos7 nat和桥接网络配置
  18. Windows server 2008 R2 多用户远程桌面
  19. 3.STM32F4按键扫描函数
  20. 冒泡排序(Python实现)

热门文章

  1. 实战:Spring AOP实现多数据源动态切换
  2. Docker 部署xxl-job 报错:xxl-rpc remoting error(connect timed out), for url : xxxxxx
  3. tensorflow源码解析之framework-device
  4. 全量、增量数据在HBase迁移的多种技巧实践
  5. python之pyc
  6. matlab语法基础(处理一点数据)
  7. spring——使用注解开发
  8. [apue] linux 文件系统那些事儿
  9. 先知xss挑战赛学习笔记
  10. 简单了解一下pinia的结构