HTTP协议


HTTP简介

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,用于浏览器与万维网(World Wide Web)服务器之间进行超文本传送的协议。

HTTP是一个使用TCP作为传输层协议。


HTTP工作原理

HTTP用于C-S(客户端-服务器)架构。浏览器作为客户端向Web服务器发送请求,Web服务器收到请求后返回响应给浏览器。

常用的Web服务器有:Apache、ISS等。

HTTP的默认端口号为80。

HTTP协议的三个特点:

  1. 无连接:“无连接并不是真的无连接”,而是每次连接只处理一个请求。请求时建立连接,请求完释放连接 ,服务器处理完客户端的请求,并收到应答后,即断开连接。这种方式可以节省传输时间。当然,HTTP也提供了Keep-Alive功能来避免重复建立连接。
  2. 允许传输任意类型的数据对象:数据传输的格式由MIME指定。
  3. 无状态:无状态是指HTTP对事物处理没有记忆能力,服务器不保存客户端的状态。缺少状态即意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。Cookie技术与Session技术用于保持HTTP连接状态。

HTTP协议的通信流程:

参考资料:Cookie与SessionHTTP协议


HTTP消息结构

请求消息

请求消息自客户端发往服务器,请求消息由以下四个部分构成:

  • 请求行(request line)
  • 请求头部(header)
  • 空行
  • 请求数据

响应消息

HTTP响应由四个部分构成:

  • 状态行
  • 消息报头(header)
  • 空行
  • 响应正文

实例

请求报文:

GET /hello.txt HTTP/1.1User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Host: www.example.com
Accept-Language: en, mi

响应报文:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: ApacheLast-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"Accept-Ranges: bytes
Content-Length: 51Vary: Accept-EncodingContent-Type: text/plain

HTTP请求方法

根据HTTP标准,HTTP提供了多种请求方法,
HTTP1.0定义了三种请求方法:GET, POST和HEAD方法。
HTTP1.1新增了六种请求方法:OPTION, PUT, PATCH, DELETE, TRACE和CONNECT方法。

方法 描述
GET 请求指定页面信息,并返回主体
POST 向指定资源提交数据处理请求。数据被包含在请求体中。POST请求可能导致新资源的建立或已有资源的修改
HEAD 类似于GET请求,不返回响应主体,只用于获取报头(header)
PUT 用从客户端向服务器传送的数据取代指定的文档内容
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
DELETE 请求服务器删除指定的页面
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断
PATCH 对PUT方法的补充,用来对已知资源进行局部更新

后来又新增了6种请求方法:

方法 描述
MOVE 请求服务器将指定的页面移至另一个网络地址
COPY 请求服务器将指定的页面拷贝至另一个网络地址
LINK 请求服务器建立链接关系
UNLINK 断开链接关系
WRAPPED 允许客户端发送经过封装的请求
Extension-method 在不改动协议的前提下,可增加另外的方法

参考资料:GET方法与POST方法的区别

HTTP 响应头信息

下面这个表格是介绍了HTTP的一些响应头信息:

应答头 说明
Allow 服务器支持的请求方法(GET, POST...)
Content-Encode 文档的编码方式。只有在解码后才可以得到Content-Type指定的类型内容
Content-Length 表示内容长度。只有在浏览器使用持久HTTP连接时才需要该数据
Content-Type 表示后面的文档属于什么MIMEl类型
Date 当前的GMT时间
Expires 应该在什么时候认为文档已过期,从而不再缓存它
Last-Modify 上次修改的时间
Location 表明了客户应该到哪里取提取文档
Refresh 表示浏览器应该在多久时间后刷新文档,以秒计
Server 服务器的名字
WWW-Authenticate 客户应该在Authenticate头中提取什么类型的授权信息

HTTP状态码

1xx(临时响应)

返回码 功能 说明
100 继续 表示服务器已收到请求的第一部分,正在等待其余部分
101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换

2xx(成功)

返回码 功能 说明
200 成功 服务器已成功处理了请求。通常,这表示服务器提供了请求网页
201 已创建 请求成功并且服务器创建了新的资源
202 已接受 服务器已接受请求,但尚未处理
203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一件事
204 无内容 服务器成功处理了请求,但没有返回任何内容
205 重置内容 服务器成功处理了请求,且没有返回任何内容(与204有所区别)
206 部分内容 服务器已成功处理了部分GET请求

3xx(重定向)

返回码 功能 说明
300 多种选择 针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择
301 永久移动 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 临时移动 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 查看其他位置 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 未修改 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 使用代理 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307 临时重定向 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx(请求错误)

返回码 功能 说明
400 错误请求 服务器不理解请求的语法
401 未授权 请求要求身份验证。对于需要登陆的网页,服务器可能返回此响应
403 禁止 服务器拒绝请求
404 未找到 服务器找不到请求的网页
405 方法禁用 禁用请求中指定的方法
406 无法使用请求的内容特性响应请求的网页
407 需要代理授权 此状态代码与401(未授权)类似,但指定请求者应当授权使用代理
408 请求超时 服务器等候请求时发生超时
409 冲突 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的值
410 已删除 如果请求的资源已永久删除,服务器就会返回此响应
411 需要有效长度 服务器不接受不含有效内容长度标头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的某个前提条件
413 请求实体过大 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力
414 请求URI过程 请求的URI过长(通常位网址),服务器无法处理
415 不支持的媒体类型 请求的格式不受请求页面的支持
416 请求范围不符合要求 如果页面无法提供请求的范围,服务器会返回此状态代码
417 未满足期望值 服务器未满足“期望”请求标头字段的要求

5xx(服务器错误)

返回码 功能 说明
500 服务器内部错误 服务器遇到错误
501 尚未实施 服务器不具备完成请求的功能。
502 错误网关 服务器作为网关代理,从上游服务器收到无效响应
503 服务不可用 服务器目前无法使用
504 网关超时 服务器作为网关或代理,但是没有及时从上游服务器收到请求
505 HTTP版本不受支持 服务器不支持请求中所用的HTTP协议版本
CS专业在读,热爱编程。
专业之外,喜欢阅读,尤爱哲学、金庸、马尔克斯。
原文地址:https://www.cnblogs.com/jmhwsrr/p/14096095.html