一. 简介
- HTTP(Hypertext Transfer Protocol)即超⽂本传输协议,其位于应用层,基于TCP/IP协议来完成数据的传输,规定了客户端与服务端的通信格式。
- 基于“请求-响应”模式
客户端发起请求,服务器收到请求后,服务器才会响应。 - 无连接
每次连接只处理一个请求。处理完请求后,不是立即断开连接,会有一个等待时间。 - 无状态保存
不保存请求和响应之间的通信状态。
二. 请求处理流程
- 用户通过浏览器输入网址(如:http://www.muzi.cn),发起请求(1到2之间隐藏了:通过DNS将域名解析为IP地址);
- 浏览器发起TCP连接请求,通过IP地址找到对应的web服务器;
- 服务器接受请求后,通过TCP三次握手建立连接;
- 浏览器将请求数据打包成HTTP格式的数据包;
- 浏览器发送请求数据包;
- 服务器解析HTTP格式的数据包;
- 执行相应的请求;
- 将响应结果(可能是图片或者HTML等)打包成HTTP格式的数据包;
- 将数据包通过网络发送给浏览器;
- 浏览器解析HTTP格式的数据包(假设数据是HTML);
- 浏览器呈现HTML响应给用户。
三. HTTP请求方法
-
八种方法
GET、POST、 HEAD、TRACE、OPTIONS、CONNECT、DELETE、PUT -
GET和POST
「功能介绍」
(1)GET主要功能:
从服务器中获取用户所需资源,并将其作为响应返回给客户端。
⚠️是获取资源,故不能修改资源。
⚠️虽然GET也可以上传资源到服务器,但一般不建议。
(2)POST主要功能:
既能够从服务器获取资源,也可以向服务器上传资源。「上传资源对比」
(1)采用GET方法向服务器上传资源时,一般将数据添加到URL的后面,并使用“?”连接,各个变量之间用“&”连接,由于URL长度存在限制,故采用此方法上传的数据很小,通常是1024Byte左右;
而POST方法传递数据是通过HTTP请求的附件进行的,传送数据量更大,一般不受限。
(2)由于GET方法上传数据时是添加在URL中,故数据被“暴露”,存在安全隐患;故POST安全性更好。
四. HTTP状态码
- 大类别
- 细分
502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。
五. 报文组成
-
请求报文
请求行:请求方法,请求URL(不包括域名),HTTP协议版本;
请求头部:由关键字/值对组成,每行一对
空行:通知服务器以下不再有请求头
请求体:GET没有请求数据,POST有。与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length 。
-
响应报文
<status-line> //状态行 <headers> //消息报头 <blank line> //空行 <response-body> //响应体
3. 请求头
Accept:指定客户端能够接收的内容类型。
Accept-Charset:浏览器可以接受的字符编码集。
Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。
Accept-Language:浏览器可接受的语言。
Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。
AuthorizationHTTP:授权的授权证书。
Cache-Control:指定请求和响应遵循的缓存机制。
Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Content-Length:请求的内容长度。
Content-Type:请求的与实体对应的MIME信息。
Date:请求发送的日期和时间。
Expect:请求的特定的服务器行为。
From:发出请求的用户的Email。
Host:指定请求的服务器的域名和端口号。
If-Match:只有请求内容与实体相匹配才有效。
If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码。
If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。
If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。
If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。
Max-Forwards:限制信息通过代理和网关传送的时间。
Pragma:用来包含实现特定的指令。
Proxy-Authorization:连接到代理的授权证书。
Range:只请求实体的一部分,指定范围。
Referer:先前网页的地址,当前请求网页紧随其后,即来路。
TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。
Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。
User-AgentUser-Agent:的内容包含发出请求的用户信息。
Via:通知中间网关或代理服务器地址,通信协议。
Warning:关于消息实体的警告信息
- 响应头
Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求。
Age:从原始服务器到代理缓存形成的估算时间(以秒计,非负)。
Allow:对某网络资源的有效的请求行为,不允许则返回405。
Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型。
Content-Encodingweb:服务器支持的返回内容压缩编码类型。。
Content-Language:响应体的语言。
Content-Length:响应体的长度。
Content-Location:请求资源可替代的备用的另一地址。
Content-MD5:返回资源的MD5校验值。
Content-Range:在整个返回体中本部分的字节位置。
Content-Type:返回内容的MIME类型。
Date:原始服务器消息发出的时间。
ETag:请求变量的实体标签的当前值。
Expires:响应过期的日期和时间。
Last-Modified:请求资源的最后修改时间。
Location:用来重定向接收方到非请求URL的位置来完成请求或标识新的资源。
Pragma:包括实现特定的指令,它可应用到响应链上的任何接收方。
Proxy-Authenticate:它指出认证方案和可应用到代理的该URL上的参数。
refresh:应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)
Retry-After:如果实体暂时不可取,通知客户端在指定时间之后再次尝试。
Serverweb:服务器软件名称。
Set-Cookie:设置Http Cookie。
Trailer:指出头域在分块传输编码的尾部存在。
Transfer-Encoding:文件传输编码。
Vary:告诉下游代理是使用缓存响应还是从原始服务器请求。
Via:告知代理客户端响应是通过哪里发送的。
Warning:警告实体可能存在的问题。
WWW-Authenticate:表明客户端请求实体应该使用的授权方案。