HTTP请求与响应基础

知识点

  1. 清楚 HTTP 请求与响应的整个过程
  2. 熟悉请求信息和响应信息中的一些细节比如请求的方式,响应状态等

参考文章

文加图, 理解Http请求与响应

HTTP 请求和响应过程


TCP_IP

Web 浏览器与 Web 服务器之间完成的 7 个步骤

1.建立 TCP 连接

HTTP 工作开始之前, Web 浏览器首先要通过网络与 Web 服务器建立连接, 该连接是通过 TCP 协议来完成的, 该协议与 IP 协议共同构建 Internet, 即著名的 TCP/IP 协议族, 因此 Internet 又被称作是TCP/IP 网络.

HTTP 是比 TCP 更高层次的应用层协议, 根据规则, 只有低层协议建立之后才能进行更高层协议的连接, 因此, 首先要建立 TCP 连接。

2.Web 浏览器向 Web 服务器发送请求命令

一旦建立了 TCP 连接,Web 浏览器就会向 Web 服务器发送请求命令 。

3.Web 浏览器发送请求头信息

浏览器发送其请求命令之后,还要以头信息的形式向 Web 服务器发送一些别的信息,这些信息用来描述浏览器自己。之后浏览器发送一空白行来通知服务器,表示它已经结束了该头信息的发送。若是 post 请求,还会在发送完请求头信息之后发送请求体。

4.Web 服务器应答

客户端向服务器发出请求后, 服务器会向客户端作出应答。应答的第一部分是协议的版本号和应答状态码 如HTTP/1.1 200 OK

5.Web 服务器发送应答头信息

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。最后以一个空白行来表示头信息发送到此结束。

6.Web 服务器向浏览器发送数据

Web 服务器向浏览器发送头信息后,它就以 Content-Type 应答头信息所描述的格式发送用户所请求的实际数据。

7.Web服务器关闭TCP连接

一般情况下,一旦 Web 服务器向浏览器发送了请求数据,它就要关闭 TCP 连接。如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive,TCP 连接在发送后将仍然保持打开状态。于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

HTTP 请求信息


这里写图片描述

上图是通过 Charles 抓包工具的一个截图,可以清楚看出 HTTP 请求的整个过程。关于这个工具的使用可以查阅这篇文章 Mac版抓包工具Charles使用

HTTP 请求信息由 3 部分组成:

  1. 请求方法(GET/POST)、URI、协议/版本

  2. 请求头(Request Header)

  3. 请求正文

请求方法

请求方法内容
GET请求获取由 Request-URI 所标识的资源
POSTRequest-URI 所标识的资源后附加新的数据
HEAD请求获取由 Request-URI 所标识的资源的响应消息报头
OPTIONS请求查询服务器的性能,或查询与资源相关的选项和需求
PUT请求服务器存储一个资源,并用 Request-URI 作为其标识
DELETE请求服务器删除由 Request-URI 所标识的资源
TRACE请求服务器回送收到的请求信息,主要用于测试或诊断

在 Internet 应用中,最常用的方法是 GET 和 POST。

请求头

请求头内容
Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。
Accept-Encoding浏览器能够进行解码的数据编码方式,比如 gzip。Servlet 能够向支持 gzip 的浏览器返回经 gzip 编码的 HTML 页面。许多情形下这可以减少 5 到 10 倍的下载时间
Connection表示是否需要持久连接。如果 Servlet 看到这里的值为 Keep- Alive,或者看到请求使用的是 HTTP1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个 Content-Length 头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小
User-Agent浏览器类型,如果 Servlet 返回的内容与浏览器类型有关则该值非常有用
Content-Length表示请求消息正文的长度
Cookie这是最重要的请求头信息之一

常见的MIME类型

  • text/html : HTML 格式
  • text/plain :纯文本格式
  • text/xml : XML 格式
  • image/gif :gif 图片格式
  • image/jpeg :jpg 图片格式
  • image/png:png 图片格式

以 application 开头的媒体格式类型

  • application/xhtml+xml :XHTML 格式
  • application/xml : XML 数据格式
  • application/atom+xml :Atom XML 聚合格式
  • application/json : JSON 数据格式
  • application/pdf :PDF 格式
  • application/msword : Word 文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded<form encType=””>中默认的 encType,form 表单数据被编码为 key/value 格式发送到服务器(表单默认的提交数据的格式)

另外一种常见的媒体格式是上传文件之时使用的:

  • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式。

请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。

HTTP 响应格式

HTTP 响应与 HTTP 请求相似,HTTP 响应也由 3 个部分构成。

  1. 状态行

  2. 响应头(Response Header)

  3. 响应正文

状态行

HTTP/1.1 200 OK,由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。

  • 状态代码由 3 位数字组成,表示请求是否被理解或被满足。

  • 状态描述给出了关于状态代码的简短的文字描述。

状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。第一个数字有五种可能的取值:

  • 1xx: 指示信息,表示请求已接收,继续处理。

  • 2xx: 成功,表示请求已经被成功接收、理解、接受。

  • 3xx: 重定向,要完成请求必须进行更进一步的操作。

  • 4xx: 客户端错误,请求有语法错误或请求无法实现。

  • 5xx: 服务器端错误,服务器未能实现合法的请求。

状态代码状态描述说明
200OK客户端请求成功
400Bad Request由于客户端请求有语法错误,不能被服务器所理解
401Unauthonzed请求未经授权。这个状态代码必须和 WWW-Authenticate 报头域一起使用
403Forbidden服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
404Not Found请求的资源不存在,例如,输入了错误的URL
500Internal Server Error服务器发生不可预期的错误,导致无法完成客户端的请求
503Service Unavailable服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常

响应头

响应头可能包括:

Location

Location 响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回 Location 响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源。当我们在 JSP 中使用重定向语句的时候,服务器端向客户端发回的响应报头中,就会有 Location 响应报头域。

Content-Language

Content-Language实体报头域描述了资源所用的自然语言。Content-Language 允许用户遵照自身的首选语言来识别和区分实体。如果没有指定 Content-Language 报头域,那么实体内容将提供给所有语言的阅读者。

Content-Length

Content-Length 实体报头域用于指明正文的长度,以字节方式存储的十进制数字来表示,也就是一个数字字符占一个字节,用其对应的 ASCII 码存储传输。要注意的是:这个长度仅仅是表示实体正文的长度,没有包括实体报头的长度。

Content-Type

Content-Type 实体报头域用于指明发送给接收者的实体正文的媒体类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值