http学习笔记

HTTP是什么

HTTP全称为HyperText Transfer Protocol,译为超文本传输协议(规则的集合)。

HTTP是一种“客户端——服务器”的数据交换协议,请求通常是由客户端率先发起的。

HTTP历史与标准

请求与响应

  • 由客户端向服务端发送的消息称为请求(request)
  • 由服务端回应的消息称为响应(response)

基于HTTP的组件系统

请求通过一个实体发出,实体也就是用户代理(浏览器)。

客户端

user-agent(http请求头中存在该信息)就是任何能够为用户发起行为的工具,通常是浏览器,也可以是工程师使用的程序,以及Web开发人员调试应用程序。

客户端与服务端的交互流程

浏览器首先发送一个请求来获取HTML页面,再解析文档中的资源信息发送其他请求,获取可执行脚本或CSS样式来进行页面布局渲染,以及一些其他页面资源(如图片或资源)。然后,浏览器将这些资源整合到一起,展现出一个完整的页面。

Web服务器

服务器只是虚拟意义上代表一个机器:它可以是共享负载(负载均衡)的一组服务器组成的计算机集群,也可以是一种复杂的软件,通过向其他计算器发起请求来获取部分或全部资源。

Web服务器不一定是一台机器,但一台机器上可以开启多个服务。

HTTP的基本特性

  • HTTP是简单的

    虽然下一代HTTP2协议将HTTP消息封装到了帧中,HTTP大体上还是被设计得简单易懂。

  • HTTP是可扩展的

    主要指扩展headers

  • HTTP是无状态,有会话的

    两次请求之间没关系

  • HTTP和连接

    一个连接是由传输层来控制的,这从根本上不属于HTTP的范围

HTTP能控制什么

  • 缓存

  • 开放同源限制

  • 认证

    基本的认证功能可以直接通过HTTP提供,或者通过Cookie

  • 代理和隧道

    通常情况下,服务器/客户端是处于内网的,对外网隐藏真实IP地址。因此HTTP请求就要通过代理越过这个网络屏障

  • 会话

HTTP报文

HTTP报文,又称HTTP消息,是服务器和客户端之间交换数据的方式,分为请求响应

HTTP消息采用ASCII编码的多行文本构成。

HTTP请求报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukvWyXVF-1598323635790)(https://s1.ax1x.com/2020/08/18/dnbHp9.md.png)]

HTTP报文结构

  • start line:一行起始行用于描述要执行的请求,或者对应的状态,成功或失败。这个起始行总是单行的
  • HTTP headers:一个可选的HTTP头集合指明请求或描述消息正文
  • empty line:一个空行指示所用关于请求的元数据已经发送完毕
  • body:一个可选的包含请求相关的数据的正文或相应相关的文档,正文的大小由起始行的HTTP头来指定

起始行和HTTP消息中的HTTP头统称为“请求头”,而其有效负载被称为“消息正文”

HTTP响应报文

请求方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YAdepv7q-1598323635814)(https://s1.ax1x.com/2020/08/18/dnXmtO.md.png)]

请求头与请求主体

请求头

请求头允许客户端向服务端传递附加信息。请求头由键值对组成。

根据不同上下文,可将请求头分为:

  • 通用头:同时使用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头
  • 请求头:包括更多有关要获取的资源或客户端本身信息的消息头
  • 实体头:包含有关实体主体的更多信息,比如主体长度(Content-Lenghth)或其他MIME类型

状态行与状态码

HTTP响应消息的起始行被称作状态行,包含以下信息:

  • 协议版本
  • 状态码
  • 状态文本

状态码

duSBTI.png
duSrkt.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hgWi3ZHw-1598323635821)(https://s1.ax1x.com/2020/08/18/duSaOH.png)]
duSwmd.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9IXnT8e7-1598323635827)(https://s1.ax1x.com/2020/08/18/duS00A.png)]

MIME类型

MIME类型全称为Multipurpose Internet Mail Extensions,被译为多用途Internet邮件扩展类型,是一种标准化的方式来表示文档的性质和格式。

HTTP1.x的缺点

  • 消息头不想消息主体一样会被压缩
  • 两个报文之间的header通常非常相似,但它们仍然在连接中重复传输
  • 无法复用。当在同一个服务器打开几个连接时,TCP热连接比冷连接更加有效。

缓存机制是什么

缓存是一种保存并在下次请求是直接使用该副本的技术。当web缓存发现请求的资源已经被储存,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。

缓存需要合理配置,因为并不是所有资源都是永久不变的。重要的是对一个资源的缓存应截止到其下一次发生改变(既不能缓存过期的资源)。

缓存的优势

  • 缓解服务器的资源消耗和运行压力,提升服务器的整体性能
  • 减少服务器资源加载的延迟,进而减少显示某个资源所用的时间
  • 减少对宽带造成的压力,避免网络阻塞问题的出现
  • Web站点变得更具有响应性

缓存应用

常见的HTTP缓存只能存储GET响应,对于其他类型的响应则无能为力:

  • 检索请求的成功响应,状态码为200,则表示为成功。包含例如HTML文档,图片,或者文件的响应
  • 不变的重定向:响应状态码为301
  • 错误响应:状态码为404
  • 不完全的响应:状态码为206
  • 除了GET请求外,如果匹配到作为一个已被定义的cache键名的响应

缓存机制

私有缓存

私有缓存只能用于单独用户。浏览器缓存拥有用户通过HTTP下载的所有文档。这些缓存为浏览过的文档提供向后/向前导航、保存页面、查看源码等功能,可以避免再次向服务器发起多余的请求。他同样可以提供缓存内容的离线预览。

Cache-Control:private

共享缓存

共享缓存可以被多个用户使用。例如,ISP或所在的公司可能会架设一个web代理来作为本地网络基础的一部分提供给用户。这样热门的资源就会被重复使用,减少网络拥堵与延迟。

Cache-Control:public

缓存控制

Cache-Control头

  • 禁止进行缓存

    Cache-Control:no-store
    Cache-Control:no-cache,no-store,must-revalidate
    
  • 强制确认缓存

    Cache-Control:no-cache
    
  • 缓存过期机制

    Cache-Control:max-age=[毫秒值]
    
  • 缓存验证确认

    Cache-Control:must-revalidate
    

pragma头

用于向前兼容HTTP/1.0客户端,响应头不支持该属性

Pragma:no-cache

Cookie是什么

Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,会在浏览器下次向同一服务器再发起请求时会携带Cookie。

Cookie的作用域

DomainPath标识定义了Cookie的作用域,即Cookie应该发送给哪些URL

  • Domain标识指定了哪些主机可以接收Cookie
    • 如果不指定,默认为当前文档的主机(不包含子域名)
    • 如果指定了Domain,则一般包含子域名。例如,如果设置Domain=baidu.com,则Cookie也包含在子域名下
  • Path标识指定了主机下哪些路径可以接受Cookie

Cookie的有效期

Max-Age和Expires标识定义了Cookie的有效期,即Cookie的生命周期

Cookie的应用

  • 会话状态管理
  • 个性化设置
  • 浏览器行为跟踪

访问与更新Cookie

创建Cookie

document.cookie = "键=值&键=值"

这种方法不会覆盖原有的Cookie,而是会向后追加

读取Cookie

document.cookie上存储了所有的cookie

删除Cookie

document.cookie="username=;expires=[过期时间]"

HTTP中的Cookie

Set-Cookie响应头

服务器使用该响应头向用户代理发送Cookie信息

Set-Cookie:[键]=[值]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值