HTTP概述
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
Web客户端和服务器
Web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP协议,因此经常被称为HTTP服务器。这些HTTP服务器存储了因特网中的数据,如果HTTP客户端发出请求的化,它们会提供数据。客户端向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据。浏览一个页面时,浏览器会向服务器发送一条HTTP请求,服务器会去根据寻找资源,如果成功,就将对象,对象类型,对象长度以及其它一些信息放在HTTP响应中发送给客户端,客户端根据响应展示页面。

HTTP报文格式
HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求或来自服务器的响应。它们由三部分组成:对报文进行描述的起始行(start line),包含属性的首部(header,也称为请求头),可选的包含数据的主体(body)部分。
所有的HTTP报文都可分为两类:请求报文和响应报文,请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。请求报文和响应报文的基本报文结构相同。

起始行
请求行
请求行包含一个方法和一个请求URL,这个方法描述了服务器应该执行的操作,请求URL描述了要对哪个资源执行这个方法。请求行中还包含了HTTP的版本。
响应行
响应行中包含了响应报文使用的HTTP版本,数字状态码,以及描述操作状态的文本形式的原因短语。
首部
首部字段向请求和响应报文中添加一些附加信息。本质上说,它们只是一些名/值对的列表。如: Content-length : 19 Content-Type : image/gif
首部分类
通用首部:既可以出现在请求报文中,也可以出现在响应报文中
请求首部:提供更多有关请求的信息
响应首部:提供更多有关响应的信息
实体首部:描述主体长度和内容
每个HTTP首部都有一个简单的语法:名字后面跟着冒号(:)

主体部分
HTTP 报文的第三部分是可选的实体主体部分。实体的主体是HTTP报文的负荷。就是HTTP要传输的内容。HTTP报文可以承载很多类型的数字数据:图片,视频,HTML文档等。
HTTP请求方法
GET请求
GET是最常用的方法,通常用于请求服务器发送某个资源。GET请求浏览器只是从服务器拿到某个资源并在浏览器展示,并不对服务器的资源进行修改。

POST请求
POST方法起初是用来向服务器输入数据 的。实际上,通常会用它来支持HTML的表单(在HTML文件中的form标签中,设置method=post).表单填好的数据通常会被送给服务器,然后由服务器做一些处理。

PUT请求
与GET请求从服务器读取文档相反,PUT请求会向服务器写入文档。
DELETE请求
DELETE方法所做的事情就是请服务器删除请求URL所指定的资源。
HTTP响应状态码
状态码为客户端提供了一种理解事务处理结果的便捷方式。
状体码被分为五大类,下面将一一介绍
100~199 信息性状态码
| 消息 | 描述 |
|---|---|
| 100 Continue | 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。 |
| 101 Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 |
200~299 成功状态码
| 消息 | 描述 |
|---|---|
| 200 OK | 请求成功,实体的主体部分包含了所请求的资源 |
| 201 Created | 用于创建服务器对象的请求(PUT) |
| 202 Accepted | 请求已被接受,但服务器还未对其执行任何动作,不能保证服务器会完成这个请求 |
| 203 Non-authoritative Information | 实体首部包含的信息不是来自源端服务器,而是来自资源的一份副本 |
| 204 No Content | 响应报文中包含若干首部和一个状态行,但没有实体的主体部分。主要用于浏览器不转为显示新文档的情况下,对其进行更新(比如刷新一个表单页面) |
| 205 Reset Content | 另一个主要同于浏览器的代码。负责告知浏览器清楚当前页面中的所有HTML表单元素 |
| 206 Partial Content | 成功执行了一个部分或Range(范围)请求。客户端可以通过一些特殊的首部来获取部分或某个范围内的文档,这个状态码表明范围请求成功了。 |
300~399 重定向状态码
重定向状态码要么告知客户端使用替代位置来访问他们感兴趣的资源,要么就提供一个替代的响应而不是资源的内容。这样,浏览器就可以在不打扰使用者的情况下,透明的转入到新的位置了。
| 300 Multiple Choices | 被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。 |
|---|---|
| 301 Moved Permanently | 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。 |
| 302 Move Temporarily | 请求的资源临时从不同的 URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。 |
| 303 See Other | 对应当前请求的响应可以在另一个 URL 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。这个新的 URI 不是原始资源的替代引用。同时,303响应禁止被缓存。当然,第二个请求(重定向)可能被缓存。 |
| 304 Not Modified | 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。 |
| 305 Use Proxy | 被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。 |
| 307 Temporary Redirect | 请求的资源临时从不同的URI 响应请求。 |
400~499 请求错误状态码
| 401 Unauthorized | 当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。 |
|---|---|
| 403 Forbidden | 服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交 |
| 404 Not Found | 请求失败,请求所希望得到的资源未被在服务器上发现。 |
| 405 Method Not Allowed | 请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。 |
500~599 服务器错误
| 500 Internal Server Error | 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。 |
|---|---|
| 502 Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 |
| 505 HTTP Version Not Supported | 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本。这暗示着服务器不能或不愿使用与客户端相同的版本。响应中应当包含一个描述了为何版本不被支持以及服务器支持哪些协议的实体。 |
| 509 Bandwidth Limit Exceeded | 服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。 |
评论区 1