http

什么是http?

http是一种超文本传输协议。


什么是Http协议无状态协议?怎么解决Http协议无状态?

http协议自身不对请求和响应之间的通信状态进行保存。
无状态协议解决办法: 通过1.Cookie 2.通过Session会话保存


TCP/IP协议分为哪几层?每层的作用是什么?

四层:应用层,传输层,网络层和数据链路层

  • 应用层:决定了向用户提供应用服务时通信的活动。比如FTP,DNS
  • 传输层:两台计算机之间的数据传输。比如TCP,UDP
  • 网络层:处理在网络i上流动的数据包。
  • 数据链路层:用来处理连接网络的硬件部分。包括控制操作系统,硬件的设备驱动,NIC光纤等物理可见部分。

TCP/IP通信传输流

利用TCP/IP协议族进行网络通信时,会通过分层与对方进行通信。发送端从应用层往下走,接收端则从数据链路层往上走。
例如用http举例:

  • 应用层:客户端在应用层发出一个http请求
  • 传输层:TCP协议把从应用层接收到的数据(http报文)进行分割,并在各个报文上标记序号及端口号发送给网络层
  • 网络层:增加作为通信目的地的mac地址后转发给数据链路层。
  • 数据链路层:接收到数据,按照顺序向上层发送,一直到应用层。当传输到应用层,才算真正的接收到客户端的http请求。
发送端在层与层之间传输数据时,每经过一层必定会被打上一个属于该层所属的头部信息。反之,接收端在每经过一层时,就会把相应的首部去掉。

http三次握手?四次挥手?

  • 三次握手:
    为了确保将数据准确无误的送到目标处
    三次握手指的是建立一次tcp连接需要发送三个数据包


1.客户端发送SYN=1(表示请求连接),并发送一个seq(随机码)
2.服务器由于收到SYN=1,知道是请求连接,返回一个ACK=1(表示确认),并同返回一个请求连接SYN=1,然后返回一个ack=seq+1(客户端随机码应答),且自己也返回一个seq(随机码)
3.客户端收到服务器的ack后验证,向服务器确认包发送ack=seq+1(服务器随机码应答)
4.服务器确认ack后建立连接,完成三次握手

  • 四次挥手:



    断开tcp连接可以是客户端发起,也可以是服务端发起。
    1.客户端发送FIN=1(表示结束),并发送随机码seq=u
    2.服务器端返回一个ACK=1(表示确认),并返回ack=u + 1,且也发生一个随机码seq=v
    3.服务器再发出一个一个FIN=1,和seq=w,且重复发送上次内容
    4.客户端返回一个ACK=1,然后返回随机码等于上次随机码加一seq=u+1,再返回ack=w+1
    5.服务器端收到后结束连接,客户端也结束连接

  • 为什么非要四次握手?
    因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

  • 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
    虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。


什么是DNS?

提供域名到IP地址的解析服务。可以通过域名查找IP地址,也可以通过IP地址查找域名。


浏览器解析一个url的过程

1.整体流程:



2.dns解析



3..三次握手过程
4.发起Http请求

5.响应Http请求并得到HTML代码
6.浏览器解析HTML代码
7.浏览器对页面进行渲染呈现给用户


URI和URL的区别

  1. URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。URL是一种URI。
  2. 格式不同:URL的格式一般由下列三部分组成:第一部分是协议(或称为服务方式);第二部分是存有该资源的主机IP地址(有时也包括端口号);第三部分是主机资源的具体地址。URI一般由三部分组成:访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示,着重强调资源。

http请求方法

  • GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
  • PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
  • HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件
  • OPTIONS:查询响应URI支持的HTTP方法

get和post请求的区别

  • get侧重于从服务器获取数据,post侧重于向服务器发送数据
  • get的参数放在url后面,post放在body中
  • get受url长度限制,传输量小,效率低,post可以传输大量数据
  • get对于浏览器回退是无害的,post回退会重新请求
  • get请求可被缓存,可被保留在浏览器历史记录中,可以被收藏为书签。post请求不可被缓存,不可被保留在浏览器历史记录中,不可以被收藏为书签
  • get 请求参数只允许使用ASCII字符,post请求无限制。
  • post比get更加安全
    可以参考http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

