【计算机网络】HTTP协议详解(四):HTTP报文结构、请求方法、状态码

HTTP报文结构、请求方法、状态码



HTTP报文结构

http报文分为请求报文、响应报文,都主要由三部分组成:
在这里插入图片描述

一、HTTP请求报文

1.组成的各部分

请求行:分为三个部分,请求方法 + 请求地址 + http协议版本
请求头:传递一些额外的重要附加信息,以键值对key/value的形式组成,每行一对
请求体:为请求数据,以字符串拼接的形式,可选:如GET请求时,可以直接在URL后拼接,没有请求体

如图POST请求报文示例:
在这里插入图片描述

2.请求方法

HTTP/1.1中几种常用方法:
(1)GET:http默认的请求方法,用来获取URI/URL指定的资源,将请求参数追加在url后面,不安全,url长度限制get提交请求数据的大小
(2)POST:功能与GET类似,但主要目的不是获取响应主体的内容,一般用来传输实体的主体,提交表单数据,请求参数写在请求体(RequestBody)处,较安全,提交的数据大小没有限制,克服了GET的请求数据无法保密、数据量小的缺点
(3)PUT:与POST类似,也是提交表主体内容,最主要的区别为PUT是幂等的,POST不是幂等的,(幂等:不管进行了多少次操作,都实现了相同的结果)创建对象时通常用POST,更新对象时通常用PUT,但是HTTP/1.1中PUT方法不带有验证机制,存在安全隐患,所以一般还用POST(在后端逻辑处理更新),更多时候将PUT方法用作传输资源
(4)HEAD:与GET几乎相同,主要区别是HEAD方法只是请求消息的报文头而不是完整的内容,所以通常用来测试超链接的有效性、能否访问
(5)DELETE:请求服务端删除指定资源,但是HTTP/1.1中DELETE方法中没有验证机制,所以一般也不使用DELETE
(6)OPTIONS:用来查询针对请求URI/URL指定的资源支持的方法,主要在不知道对方支持什么方法时询问一下,会在返回报文的Allow字段中回答
(7)TRACE:回显服务器收到的请求,主要用于测试或诊断
(8)CONNECT:开启一个客户端与所请求资源之间的双向沟通的通道,用来创建隧道,一般不会用,只在使用代理服务器访问互联网的时候,向代理服务器发送connect请求,代理服务器与目标访问服务器握手并连接起来,然后告诉客户端连接成功,之后代理服务器只负责传递客户端、服务端双方的数据包,并不能读取数据具体内容

3.请求头内容

几种常用的请求头字段(只能用在请求头中):

首部字段名说明
Accept浏览器端(客户端)可以接受的媒体类型
Accept:* /* ——浏览器可以处理所有类型
Accept:text/html——html文档

若要可控制优先级,则使用q=0~1(可精确到小数点后3位)来表示权重值
Accept-Charset接收的字符集
Accept-Encoding浏览器声明自己接收的编码方法,通常指压缩方法,是否支持压缩,什么压缩方法(gzip,deflate)
Accept-Language接收的语言(自然语言)
若要可控制优先级,则使用q=0~1(可精确到小数点后3位)来表示权重值
AuthorizationWeb认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在服务器,主机号+端口号,通常从HTTP URL中提取出来
If-Match比较实体标记(ETag)
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记(与If-Match相反)
If-Range资源未更新时发送实体Byte的范围请求
If-Unmodified-Since比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards最大传输逐跳数
Range实体的字节范围请求
Referer对请求中URI的原始获取方,告诉服务器我是从哪个页面链接过来的
TE传输编码的优先级
User-Agent告诉服务端客户端程序的信息如:使用的操作系统、浏览器的版本、名称,一般服务器通过这个来判断浏览器类型,从而做兼容设计

二、通用报文头、实体头

1.通用报文头

首部字段名说明
Cache-Control控制缓存的行为
Connection逐跳首部、连接的管理
Connection:keep-alive——当一个网页打开后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个网页,可以继续使用这一个通道
Connection:close——代表一个Request后TCP连接就会关闭,再次请求就要重新建立TCP连接
Date创建报文的日期时间
Pragrma报文指令
Trailer报文末端的首部一览
Transfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器的相关信息
Warning错误通知

2.实体报文头

首部字段名说明
Allow资源支持的HTTP方法
Content-Encoding实体主体适用的编码方式
Content-Language实体主体的自然语言
Content-Length实体主体的大小(单位:字节Byte)
Content-Location替代对应资源的URI/URL
Content-MD5实体主体的报文摘要
Content-Range实体主体的位置范围
Content-Type实体主体的媒体类型
text/html:HTML格式
text/plain:纯文本格式
text/xml:XML格式
image/gif:GIF图片格式
image/jpeg:JPG图片格式
image/png:PNG图片格式
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:表单提交
Expires实体主体过期的日期时间
Last-Modified资源的最后修改日期时间

三、HTTP响应报文

1.组成的各部分

响应行:分为两个部分,报文协议及版本 + 状态码及状态描述
响应头:与请求头类似,传递一些额外的重要附加信息,一般包含服务器信息、响应数据类型,产生时间等等
响应体:响应内容的主体,真正请求要的干货

如图响应报文示例:
在这里插入图片描述

2.状态码

HTTP协议用3位数字表示网页服务器超文本传输协议响应的状态
用啊第一位数字表示5种不同的状态,后两位表示具体信息

分类含义
1XX表示消息,这一类型的状态码,代表请求已被接受,需继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束
2XX表示成功,这一类的状态码,代表请求已成功被服务器接收、理解、接受
3XX表示重定向,这类状态码代表需要客户端采取进一步的操作才能完成请求。通常这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明
4XX表示请求错误,这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体。以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容
5XX表示服务器错误,这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体

几种常见的HTTP状态码

状态码英文名称描述
200OK请求已成功,请求所希望的响应头或数据体将随此响应返回
202Accepted已接受请求,但未处理完成
206Partial Content部分内容,服务器成功处理了部分GET请求,如:断点续传
状态码英文名称描述
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
403Forbidden服务器理解客户端的请求,但是拒绝执行
404Not Found服务器无法根据客户端的请求找到资源
状态码英文名称描述
500Internal Server Error服务器内部错误,无法完成请求
502Bad Gateway充当网关或代理的服务器从远端服务器接收到了一个无效的请求
504Bad Gateway Timeout充当网关或代理的服务器从远端服务器未及时收到响应

3.响应头内容

首部字段名说明
Accept-Ranges是否接受字节范围请求
Age推算资源创建经过时间
ETag资源的匹配信息
Location令客户端重定向指定URI/URL
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After对再次发起请求的时机要求
ServerHTTP服务器的安装信息
Vary代理服务器缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴陵FL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值