博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP协议简述
阅读量:7100 次
发布时间:2019-06-28

本文共 4530 字,大约阅读时间需要 15 分钟。

1.HTTP协议简介

1.HTTP协议介绍

1.HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。

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

2.HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

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

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

HTTP协议工作流程

一次HTTP操作称为一个事务,其工作过程大概如下:

1.用户在浏览器中键入需要访问网页的URL或者点击某个网页中链接;

2.浏览器根据URL中的域名,通过DNS解析出目标网页的IP地址;

eg:

a.浏览器请求这个页面:

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 资源的最后修改时间

7、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的人,让他们办好后,送了过来。

转载于:https://juejin.im/post/5c9a37fce51d455ac5303846

你可能感兴趣的文章
简析 Jenkins 专有用户数据库加密算法
查看>>
ios软键盘遮挡输入框问题
查看>>
在Git中配置多ssh key登陆不同仓库
查看>>
java B2B2C springmvc mybatis多租户电子商城系统-服务网关过滤器
查看>>
从性能领先到体验领先,迅雷链带动区块链行业升级
查看>>
TiKV 源码解析系列文章(七)gRPC Server 的初始化和启动流程
查看>>
数据库-oracle-基础知识
查看>>
Drools workbench
查看>>
聚焦http协议缓存策略(RFC7234)在okhttp中的实现
查看>>
koa教程--busboy模块
查看>>
Android:四大架构的优缺点,你真的了解吗?
查看>>
互联网分布式微服务云平台规划分析--平台整体规划
查看>>
(八)Java B2B2C多用户商城 springcloud架构- commonservice-eureka 项目构建过程
查看>>
Java线程池Executor使用
查看>>
springmvc入门之映射处理器(二)
查看>>
Activity之间数据传递
查看>>
nagios分组出图代码实现讲解[1]
查看>>
我的友情链接
查看>>
mybatis错误2
查看>>
Win7+Ubuntu11
查看>>