Http协议由什么组成?

  • 请求报文包括三部分:
    (1).请求行:包含请求方法,URI,HTTP版本协议
    (2).请求首部字段
    (3).请求内容实体

  • 响应报文包含三部分:
    (1).状态行:包含HTTP版本,状态码,状态码原因短语
    (2).响应首部字段
    (3).响应内容实体


http协议中,http1.0和http1.1的区别

  • 持久连接
  • 管线化
  • 断点续传:实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输
    在http1.0中,当建立连接后,客户端发送一个请求,服务器端返回一个信息后就关闭连接,当浏览器下次请求的 时候又要建立连接,显然这种不断建立连接的方式,会造成很多问题。

内容编码的作用?有哪几种内容编码的方式?

编码提升传输速率,但是由于编码的操作需要计算机进行,所以会消耗更多的CPU。
内容编码方式:
gzip,compress,deflate,identity


内容协商?

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

  • 服务器驱动协商
  • 客户端驱动协商
  • 透明协商

9.常见的Http协议状态码

200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙


与http协作的web服务器

1.用单台虚拟机实现多个域名的注意事项?
域名通过DNS服务映射到IP地址。在相同的IP地址下,由于虚拟主机可以寄存多种不同主机名和域名的web网站,因此在发送http请求时,必须在首部Host内完整指定主机名或者域名的URI。
2.通信数据转发程序有哪些?
http通信时,除客户端和服务端以外,还有一些用于通信转发数据的程序:代理、网关、隧道。

  • 代理: 具有转发功能的应用程序。位于客户端和服务器端的中间人角色,接收客户端发送的请求转发给服务器,也接收服务器端的响应并转发给客户端。
  • 网关:转发其他服务器通信数据的服务器。接收到从客户端发送来的请求时,他就像自己拥有资源的原服务器一样对请求进行处理。有时客户端可能都不会察觉自己的通信目标是网关。
  • 隧道:在相隔甚远的客户端和服务器端中间进行中转,并保持双方通信连接的应用程序。

代理:

  • 缓存代理:
    代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上。
    当代理再次接收到同样的请求时,就可以不从原服务器获取资源,而是将之前缓存的资源作为响应返回
  • 透明代理:
    转发请求或者响应时,不对报文做任何加工的代理类型被称为透明代理。反之对报文进行加工的称为非透明代理。

网关:
网关能使通信道路上的服务器提供非http协议服务。
利用网关能提高通信的安全性。因为可以在客户端和网关之间的通信道路上加密以确保连接的安全。

隧道:
隧道的目的是确保客户端和服务器之间通信的安全。

保存资源的缓存:

缓存是指代理服务器或者客户端本地磁盘内保存的资源副本。利用缓存可以减少对服务器的访问,节省了通信流量和通信时间。
缓存服务器的优势在于可避免多次从源服务器转发资源。
客户端的缓存存放在客户端浏览器中,以IE为例,把客户端缓存成为临时网络文件。


10.Http协议首部字段

1、通用首部字段(请求报文与响应报文都会使用的首部字段)


  1. 请求首部字段
    首部字段名 说明
    Accept 用户代理可处理的媒体类型
    Accept-Charset 优先的字符集
    Accept-Encoding 优先的内容编码
    Accept-Language 优先的语言(自然语言)
    Authorization Web认证信息
    Expect 期待服务器的特定行为
    From 用户的电子邮箱地址
    Host 请求资源所在服务器
    If-Match 比较实体标记(ETag)
    If-Modified-Since 比较资源的更新时间
    If-None-Match 比较实体标记(与 If-Match 相反)
    If-Range 资源未更新时发送实体 Byte 的范围请求
    If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
    Max-Forwards 最大传输逐跳数
    Proxy-Authorization 代理服务器要求客户端的认证信息
    Range 实体的字节范围请求
    Referer 对请求中 URI 的原始获取方
    TE 传输编码的优先级
    User-Agent HTTP 客户端程序的信息

