http面试准备(简单看看)

《图解http》笔记以及相关HTTP知识整理

HTTP简介

Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web 是建立在 HTTP 协议上通信的。

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP三点注意事项:

  1. HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  2. HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  3. HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
TCP/IP协议

TCP/IP 是供已连接因特网的计算机进行通信的通信协议,是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大的集合,在 TCP/IP 中包含一系列用于处理数据通信的协议:

TCP (传输控制协议) - 应用程序之间通信
UDP (用户数据包协议) - 应用程序之间的简单通信
IP (网际协议) - 计算机之间的通信
ICMP (因特网消息控制协议) - 针对错误和状态
DHCP (动态主机配置协议) - 针对动态寻
  • 应用层
      应用层决定了向用户提供应用服务时通信的活动。|| 应用层负责处理特定的应用程序细节。
      TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name System,域 名系统)服务就是其中两类。 HTTP 协议也处于该层。

  • 传输层
      传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据 传输。
      在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报 协议)。
    主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
      TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。为了提供可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。
      UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。UDP协议任何必需的可靠性必须由应用层来提供

  • 网络层
      网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数 据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计 算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所 起的作用就是在众多的选项内选择一条传输路线。
    在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
      IP是一种网络层协议,提供的是一种不可靠的服务,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
      ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
      IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。

  • 链路层
      用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在 链路层的作用范围之内

HTTP协议版本

参考

  • HTTP1.0:最早的http只是使用在一些较为简单的网页上和网络请求上,所以比较简单,每次请求都打开一个新的TCP链接,收到响应之后立即断开连接
  • HTTP1.1:相比较1.0版本,新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法,引入了更多的缓存控制策略,支持长连接和请求的流水线处理,是现在仍广泛使用的HTTP协议。
  • HTTP2.0:header压缩,服务端推送,多路复用,新的二进制格式
  • HTTP3.0(不了解不明白不乱说)

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。客户端的HTTP报文叫请求报文,服务端的HTTP报文叫响应报文。
请求报文 是由请求行(请求方法、协议版本)、请求首部(请求URI、客户端信息等)和内容实体(用户信息和资源信息等,可为空)构成。
响应报文 是由状态行(协议版本、状态码)、响应首部(服务器名称、资源标识等)和内容实体(服务端返回的资源信息)构成。

首部字段
通用首部作用(请求报文和响应报文都可能使用)
Cache-Control控制缓存的行为:no-cache(强制向服务器再次验证)、no-store(不做任何缓存)、max-age=111111(资源可缓存最大时间 秒)、public(客户端、代理服务器都可利用缓存)、private(代理服务器不可用缓存)
Connection浏览器想要优先使用的连接类型: keep-alive close(开启和关闭持久连接)
Date创建报文时间
Pragma只用于请求报文,客户端要求中间服务器不返回缓存的资源
Via代理服务器相关信息,每经过一个代理服务器就会添加相关信息,用逗号分割
Transfer-Encoding传输编码方式:chunked分块传输
Upgrade要求客户端使用的升级协议,需配合Connection: Upgrade一起使用:websocket
Warning缓存相关问题的警告
请求首部作用(请求报文专用)
Accept能正确接收的媒体类型:application/json text/plain
Accept-Charset能正确接收的字符集: unicode-1-1
Accept-Encoding能正确接收的编码格式列表:gzip deflate
Accept-Language能正确接收的语言列表:zh-cn,zh;1=0.9,en,1=0.8
Authorization客户端认证信息:Bearer dSdSdFFlsfdjasd123,一般存token用
Cookie发送给服务器的Cookie信息
Expect期待服务端的指定行为
From请求方邮箱地址
Host服务器的域名,用于区分单台服务器多个域名的虚拟主机,是HTTP/1.1唯一必须包含的字段。
If-Match两端资源标记比较,只有判断条件为真服务端才会接受请求:If-Mach: "123456,和服务端文件标记比较
If-Modified-Since本地资源未修改返回 304(比较时间)
If-None-Match本地资源未修改返回 304(比较标记)
User-Agent客户端信息
Max-Forwards限制可被代理及网关转发的次数
Proxy-Authorization向代理服务器发送验证信息
Range请求某个内容的一部分,配合If-Range使用
Referer请求发起页面的原始URI
TE传输编码方式
响应首部作用(响应报文专用)
Accept-Ranges告知客户端服务器是否可接受范围请求,是bytes,否none
Age资源在代理缓存中存在的时间
ETag资源标识,资源发生变化时标识也会发生改变
Location客户端重定向到某个 URL
Proxy-Authenticate向代理服务器发送验证信息
Server服务器名字:Apache Nginx
WWW-Authenticate获取资源需要的认证方案
Set-Cookie需要存在客户端的信息,一般用于识别用户身份
实体首部作用(补充请求报文或响应报文相关信息)
Allow资源的正确请求方式:GET HEAD POST
Content-Encoding内容的编码格式:gzip deflate
Content-Language内容使用的语言:zh-CN
Content-Lengthrequest body 长度(即实体主体的大小):
Content-Location返回数据的备用地址
Content-MD5Base64加密格式的内容 MD5检验值
Content-Range响应主体的内容范围
Content-Type内容的媒体类型(如'application/json;charset=UTF-8'则会发送预检请求)
Expires内容的过期时间
Last_modified内容的最后修改时间
请求方法
序号方法描述
1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新

