一、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、前包纠错功能

深入HTTP协议的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. SETTLE约束算法的批量化处理

    技术背景 在上一篇文章中,我们介绍了在分子动力学模拟中SETTLE约束算法的实现与应用,其中更多的是针对于单个的水分子.但由于相关代码是通过jax这一框架来实现的,因此对于多分子的体系,可以采用jax ...

  2. zabbix--客户端部署(新手入门)

    zabbix--客户端部署 机器环境部署:我准备的一台zabbix客户端#可以准备多台 ip: 安装软件包 [root@server1 ~]# rpm -Uvh https://repo.zabbix ...

  3. PEP小学五年级英语下册 mp3 音频和电子书

    链接:https://pan.baidu.com/s/1O805uHU-lsMKog3WLtjRkA 提取码:o8rg 链接:https://pan.baidu.com/s/1Oa4wcM5min83 ...

  4. 一些Docker 操作集合

    基本 显示所有容器(包括已停止): docker container ls -a 删除所有容器: docker stop $(docker ps -q) docker rm $(docker ps - ...

  5. 关于BFS

    嗨,又是躺平的一天呢 下文有很多未经版权允许而私自转载,不喜勿喷 今天我来整理亿下关于 BFS 这个"高级"的东西: 首先,我不得不提亿句 关于队列 是个啥 队列(queue)是一 ...

  6. mybatis的几种like查询

    oracle数据库: Java代码 SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 Java代码 SELECT * FROM ...

  7. &取地址运算符

    &可以取得一个变量在内存当中的地址 Register int a; //这种变量不在内存里面,而在CPU里面,是没有地址的, 所以寄存器变量(register)不能用&来取得变量 在计 ...

  8. TetBrains产品快捷键大全

     快捷键大全

  9. Docker容器入门实践

    Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 ...

  10. Windows 8下完美使用Virtual PC 2007(virtual pc 2007 64 win8 兼容性)

    Windows 8下完美使用Virtual PC 2007(virtual pc 2007 64 win8 兼容性) 一.从微软的官方网站下载Virtual PC 2007 SP1英文版,文件名为se ...