HTTP协议基础
网络基础
TCP/IP协议
- 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
- 网络层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议)ICMP协议(Internet互联网控制报文协议)以及IGMP协议(Internet组管理协议)
- 运输层,主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据包协议)
- 应用层,负责处理特定的应用程序细节。
?
封装与拆封
IP协议
IP协议,网际协议,是TCP/IP的核心协议,上层协议(TCP、UDP等)的数据包都是用IP包承载传输
IP数据包格式
TCP协议
TCP、传输控制协议
三次握手(先建立连接 再传输)
?滑动窗口
四次挥手(双向分别中断)
?DNS协议
DNS,域名解析协议
将域名解析为IP地址
?
?URL和URI
URL(统一资源定位符)
URL,用于标识资源的方向、地点
- web浏览器中访问web网页时输入的访问地址
- ftp服务器资源的访问地址
语法规则
scheme://host.domain:port/path/filename
scheme-定义因特网服务的类型。最常见的类型是http
host -定义域主机(http的默认主机是www)
domain-定义因特网域名,比如sangfor.com
port -定义主机上的端口号(http的默认端口号是80)
path - 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)
filename -定义文档/资源的名称
URI(统一资源标识符)
URI,用字符串标识某一互联网资源。
- ftp://ftp.is.co.za/rfc/rfc1808.txt
- http://www.sangfor.com.cn/rfc/rfc1808.txt
URL和URI的对比
- URL给出资源位于哪里(哪台主机、哪个路径、哪个文件夹)
- URI给出具体某资源的定位路径(从资源自身出发,给出可达的路径)
HTTP协议特点
请求与响应
服务器和客户端
HTTP协议的通信双方
客户端
服务端
Http协议规定,请求从客户端发起,由服务端来响应该请求并返回。
- 客户端发起请求,服务端才会响应
- 客户端未发起请求,服务端是不会响应的
?不保存状态
- HTTP协议不保存请求和响应的通信状态,不做持久化处理
- 每次新的请求,对应一次响应产生
请求方法
方法是为了告知服务器,该请求的意图是什么,向服务器所请求的资源下达命令。 HTTP1.1的主要请求方法包括:
- GET????????获取资源
- POST????????传输实体主体
- PUT????????传输文件
- OPTIONS????????询问支持的方法
- HEAD????????获得报文首部
- DELETE????????删除文件
- TRACE????????追踪路径
- CONNECT????????要求用隧道协议连接代理
持久连接&管线技术
持久连接要解决的问题
- 最早期版本,发起一次HTTP请求,就需要建立一次tcp连接。
- 服务器成本较高(一对多,多个tcp连接,多台客户端请求)
?持久连接
- 建立一次tcp连接,只要任意一端没有提出断开连接,tcp连接就保持着。
- 减少了服务器压力,相同时间共快传输完内容,显示速度也相应提升。
管线技术?
- 在持久连接技术之上发展而来,之前是发送一个请求,响应后,才能发送下一个请求。
- 管线技术,客户端可以一次发送多个请求,同时接收多个响应。
- 管理技术,并发传输,进一步提升了资源传输的效率,内容显示更快。
?Cookie技术
- http无状态协议,随着web应用的发展,服务器需要连接为不同客户端提供连接状态的服务,cookie技术应运而生。
- Cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。
- Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,客户端下次再向服务器发送请求时,会自动携带cookie信息,一起发送给服务器;
- 服务器发现客户端发送过来的cookie后,会去检查是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息,这时,就可为客户端继续提供状态性的服务了。
HTTP协议请求方式?
概念
HTTP方法
- HTTP客户端发出请求,告知服务端需要执行不同类型的请求命令,这些命令被称为HTTP方法。
- HTTP方法是告诉服务器要做什么。
GET方法
作用
通常用于请求服务器发送某个资源,也是最常用一种的方法。
?POST方法
作用
- POST方法是用来向服务器输入数据的,主要支持HTML表单。
- 表单填写好后会被发送给服务器,比如登录窗口输入用户名和密码,供服务器验证身份。
注:与PUT方法的区别,POST用于向服务器发送数据,PUT用于向服务器上的资源(比如文件)中存储数据。
PUT方法
作用
- PUT方法是向服务器写入文档,让服务器请求的主体部分来创建一个由所请求的URL命名的新文档,若已存在该文件,就用这个主体替代它。
- 因为涉及内容修改,大部分执行PUT方法前,被要求登录。
?HEAD方法
作用
类同于GET方法,但只需要服务器返回首部,不返回实体的主体部分。可实现未获取实际资源的情况下,对资源的首部进行检查。
- 可用于判断资源类型;
- 通过状态码判断资源是否存在;
- 测试资源是否被修改
DELETE方法
作用
- 请求服务器删除请求中的URL所指定的资源,但不一定成功
- 不成功的原因,HTTP规范允许服务器在不通知客户端的情况下撤销请示。
OPTIONS方法
作用
- 询问服务器支持的各种功能
- 可以询问服务器支持哪些方法
- 可以询问某些特殊资源支持哪些方法
?
TRACE方法?
作用
- 跟踪请求经过了哪些中间环节(防火墙、代理等)
- 每个中间节点可以修改原始的http请示,即增加代表自己的信息(via:1.1 proxy.sangfor.com.cn)
- 最后的响应服务器将最终的请示头,作为响应主体,返回给客户端。
?HTTP协议状态码
概念
HTTP响应状态码
- 客户端向服务器发出请求,状态码用于描述返回的请求结果
- 状态码由3位数字和原因短语组成,首位数字表示响应类别,原因短语代表说明和含义,比如200 ok,404 Not Found。
- 不同的状态码,代表不同的状态。借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误,出现了哪类可能的错误。
- 常用的共计14种
2XX状态码
- 2XX的响应结果表明请求被正常处理了。
- 常见的有200、204、206
200 OK
- 表示从客户端发来的请求在服务器端被正常处理了。
- 浏览器会接着处理、显示返回的数据。
204?Not Content
- 表明请示已经执行成功,但不需要做任何响应。204响应码会中断浏览器的页面跳转,浏览器会保持原URL不变,页面内容也维持原状。
- 响应报文中没有实体的主体部分,主要用于在浏览器不转为显示新文档的情况下,对其进行更新(比如刷新一个表单页面)
?206 Partial Content
- 表明客户端进行了范围请求,而服务器成功执行了这部分的Get请求。
- 响应报文中包含由Content-Range指定范围的实体内容,然后由浏览器进行内容整合。
3XX状态码
- 3XX代表重定向状态码,表明浏览器需要执行某些特殊的处理以正确处理请求。
- 常见的有301、302、303、304、307
301 Moved Permanently
- 永久性重定向,该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
- 新地址会在响应头的Location字段中指定。
302 Found
- 临时性重定向,表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。
- 与301相似,但302表示的不是永久移动,只是临时性质的,已移动资源对应的URI将来还有可能发生改变。
303 See Other
- 表示由于请求对应的资源存在着另一个URI,应使用Get方法定向获取请求的资源。
- 303状态码和302有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。
- 301、302、303的响应,浏览器都会把POST方法替换为GET方法,去除请求里的POST数据体部分,并自动重新再发送一次请求。
303 Not Modified
- 该状态码表示客户端发送附带条件的请求时,服务器端允许请示访问资源,但这次请求的文档和之前请求过的版本相比并没有变化。304状态码返回时,不包含任何响应的主体部分。
- 这个响应会根据If-Modified-Since头域的设定,对最后修改时间进行条件判断,然后确定是否需要更新浏览端的文件缓存副本。
- 虽然304划分在3XX类别中,但是和重定向没有关系。
307 Temporary Redirect
- 临时重定向。该状态码与302 Found有着相同的含义。
- 307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况(这个响应码在web应用里不太常用,而某些浏览器对它的处理也不是很统一)
?4XX状态码
- 4XX响应结果代表客户端发生错误。
- 常见的有400、401、403、404
400 Bad Request(不合规范的请求)
400表示请求报文中存在语法错误,当错误发生时,需修改请求的内容后再次发送请求。
401 Unauthorized
- 401表示发送的请求需要有通过HTTP认证的认证信息。
- 若之前已进行过1次请求,则表示用户认证失败。
- 一般是在访问特定资源,用户提供基于HTTP协议级别的授权认证信息,浏览器在用户输入登录信息后,并授权失败时,才会返回该响应消息体。
- 含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用以质询用户信息。
403 Forbidden
- 403表明对请求资源的访问被服务器拒绝了。
- 服务器端没有必要给出拒绝的详细理由,若想说明,可以在实体的主体部分对原因进行描述。
- 出现403的原因:未获得文件系统的访问授权,访问权限出现某些问题等(所请求的URL存在但不能被访问,可能是文件系统权限不足,规则配置不允许处理本次请求,或授权不足)
404 Not Found
- 404表明服务器上无法找到请求的资源,或服务端拒绝请求,但又不想说明理由时使用。
- 通常响应消息体会显示给用户。
5XX
- 5XX的响应结果表明服务器本身发生错误。
- 常见的有:500、503
500 Internal sever error
500表明服务器端在执行请求时发生了错误。也有可能是web应用存在的bug或某些临时的故障。
503 Service Unavailable
- 503表时服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
- 可通过Retry-After首部字段填上解除以上状况的时间,返回给客户端。
HTTP协议报文头部
HTTP报文结构
HTTP报文
- 用于HTTP协议交互的信息被称为HTTP报文。
- 请求端的HTTP报文被称为请求报文。
- 响应端的HTTP报文被称为响应报文。
HTTP报文结构
- HTTP报文本身是由多行数据构成的字符串文本。
- HTTP报文大致分为报文首部和报文主体两块,两者由空行来划分。
- 报文首部:服务器端或客户端处理的请求或响应的内容及属性。
- 空行:由CR(回车符,16进制0x0d)和LF(换行符,16进制0x0a)
- 报文主体:应被发送的数据。
HTTP报文结构-请求报文
- 请求行,包含用于请求的方法,请求的URI和HTTP版本。
- 首部字段,包含表示请求和响应的各种条件和属性的各类首部。?
HTTP报文结构-响应报文
状态行,包含表明响应结果的状态码,原因短语和HTTP版本。
通用首部字段
常见的通用首部字段
通用首部字段,是指在请示头部和响应头部都会使用的字段。
- 通过指定该字段,就能操作缓存的工作机制
- 指令的参数是可选的,多个指令之间通过“,”分隔
控制不再转发给代理的首部字段
- 在客户端发送请求和服务器返回响应内,使用Connection首部字段,可控制不再转发给代理的首部字段。
管理持久连接
- HTTP/1.1之前的HTTP版本的默认连接都是非持久连接,HTTP/1.1默认为持久连接,当服务器端想明确断开连接时,则指定Connection首部字段的值为Close。
Date字段表明创建HTTP报文的日期和时间。
请求首部字段
常见的请求首部字段
请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应相关的优先级等内容。
- Host:请求资源的主机和端口号
- User-Agent :客户端操作系统,浏览器等其他信息
- Referer:访问当前上一页面
- Cookie:请求者的身份凭证
- Accept:客户端希望接收的哪些MIME类型消息
- Accept-Charset:指定客户端接收的字符集
响应首部字段
?常见的响应首部字段
响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。
- Server:服务器所使用的Web服务名字
- Set-Cookie:向客户端设置Cookie
- Last-Modified:告诉浏览器资源修改的最后时间
- Content-Length :正文长度
- Location:引导用户转向与请求URI不同的资源
实体首部字段
常见的实体首部字段
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间与实体相关的信息。
- Allow:通知客户端能够支持的HTTP方法,比如:GET、HEAD
- Content-Encoding:告知客户端服务器对实体主体部分采用的字符编码
- Content-Language:告知客户端实体部分采用的语言
- Content-Length:表明实体主体部分大小
- Content-Location:给出与报文主体部分相对应实际的URI
- Content-Type:说明实体主体部分对象的媒体类型
Cookie 首部字段
Cookie的工作机制是用户识别及状态管理。
- Set-Cookie:响应首部字段,开始状态管理所使用的Cookie信息。当服务器准备开始管理客户端的状态时,会事先告知各种信息。
- Cookie:请求首部字段,服务器接收到的Cookie信息。当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务接收到的Cookie。接收到多个Cookie时,同样可以以多个Cookie形式发送。
HTTP请求响应过程
HTTP请求过程详解
- 浏览器:用户输入url
- DNS域名解析
- 建立TCP链接
- 发送HTTP Request
- web服务器响应(回复)
- 应用服务器响应(回复)
- 关闭TCP链接
- 用户浏览器渲染页面
|