HTTP协议简述

1.HTTP协议简介

1.HTTP协议介绍

1.HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为普遍的一种网络传输协议,全部的WWW文件都必须遵照这个标准。html

2.HTTP是基于TCP/IP通讯协议来传递数据(HTML 文件, 图片文件, 查询结果等)web

2.HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。浏览器

3.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

4.HTTP默认的端口号为80,HTTPS的端口号为443。缓存

HTTP协议工做流程

一次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链接在发送后将仍然保持打开状态,因而,浏览器能够继续经过相同的链接发送请求。保持链接节省了为每一个请求创建新链接所需的时间,还节约了网络带宽。

2.1 短链接

短链接的操做步骤是:创建链接——数据传输——关闭链接...创建链接——数据传输——关闭链接

若是客户请求频繁,将在TCP的创建和关闭操做上浪费较多时间和带宽。

2.2 长连接

示意:长连接,指在一个链接上能够连续发送多个数据包,在链接保持期间,若是没有数据包发送,须要双方发链路检测包。

长连接操做步骤:创建链接——数据传输...(保持链接)...数据传输——关闭链接

长链接能够省去较多的TCP创建和关闭的操做,减小浪费,节约时间

长连接分为 without pipelining 和 with pipelining,下图中是without

pipelining,客户端只在收到前一个请求的响应后,才发出新的请求

2.3 管线化

下图是with pipelining,每次创建连接后无需等待请求回来就能够发送下一个请求

3. Http请求报文

客户端发送一个HTTP请求到服务器的请求消息包括如下格式:

请求行(request line)、请求头部(header)、请求体组成,下图给出了请求报文的通常格式。

请求行:

方法:
    GET 获取资源
    POST 向服务器端发送数据,传输实体主体
    PUT 传输文件
    HEAD 获取报文首部
    DELETE 删除文件
    OPTIONS 询问支持的方法
    TRACE 追踪路径
协议/版本号
URL
复制代码

请求头:

通用首部(General Header)
请求首部(Request Header)
响应首部(Response Header)
实体首部(Entity Header Fields)
复制代码

请求体

请求报文拆解:

3.1 get请求

3.2 post请求

4. Http响应报文

HTTP响应组成:响应行、响应头、响应体。

响应行

(HTTP/1.1)代表HTTP版本为1.1版本,状态码为200,状态消息为(ok)
复制代码

响应头

Date:生成响应的日期和时间;
Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1
复制代码

响应体

响应报文拆解:

5. Http状态码

类别 缘由

1XX Informational(信息性状态码)

2XX Success(成功状态码)

3XX Redirection(重定向)

4XX Client Error(客户端错误状态码)

5XX Server Error(服务器错误状态吗)

5.1 2XX 成功

200(OK 客户端发过来的数据被正常处理

204(Not Content 正常响应,没有实体

206(Partial Content 范围请求,返回部分数据,响应报文中由Content-Range指定实体内容

5.2 3XX 重定向

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) 临时重定向,不应改变请求方法

5.3 4XX 客户端错误

  • 400(Bad Request) 请求报文语法错误

  • 401 (unauthorized) 须要认证

  • 403(Forbidden) 服务器拒绝访问对应的资源

  • 404(Not Found) 服务器上没法找到资源

5.4 5XX 服务器端错误

  • 500(Internal Server Error)服务器故障

  • 503(Service Unavailable) 服务器处于超负载或正在停机维护

6. 首部

6.1 通用首部字段

首部字段名 说明

  • Cache-Control 控制缓存行为

  • Connection 连接的管理

  • Date 报文日期

  • Pragma 报文指令

  • Trailer 报文尾部的首部

  • Trasfer-Encoding 指定报文主体的传输编码方式

  • Upgrade 升级为其余协议

  • Via 代理服务器信息

  • Warning 错误通知

6.2 请求首部字段

首部字段名 说明

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客户端程序的信息

6.3 响应首部字段

首部字段名 说明

Accept-Ranges 是否接受字节范围

Age 资源的建立时间

ETag 资源的匹配信息

Location 客户端重定向至指定的URI

Proxy-Authenticate 代理服务器对客户端的认证信息

Retry-After 再次发送请求的时机

Server 服务器的信息

Vary 代理服务器缓存的管理信息

www-Authenticate 服务器对客户端的认证

6.4 实体首部字段

首部字段名 说明

Allow 资源可支持的HTTP方法

Content-Encoding 实体的编码方式

Content-Language 实体的天然语言

Content-Length 实体的内容大小(字节为单位)

Content-Location 替代对应资源的URI

Content-MD5 实体的报文摘要

Content-Range 实体的位置范围

Content-Type 实体主体的媒体类型

Expires 实体过时时间

Last-Modified 资源的最后修改时间

七、HTTP中的重定向和请求转发的区别

解释一   一句话,转发是服务器行为,重定向是客户端行为。为何这样说呢,这就要看两个动做的工做流程:

转发过程:客户浏览器发送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的人,让他们办好后,送了过来。

相关文章
相关标签/搜索