get和post为常用请求方法。

状态码
状态码状态码英文名称描述
1**信息,服务器收到请求,需要请求者继续执行操作
101Switching-Protocols切换协议(双向通信)。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2**成功,操作被成功接收并处理
200OK请求成功。一般用于GET与POST请求
204No Content无内容(没有响应体)。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
206Partial Content部分内容(断点续传)。服务器成功处理了部分GET请求
3**重定向,需要进一步的操作以完成请求
301 Moved Permanently 永久移动(永久重定向)。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 302 Found 临时移动(临时重定向)。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 304 Not Modified 未修改(缓存)。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 4** 客户端错误,请求包含语法错误或无法完成请求 401 Unauthorized 请求要求用户的身份认证(没有权限) 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求(登录了没有权限) 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 405 Method Not Allowed 客户端请求中的方法被禁止(请求方法不存在,不支持) 5** 服务器错误,服务器在处理请求的过程中发生了错误 502 Bad Gateway (负载均衡)作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
请求与响应

参考:
https://juejin.im/post/5d0ddbdf6fb9a07f08709f06

请求由下面的元素组成:(起始行、头部和主体)

  • 一个HTTP的method,经常是由一个动词像GET, POST 或者一个名词像OPTIONS,HEAD来定义客户端的动作行为的。通常客户端的操作都是获取资源(用GET方法)或者发送一个HTML form表单的值(用POST方法),虽然在一些情况下也会有其他的操作。
  • 要获取的资源的路径,通常是上下文中就很明显的元素资源的URL,它没有[protocol],或是TCP的port(HTTP是80端口)。
  • HTTP协议的版本号。
  • 为服务端表达其他信息的可选择性的headers,为键值对形式
  • 对于一些像POST这样的方法,报文的body就包含了发送的资源,这个body与回应报文的body类似。

注意:body并不是必须的,对于get请求方法如果body没有携带使用可以不带,post请求中必须带因为里面有表单提交的数据。

回应报文包含了下面的元素:(起始行、响应头和响应体)

  • HTTP的版本号。
  • 一个状态码(status code),来告知对应的请求发送成功或失败,以及失败的原因。
  • 一个状态信息,这个信息是非权威的状态码描述信息,也就是说可以由服务端自行设定的。
  • HTTP headers,与请求的很像。
  • 可选的,但是比在请求报文中更加常见地包含获取资源的body。

小结

  • http无连接、无状态。
  • body主体在request信息中非必须。

先这些,以后再补充。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值