3.响应首部字段
首部字段名 说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP 服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息

4.实体首部字段
首部字段名 说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间


cache-control的值

缓存请求指令

  • no-cache 不缓存过期的资源,强制向服务器再次验证。
  • no-store 不缓存请求或者响应的任何内容
  • max-age=[秒] 响应的最大age值
  • max-stale=[秒]
  • min-fresh
  • no-transform
  • only-if-cached
  • cache-extension

缓存响应指令

  • public
  • private
  • no-cache
  • no-store
  • no-transform
  • must-revalidate
  • proxy-revalidate
  • max-age
  • s-max-age 公共缓存服务器响应的最大age值
  • cache-extension

Http与Https优缺点?

(1).通信使用明文不加密,内容可能被窃听,也就是被抓包分析
(2).不验证通信方身份,可能遭到伪装
(3).无法验证报文完整性,可能被篡改
Https就是Http加上加密处理(一般是SSL安全通信线路)+认证+完整性保护


Http与Https的区别:

  • HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
  • HTTP 是不安全的,而 HTTPS 是安全的
  • HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
  • 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
  • HTTP 无法加密,而HTTPS 对传输的数据进行加密
  • HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

Http优化

  • 利用负载均衡优化和加速HTTP应用
  • 利用HTTP Cache来优化网站
  • TCP复用:TCP连接复用是将多个客户端的HTTP请求复用到一个服务器端TCP连接上,而HTTP复用则是一个客户端的多个HTTP请求通过一个TCP连接进行处理。前者是负载均衡设备的独特功能;而后者是HTTP 1.1协议所支持的新功能,目前被大多数浏览器所支持。
  • 内容缓存:将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获取相应的数据了。
  • 压缩:将文本数据进行压缩,减少带宽
  • SSL加速(SSL Acceleration):使用SSL协议对HTTP协议进行加密,在通道内加密并加速
    +TCP缓冲:通过采用TCP缓冲技术,可以提高服务器端响应时间和处理效率,减少由于通信链路问题给服务器造成的连接负担。

详情参考:


Http协议有哪些特征?

1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态;

Cookie是否会被覆盖,localStorage是否会被覆盖

Cookie是可以覆盖的,如果重复写入同名的Cookie,那么将会覆盖之前的Cookie
如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。

localStorage存储在一个对象中. 有键值对
什么是localStorage,在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

localStorage的优势
1、localStorage拓展了cookie的4K限制
2、localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数据库,相比于cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的
localStorage的局限
1、浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性
2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
3、localStorage在浏览器的隐私模式下面是不可读取的
4、localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
5、localStorage不能被爬虫抓取到
localStorage与sessionStorage的唯一一点区别就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,sessionStorage中的
键值对会被清空


HTTPS的工作原理

  1. 首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;
  2. 客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);
  3. 消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;
  4. 发送给服务端,此时只有服务端(RSA私钥)能解密。
  5. 解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。


    https.png

access-control-allow设置为*的影响

不能携带cookie


Cookie和localStorage、sessionStorage的区别

Cookie
1、因为HTTP请求 无状态,所以需要cookie去维持客户端状态
2、过期时间 expire
3、cookie的生成方式
①、http response header 中的set-cookie
②、js中可以通过documentdocument.cookie可以读写cookie
4、仅仅作为浏览器存储(大小4kb左右,能力被localStorage替代)
5、cookie中的相关域名下面—— cdn 的流量损耗
6、httponly

localStorage
1、HTML5设计出来专门用于浏览器存储的
2、大小为5M左右
3、仅为客户端使用,不和服务器进行通信
4、接口封装好
5、浏览器本地缓存方案
6、永久有效

sessionStorage
1、会话级别的浏览器存储
2、大小为5M左右
3、仅在客户端使用,不和服务端进行通信
4、接口封装较好
5、对于表单信息的维护
6、关闭会话窗口失效

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容