http

  • 1.简介

http是能够获取html、js、css、图片等资源的通讯协议,是web和服务器进行数据交换的基础;

http是一个client-server协议,请求通过一个实体发出,实体也就是用户代理,多数情况下,用户代理只浏览器;

在浏览器和服务器之间有许多设备,转发了http消息,表现在应用层的,称为代理,代理主要有以下几个作用:缓存(比如浏览器缓存)、过滤、负载均衡(让多个服务器服务不同的请求)、认证(对不同的资源进行权限管理)、日志记录(允许储存历史信息)。

http是无状态的,同一次连接中的两个执行成功的请求之间是没有联系的,使用http头部扩展,http cookie就可以解决这个问题,http将cookie添加到头部,创建一个会话让每次请求,都能共享相同的上下文,达成相同的状态。

客户端与服务器端进行交互前,必须在两者之间建立一个tcp链接,http在演变中1.0版本短连接,1.1长连接,2.0 流水线连接

  • 2.http可以控制什么

缓存:文档缓存可以通过http控制,服务器端能告诉代理和客户端,哪些文档可以缓存,缓存多久。

开放同源策略:浏览器同源策略,http可以修改头部信息来开放限制。

认证:一些页面,仅让指定用户进行访问。

代理:通常情况下,服务器和/或客户端是处于内网的,对外网隐藏真实 IP 地址。因此 HTTP 请求就要通过代理越过这个网络屏障。但并非所有的代理都是 HTTP 代理。例如,SOCKS协议的代理就运作在更底层,一些像 FTP 这样的协议也能够被它们处理。

会话:通过cookie

  • 3.http流

打卡一个tcp连接(打开一个新的连接,或者重用一个之前的连接)--->发送http报文--->收到服务器端报文--->关闭连接或给下一次连接重用

  • 4.基于http的api:

xmlHttpRequest、Fetch、用于user agent 和服务器端数据交互,

EventSource用于服务器端向客户端传输事件

  • 5.http报文结构,首部,请求方法,上送字段意思,状态码分类

报文分为请求报文,响应报文;格式相同,请求报文包括,起始行,请求头 ,空行,请求体;

起始行包括请求方法 url http版本。请求头可以分为三组,general headers(请求报文和响应报文都可以用的头部),reques headers(例如 user-agent,accept-type referer),entity headers例如content-type content-length

请求方法 get post head put delete connet options trace patch

响应状态码分为5类:信息响应(100-199),成功响应(200-299),重定向(300-399)、客户端错误(400-499)、服务端错误(500-599)

  • 6.cors跨域(跨域资源共享)

出于安全的考虑,浏览器限制从脚本内发出跨源的http请求,除非请求头中包含了正确的cors请求头。

以下需要使用跨域,脚本内发出的跨域xmlHttpReques 请求,字体的加载,webGl贴图,使用drawImage将vedio和image画到canvas;

跨域资源共享标准新增了一组http首部字段,允许服务器申明哪些源站可以访问资源。

跨域请求中某些请求 会触发cors预检请求,从而知道服务器是否允许跨域请求,若允许,才会发送http请求。

Access-Control-Allow-Origin
Access-Control-Request-Method
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
  • 7.浏览器缓存

缓存是是一种保存资源副本,并在下次请求的时候直接使用资源副本。缓存分为私有缓存(即浏览器缓存)和共享代理缓存。

http缓存通常只能缓存get请求。

通过Catch-Control用来区分对缓存的支持情况。

no-store禁止缓存;

no-catch,每次发送请求会带着与本地缓存相关的验证字段,服务端会验证缓存是否过期,未过期,则返回304,则缓存才使用本地缓存;http1.0中定义Pragma,1.1定义用于兼容1.0

max-age = 2222(s)表示资源被缓存的最大时间,max-age表示距离请求发起时间

must-revalidate缓存验证确认

判断缓存是否需要更新 If-None-Match If-Modified-Since

首先判断max-age ;没有就判断expires,和date进行比较;都没有在比较Last-Modified和date,缓存寿命等于(date-last-modified)/10

Etags 作为缓存的一种强校验器,如果资源请求的响应头里含有ETag, 客户端可以在后续的请求的头中带上 If-None-Match 头来验证缓存。

Last-Modified 响应头可以作为一种弱校验器。说它弱是因为它只能精确到一秒。如果响应头里含有这个信息,客户端可以在后续的请求中带上 If-Modified-Since 来验证缓存。

文档后加版本号,用于请求新的资源,加速缓存更新。

vary 用于判断是使用新的资源还是缓存文件,只有当前的请求和原始的缓存和缓存的响应头里的vary字段都相等,才可以使用缓存。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值