1.HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为普遍的一种网络传输协议,全部的WWW文件都必须遵照这个标准。html
2.HTTP是基于TCP/IP通讯协议来传递数据(HTML 文件, 图片文件, 查询结果等)web
2.HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。浏览器
4.HTTP默认的端口号为80,HTTPS的端口号为443。缓存
一次HTTP操做称为一个事务,其工做过程大概以下:服务器
1.用户在浏览器中键入须要访问网页的URL或者点击某个网页中连接;网络
2.浏览器根据URL中的域名,经过DNS解析出目标网页的IP地址;并发
eg:post
a.浏览器请求这个页面:hackr.ip/index.html网络传输协议
b.在这一步,须要域名系统DNS解析域名hackr.ip,得主机的IP地址 20X.189.105.112。编码
c.而后将上面结合本机本身的信息,封装成一个http请求数据包
3.在HTTP开始工做前,客户端首先会经过TCP/IP协议来和服务端创建连接(TCP三次握手)
4.创建链接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和内容。
5.服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
6.通常状况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP链接,然而若是浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP链接在发送后将仍然保持打开状态,因而,浏览器能够继续经过相同的链接发送请求。保持链接节省了为每一个请求创建新链接所需的时间,还节约了网络带宽。
短链接的操做步骤是:创建链接——数据传输——关闭链接...创建链接——数据传输——关闭链接
若是客户请求频繁,将在TCP的创建和关闭操做上浪费较多时间和带宽。
示意:长连接,指在一个链接上能够连续发送多个数据包,在链接保持期间,若是没有数据包发送,须要双方发链路检测包。
长连接操做步骤:创建链接——数据传输...(保持链接)...数据传输——关闭链接
长链接能够省去较多的TCP创建和关闭的操做,减小浪费,节约时间
长连接分为 without pipelining 和 with pipelining,下图中是without
pipelining,客户端只在收到前一个请求的响应后,才发出新的请求
下图是with pipelining,每次创建连接后无需等待请求回来就能够发送下一个请求
客户端发送一个HTTP请求到服务器的请求消息包括如下格式:
请求行(request line)、请求头部(header)、请求体组成,下图给出了请求报文的通常格式。
请求行:
方法:
GET 获取资源
POST 向服务器端发送数据,传输实体主体
PUT 传输文件
HEAD 获取报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
协议/版本号
URL
复制代码
请求头:
通用首部(General Header)
请求首部(Request Header)
响应首部(Response Header)
实体首部(Entity Header Fields)
复制代码
请求体
HTTP响应组成:响应行、响应头、响应体。
响应行
(HTTP/1.1)代表HTTP版本为1.1版本,状态码为200,状态消息为(ok)
复制代码
响应头
Date:生成响应的日期和时间;
Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1
复制代码
响应体
响应报文拆解:
类别 缘由
1XX Informational(信息性状态码)
2XX Success(成功状态码)
3XX Redirection(重定向)
4XX Client Error(客户端错误状态码)
5XX Server Error(服务器错误状态吗)
200(OK 客户端发过来的数据被正常处理
204(Not Content 正常响应,没有实体
206(Partial Content 范围请求,返回部分数据,响应报文中由Content-Range指定实体内容
301(Moved Permanently) 永久重定向
302(Found) 临时重定向,规范要求,方法名不变,可是都会改变
303(See Other) 和302相似,但必须用GET方法
304(Not Modified) 状态未改变,
配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
307(Temporary Redirect) 临时重定向,不应改变请求方法
400(Bad Request) 请求报文语法错误
401 (unauthorized) 须要认证
403(Forbidden) 服务器拒绝访问对应的资源
404(Not Found) 服务器上没法找到资源
500(Internal Server Error)服务器故障
503(Service Unavailable) 服务器处于超负载或正在停机维护
首部字段名 说明
Cache-Control 控制缓存行为
Connection 连接的管理
Date 报文日期
Pragma 报文指令
Trailer 报文尾部的首部
Trasfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其余协议
Via 代理服务器信息
Warning 错误通知
首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的编码
Accept-Langulage 优先的语言
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在的服务器
If-Match 比较实体标记
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记
If-Range 资源未更新时发送实体Byte的范围请求
If-Unmodified-Since 比较资源的更新时间(和If-Modified-Since相反)
Max-Forwards 最大传输跳数
Proxy-Authorization 代理服务器须要客户端认证
Range 实体字节范围请求
Referer 请求中的URI的原始获取方
TE 传输编码的优先级
User-Agent HTTP客户端程序的信息
首部字段名 说明
Accept-Ranges 是否接受字节范围
Age 资源的建立时间
ETag 资源的匹配信息
Location 客户端重定向至指定的URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 再次发送请求的时机
Server 服务器的信息
Vary 代理服务器缓存的管理信息
www-Authenticate 服务器对客户端的认证
首部字段名 说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体的编码方式
Content-Language 实体的天然语言
Content-Length 实体的内容大小(字节为单位)
Content-Location 替代对应资源的URI
Content-MD5 实体的报文摘要
Content-Range 实体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体过时时间
Last-Modified 资源的最后修改时间
解释一 一句话,转发是服务器行为,重定向是客户端行为。为何这样说呢,这就要看两个动做的工做流程:
转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动做----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其余的web路径上去,中间传递的是本身的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感受不到服务器作了转发的。转发行为是浏览器只作了一次访问请求。
重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location能够重定向到任意URL,既然是浏览器从新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户能够观察到地址的变化的。重定向行为是浏览器作了至少两次的访问请求的。
解释二
重定向,实际上是两次request, 第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE能够看到地址变了,并且历史的回退按钮也亮了。重定向能够访问本身web应用之外的资源。在重定向的过程当中,传输的信息会被丢失。
请求转发是服务器内部把对一个request/response的处理权,移交给另一个 对于客户端而言,它只知道本身最先请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。
解释三 假设你去办理某个执照,
重定向:你先去了A局,A局的人说:“这个事情不归咱们管,去B局”,而后,你就从A退了出来,本身乘车去了B局。
转发:你先去了A局,A局看了之后,知道这个事情其实应该B局来管,可是他没有把你退回来,而是让你坐一下子,本身到后面办公室联系了B的人,让他们办好后,送了过来。