一、五层协议
1. OSI(Open System Interconnection 开放式系统互联)七层协议
1)应用层 2)表示层 3)会话层 4)传输层 5)网络层 6)数据链接层 7)物理层
2. TCP/IP四层网络协议 (Transmission Control Protocol 传输控制协议)
1)应用层 2)运输层 3)网络层 4)网络接口层
3. 折中后的五层协议
1)应用层(dns,http) DNS解析成IP并发送http请求
2)传输层(tcp,udp) 建立tcp连接(三次握手)
3)网络层(IP,ARP) IP寻址
4)数据链路层(PPP) 封装成帧
5)物理层(利用物理介质传输比特流) 物理传输(然后传输的时候通过双绞线,电磁波等各种介质)
简括:
从应用层的发送http请求,到传输层通过三次握手建立tcp/ip连接,再到网络层的ip寻址,再到数据链路层的封装成帧,最后到物理层的利用物理介质传输。

二、HTTP状态码
1XX 用于指定客户端相应的某些动作
2XX 用于表示成功
3XX 用于已经移动的文件并且被包含在定位头信息中指定心的地址信息(重定向,为了完成请求,必须进一步执行的动作)
4XX 用于指出客户端错误
5XX 用于支持服务器错误

100 继续;101 分组交换协议
200 ok;201 被创建;202 被采纳;203 非授权信息;204 无内容;205 重置内容;206 部分内容;
300 多选项;301 永久地传递;302 找到;303 参见其他;304 未改动;305 使用代理;307 暂时重定向;
400 错误请求(可能是get请求写成post请求);401 未授权;402 要求付费;403 禁止;405 不允许的方法;406 不被采纳;407 要求代码授权;
408 请求超时;409 冲突;410 过期的;411 要求的长度;412 前提不成立;413 请求实例太大;
414 请求url太大;415 不支持的媒体类型;416 无法满足的请求范围;417 失败的预期;
500 内部服务器错误;501 未被使用;502 网关错误;503 不可用的服务;504 网关超时;505 HTTP版本未被支持;

三、http 1.1 与 http 1.0 的区别
1. http 1.0 对于每个连接都得建立一次连接, 一次只能传送一个请求和响应, 请求就会关闭, http1.0 没有 Host 字段,而 http1.1 在同一个连接中可以传送多个请求和响应, 多个请求可以重叠和同时进行, http1.1 必须有 host 字段
2. http1.1 中引入了 ETag 头, 它的值 entity tag 可以用来唯一的描述一个资源. 请求消息中可以使用 If-None-Match 头域来匹配资源的 entitytag 是否有变化
3. http1.1 新增了 Cache-Control 头域(消息请求和响应请求都可以使用), 它支持一个可扩展的指令子集
4.http1.0 中只定义了 16 个状态响应码, 对错误或警告的提示不够具体. http1.1 引入了一个 Warning 头域, 增加对错误或警告信息的描述. 且新增了 24 个状态响应码

四、TCP三次握手和四次挥手
1. 三次握手:
首先 Client 端发送连接请求报文,Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。
2. 四次挥手:
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

五、HTTP与HTTPS的区别
1. Http 协议运行在 TCP 之上,明文传输,客户端与服务器端都无法验证对方的身份;Https 是身披 SSL(Secure Socket Layer)外壳的 Http,运行于 SSL 上,SSL 运行于 TCP 之上,是添加了加密和认证机制的 HTTP。二者之间存在如下不同:
2. 端口不同:Http 与 Http 使用不同的连接方式,用的端口也不一样,前者是 80,后者是 443;
3. 资源消耗:和 HTTP 通信相比,Https 通信会由于加减密处理消耗更多的 CPU 和内存资源;
4. 开销:Https 通信需要证书,而证书一般需要向认证机构购买;
6. Https 的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

六、HTTP的几种请求方法的用途
1. GET 方法:发送一个请求来取得服务器上的某一资源
2. POST 方法:向 URL 指定的资源提交数据或附加新的数据
3. PUT 方法:跟 POST 方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT 指定了资源在服务器上的位置,而 POST 没有
4. HEAD 方法:只请求页面的首部
5. DELETE 方法:删除服务器上的某资源
6. OPTIONS 方法:它用于获取当前 URL 所支持的方法。如果请求成功,会有一个 Allow 的头包含类似“GET,POST”这样的信息
7. TRACE 方法:TRACE 方法被用于激发一个远程的,应用层的请求消息回路
8.CONNECT 方法:把请求连接转换到透明的 TCP/IP 通道

七、Socket 连接与 HTTP 连接的联系与区别
1. 由于通常情况下 Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
2. 而 HTTP 连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
3. 很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是 Socket 连接,服务器就可以直接将数据传送给客户端;若双方建立的是 HTTP 连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

八、http(tcp) 报文结构
例如一个 100kb 的 HTML 文档需要传送到另外一台计算机,并不会整个文档直接传送过去,可能会切割成几个部分,比如四个分别为 25kb 的数据段。而每个数据段再加上一个 TCP 首部,就组成了 TCP 报文。 TCP 报文 (Segment),包括首部和数据部分。

九、http 报文大小限制
如前所述,一个 HTTP 报文包含起始行,头域和消息体,HTTP 协议本身并没有对报文中任一部分的长度做限制,也就是说,理论上一个请求 URI 可以无限长,头域可以无限多,请求体可以无限大。但在实际场景下,请求 URI 的长度会受到浏览器的限制,如果在浏览器中输入过长的 URL,那么浏览器会自动进行截断。而服务器出于安全性和效率的考虑,也会对头域和消息体的大小作出一定的限制。

