今日学习了HTTP报文的相关基础知识,做出以下简单的记录:
1.1.报文流:
报文在客户端、服务器和代理之间流动,术语“流入”“流出”用来描述事务处理的方向,报文流入源端服务器,工作完成后流回Agent代理中。此外,报文永远都是向下游流动的。
1.2 报文的组成部分
- 对报文进行描述的起始行
- 包含属性的首部
- 可选的,包含数据的主体
1.2.1 报文的语法:所有的HTTP报文都可以分为两类:请求报文(向web服务器请求一个动作)和响应报文(将请求的结果返回给客户端)
#请求报文的格式:
#请求行 <method> <request-URL> <version> #说明要做些什么,此处的version告示服务器客户端使用哪种HTTP
<headers>
<entity-body>
#相应报文的格式:
# 响应行 <version> <status> <reason-phrase>
<headers>
<entity-body>
#注释:
<method>:指定客户端希望服务器对资源执行的动作,如get/head/post
<request-URL>所请求资源的URL
<version>报文所用的HTTP版本,如HTTP/1.1
<status>状态码
<reason-phrase>原因短语
<headers>首部,以一个空行结束。
<entity-body>主体
#常见的几种HTTP方法:
方法 描述 是否含有主体
GET 从服务器获取一份文档 否
POST 向服务器发送需要处理的数据 是
PUT 将请求的主体部分存储在服务器上 是
DELETE 从服务器上删除一份文档 否
HEAD 只从服务器获取首部 否
#状态吗区间判断:
100~199 信息提示
200~299 成功
300~399 重定向
400~499 客户端错误
500~599 服务器错误
#常见的状态码:
200 OK 成功
401 Unaothorized(未授权) 需要输入用户名和密码
404 Not Found(找不到) 服务器无法找到请求URL对应的资源
一下网站列出了一些常见的状态码及解决方法:
1.2.2 首部
HTTP首部字段请请求和相应报文添加了一些附加信息,本质上来说他们是一些名/值对的列表。
首部分类:
- 通用首部:
既可以出现在请求报文中,也可以出现在相应报文中。提供了与报文相关的最基本的信息。如Date、Connection、MIME-Version(给出了发送端使用的MIME版本)、 - 请求首部:提供更多有关请求首部的内容。
1.Accept首部:为客户端提供了一种将其喜好和能力告知服务器的方法
Accept 告诉服务器能够发送那种媒体类型
Accept-Charset 告诉服务器能够发送那些字符集
Accept-Language 告诉服务器能够发送哪些语言
2.条件请求首部:为请求加上某些限制
If-Match 获得与当前文档相匹配的文档
If-None-Match 获得与当前文档不匹配的文档
- 响应首部:提供更多有关响应首部的内容。
- 实体首部:描述主体的长度和内容,或者资源本身。
- 拓展首部:规范中没有定义的新首部。
1.2.3 主体部分
实体的主体部分是HTTP报文的负荷,就是HTTP要传输的内容。
1.2.4 安全方法
GET方法和HEAD方法都被认为是安全的。使用安全方法的母的就是当使用可能引发某一动作的不安全方法时,允许HTTP应用程序开发者通知用户。
1.2.4.1GET方法和HEAD方法都是HTTP1.1规范要求实现的。HEAD方法只返回首部,不返回实体,利于我们在不获取资源的情况下了解资源的情况。此外,必须确保HEAD方法返回的首部和GET方法返回的首部相完全相同。
1.2.4.2 PUT方法
PUT方法与GET方法相反,PUT方法会向服务器写入文档。有些系统允许用户创建Web页面,用PUT将其直接安装到Web服务器上去。一般Web服务器会要求用户在执行PUT方法之前用密码登录。
1.2.4.3 POST方法
通常用POST方法来支持HTML中的表单,表单中填好的数据通常会被发送到服务器,然后由服务器把数据发送到它要去的地方(例如一个服务器网关程序)
1.2.4.4 TRACE方法
TRACE方法允许客户端在最终将请求发送给服务器时,看看他变成了啥样!此方法主要用于诊断。
1.2.4.5 OPTIONS方法
请求服务器告知其支持的各种方法
1.2.4.6 DELETE方法
请服务器删除请求URL所指定的资源,但客户端应用程序无法保证删除操作一定会被执行。