HTTP 基本概念 结构 报文 首部字段 常见状态码

HTTP 基本概念 结构 报文 首部字段

HTTP概念

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。

HTTP是无状态协议,自身不对访问请求的通讯状态进行保存,不做持久化处理,保存状态可使用Cookie

HTTP通讯过程

sequenceDiagram participant A as HTTP participant B as HTTP par Note right of A: 1989 HTTP诞生 A->>B: 最初设想:借助多文档之间相互关联形成的超文体( HyperText),连接可相互参阅的WWW ( 万维网) and Note right of A: 1990 HTTP/0.9 A->>B: HTTP于1990年问世 and Note right of A: 1996 HTTP/1.0 A->>B: HTTP正式作为标准被公布 and Note right of A: 1990 HTTP/1.1 A->>B: 1997年1月公布的HTTP/1.1是目前主流的HTTP协议版本。 end

HTTP协议结构

sequenceDiagram participant A as 客户端 participant B as 服务器 par 发送请求 A->>B:GET / HTTP/1.1 <br>Host: example.com and 发送响应 B->>A:HTTP/1.1 200 OK <br> Date: Tue, 10 Jul 2018 <br>06:50:15 GMT <br>Content-L ength: 1000 <br>Content-Type: text/html <br><html> end

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文,请求端的HTTP报文叫做请求报文,响应
端的叫做响应报文。HTTP报文是由多行( CR+LF作换行符)数据构成的字符串文本。

sequenceDiagram participant A as HTTP报文 participant B as HTTP报文 par 报文首部 A-->>B:服务器端或客户端需处理的请求或响应的内容及属性 alt 请求报文首部/响应报文首部 A-->>B:请求行/状态行<br>请求首部字段/响应首部字段<br>通用首部字段<br>实体首部字段<br>其他 end and CR+LF A-->>B:CR(Carrige Return,回车符)和LF(Line Feed ,换行符) and [报文主体] A-->>B:应被发送的数据 end

请求报文

  • 方法 | URI |协议版本

POST /admin/login.php HTTP/1.1

  • 请求首部字段

Host: www. example .com Connection: keep-alive Content- Type: application/x-www-form-urlencoded Content-L ength:200

  • 内容实体

username= admin&password= 123456

方法
方法名 描述
GET 请求访问已被URI识别的资源
POST 传输实体的主体
PUT 传输文件
HEAD HEAD方法和GET方法样,只是不返回报文主体部分。
用于确认URI的有效性及资源更新的日期时间等
DELETE 删除文件
OPTIONS 查询针对请求URI指定的资源支持的方法
TRACE 让Web服务器端将之前的请求通信环回给客户端

响应报文

  • 协议版本 | 状态码 | 状态码的原因短语

HTTP/1.1 200 OK

  • 响应首部字段

Date: Tue, 10 Jul 2018 08:03:15 GMT
Content-L ength:200
Content- Type: text/html

  • 实体主题
……
状态码
状态码 含义
1XX 信息性状态码,接收的请求正在处理
2XX 成功状态码,请求正常处理完毕
3XX 重定向状态码,需要进行附加操作以完成请求
4XX 客户端错误状态码,服务器无法处理请求
5XX 服务器错误状态码,服务器处理请求出错
常见状态码
状态码 原因短语 含义
200 OK 表示从客户端发来的请求在服务器端被正常处理了
301 MOVED Permanently 永久性重定向,表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI
302 Found 临时性重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问
304 Not Modified 客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分
400 Bad Request 表示请求报文中存在语法错误,当错误发生时,需修改请求的内容后再次发送请求
401 Unauthorized 该状态码表示发送的请求需要有通过HTTP认证( BASIC、DIGEST认证)的认证信息。若之前已进行过1次请求,则表示用户认证失
403 Forbidden 表明对请求资源的访问被服务器拒绝了
404 Not Found 表明服务器上无法找到请求的资源
500 Internal Server Error 表明服务器端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障
503 Service Unavailable 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

首部字段

首部字段结构:首部字段名:字段值,例如, Content- Type: text/html。单个HTTP首部字段可以有多个值,例如:Keep-Alive: timeout= 15, max= 100

sequenceDiagram participant A as 首部字段 participant B as 首部字段 par 通用首部字段 A-->>B:请求报文和响应报文两方 都会使用的首部 and 请求首部字段 A-->>B:从客户端向服务器端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息 and 响应首部字段 A-->>B:从服务器端向客户端返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息 and 实体首部字段 A-->>B:针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息 end
通用首部字段
通用首部字段名 含义
Cache-Control 通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制;
Connection 控制不再转发给代理的首部字段;管理持久连接
Date 表明创建HTTP报文的日期和时间
Via 使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径。报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生, 所以必须在经过代理时附加该首部字段内容。
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其他协议
Warning 错误通知
请求首部字段
请求首部字段名 含义
Accept 通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级,可使用type/subtype这种形式, 一次指定多种媒体类型。
文本文件: text/html, text/plain, text/css, application/xhtml+ xml, application/xml
图片文件: image/jpeg, image/gif, image/png
应用程序使用的二进制文件: application/octet-stream, application/zip
Accept-Language 告知服务器用户代理能够处理的自然语言集( 指中文或英文等), 以及自然语言集的相对优先级,可一次指定多种自然语言集,按权重值q来表示相对优先级。
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
Authorization 用来告知服务器,用户代理的认证信息
Authorization: Basic dWVub3N1bjpwYXNzd29yZA==
Host 告知服务器请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一 个必须被包含在请求内的首部字段。
Referer 告知服务器请求的原始资源的URI。
Referer: http://www.example.com/index.php
User-Agent 将创建请求的浏览器和用户代理名称等信息传达给服务器。
User- Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10 _13. _2)......
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
lf-Match 比较实体标记( ETag )
lf-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与lf-Match相反)
lf-Range 资源未更新时发送实体Byte的范围请求
Range 实体的字节范围请求
Max-F orwards 最大传输逐跳数
响应首部字段
响应首部字段名 含义
Location 将响应接收方引导至某个与请求URI位置不同的资源
Server 告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息
实体首部字段
实体首部字段名 含义
Allow 通知客户端能够支持的所有HTTP方法,服务器会把所有能支持的HTTP方法写入首部字段Allow 后返回。
当服务器接收到不支持的HTTP方法时,会以状态码405 Method Not Allowed作为响应返回。Allow: GET, HEAD, POST
Content-Length 实体主体部分的大小(单位是字节)。Content- Length: 1000
Content-Type 实体主体内对象的媒体类型,字段值用type/subtype形式赋值。Content- Type: text/html; charset=UTF-8
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间
posted @ 2021-08-05 14:37  SKPrimin  阅读(82)  评论(0编辑  收藏  举报