十、HTTP 的缓存机制
Http 的缓存主要利用 header 里的两个字段来控制,通过 Cache-control 和 Etag 的配合来实现 Http 的缓存机制。
1. Cache-control主要包含以及几个字段:
private:则只有客户端可以缓存
public:客户端和代理服务器都可以缓存
max-age:缓存的过期时间
no-cache:需要使用对比缓存来验证缓存数据
no-store:所有内存都不会进行缓存
2. ETag:即用来进行对比缓存,Etag 是服务端资源的一个标识码
当客户端发送第一次请求时服务端会下发当前请求资源的标识码 Etag,下次再请求时,客户端则会通过 header 里的 If-None-Match 将这个标识码 Etag 带上,服务端将客户端传来的 Etag 与最新的资源 Etag 做对比,如果一样,则表示资源没有更新,返回 304。

十一、如何理解 HTTP 协议是无状态的
HTTP 协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP 是一个无状态的面向连接的协议,无状态不代表 HTTP 不能保持 TCP 连接,更不能代表 HTTP 使用的是 UDP 协议(无连接)。

十二、HTTP 长连接、短连接
在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如 JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。
而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。

十三、cookie
Cookie 就是用来在本地缓存记住一些状态的,一个 Cookie 一般都包含 domin(所属域)、path、Expires(过期时间)等几个属性。服务端可以通过在响应头里的 set-cookies 来将状态写入客户端的 Cookie 里。下次客户端发起请求时可以带上cookie。

参考:
1. https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651555258&idx=1&sn=7db72c92735bb4cbe7a769eb1f10cee7
2. https://segmentfault.com/a/1190000013662126#articleHeader13

前端需要了解的http知识的更多相关文章

  1. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  2. 前端学习:JS面向对象知识学习(图解)

    前端学习:JS面向对象知识学习(图解) 前端学习:JS(面向对象)代码笔记 JS面向对象图解知识全览 创建类和对象 方式1:使用Object()函数 方式2:使用自变量 方式3:使用工厂函数 创建多个 ...

  3. 前端开发者必备的Nginx知识

    摘要: 最常用的Web服务器 -- Nginx 原文:前端开发者必备的Nginx知识 作者:ConardLi Fundebug经授权转载,版权归原作者所有. Nginx在应用程序中的作用 解决跨域 请 ...

  4. Web前端工程师成长之路——知识汇总

    一.何为Web前端工程师?          前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript ...

  5. 小白到web前端工程师需要学习哪些知识?

    随着web3.0时代,那么web前端开发技术人才越来越吃香,而且web前端领域划分越来越细,对技术的需求越来越高,想学习web前端的人也是越来越多.那么,如何学习web前端知识?从哪开始?转型成为we ...

  6. 前端项目中常用es6知识总结 -- let、const及数据类型延伸

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const  2 ...

  7. 【前端】之JavaScript基础知识

    JS 基础知识 JS中,简单类型的数据存储在栈中,复杂类型的数据存储在堆中,其引用存储在栈中 JS中的深拷贝和浅拷贝: 浅拷贝:将对象中的所有简单类型的属性拷贝出来,引用类型属性直接赋值null 深拷 ...

  8. 前端需要掌握的Babel知识

    Babel 是怎么工作的 Babel 是一个 JavaScript 编译器. 做与不做 注意很重要的一点就是,Babel 只是转译新标准引入的语法,比如: 箭头函数 let / const 解构 哪些 ...

  9. 前端必会的js知识总结整理

    1.晨曦. 2.js是一门什么样的语言及特点?         js是一种基于对象和事件驱动的并具有相对安全性的客户端脚本语言.也是一种广泛用于web客户端开发的脚本语言,常用来给html网页添加动态 ...

  10. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

随机推荐

  1. WordPress升级出现Briefly unavailable for scheduled maintenance. Check back in a minute.

    WordPress升级出现Briefly unavailable for scheduled maintenance. Check back in a minute.   打开博客时提示: Brief ...

  2. PHP Framework

    PHP Framework is built for PHP developers who need elegant toolkit to create full-featured web appli ...

  3. Machine Learning No.7: Support Vector Machines

    1. SVM hypothsis 2. large margin classification 3. kernals and similarity if  f1 = 1; if x if far fr ...

  4. HTML5模拟衣服撕扯效果

    在线演示 本地下载

  5. importlib模块 反射字符串的对象

    通过 importlib模块 反射字符串的对象 Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] on linux ...

  6. 架构设计:系统间通信(34)——被神化的ESB(上)

    1.概述 从本篇文章开始,我们将花一到两篇的篇幅介绍ESB(企业服务总线)技术的基本概念,为读者们理清多个和ESB技术有关名词.我们还将在其中为读者阐述什么情况下应该使用ESB技术.接下来,为了加深读 ...

  7. 安装.NET Core 3.0预览版后VS项目目标框架中不显示的解决方法

    下载了微软在GitHub上的cSharpSamples项目后发现其中一些项目使用框架为.NET Core3.0,就下载了.NET Core3.0,但发现项目依然不可用,编译时提示如下 当前 .net ...

  8. Css公共文件结构

    一般一个网站会有这么三个样式: global.css | reset.css(格式化样式) common.css(公共组件样式) layout.css(当前页面样式) 清除全站所有页面的浏览器默认样式 ...

  9. String类中的equals是如何重写的

    我们知道String中的equals方法是被重写过的,因为object的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值. 首先几个知识点: 基本数据类型==比 ...

  10. hdu1520树形dp入门

    题目链接 题意:要开派对,邀请了上司就不能邀请他的下属,邀请了下属就不能邀请他的上司,每个人有一个值,求邀请的人的总值最大 第一行给出一个数n,代表有n个人. 下面n行分别给出n个人的的值 再下面n行 ...