HTTP学习笔记1_基本常识

零.额外的常识

OSI(Open System Internetwork)参考模型:

  1. 应用层

    给应用程序提供网络通信接口

  2. 表示层

  3. 会话层

  4. 传输层

    数据传输单元是报文

  5. 网络层

    数据传输单元是分组

  6. 数据链路层

    数据传输单元是

  7. 物理层

    数据传输单元是比特bit

OSI7层是用来研究的理论模型,实际应用起来太繁琐,所以有了TCP/IP参考模型:

P.S.此处的TCP/IP指协议体系,或者说是协议族,包含各种网络协议,如SNMP、ICMP、UDP、DNS等等

  1. 应用层

    如HTTP、FTP、DNS

  2. 传输层

    如TCP、UDP

  3. 网络层

    如IP

  4. 数据链路层

HTTP是应用层协议,内部是传输层的TCP和网络层的IP,所以HTTP也需要三次握手、四次挥手

所以存在建立/释放连接的消耗,作为性能优化HTTP/1.1版本默认都是持久连接,而HTTP/1.0并没有

此外,有必要简单区分一些概念:

  • 代理

    一种有转发功能的应用程序

  • 网关

    转发其它服务器通信数据的服务器

  • 隧道

    能够保持Client与Server之间的通信连接的应用程序

  • 隧道

一.URI与URL

  • URI(Uniform Resource Identifier):统一资源标识符,用来标识特定互联网资源的字符串

  • URL(Uniform Resource Locator):统一资源定位符,用来标识特定互联网资源的地点的字符串

    URL中必不可少的是模式(Scheme)、主机名(Host)和资源路径(URL Path)

所以URL是URI的子集,或者说URL是URI的一部分

二.HTTP方法

  • GET:获取资源

    1.0/1.1支持,常用

  • POST:传输实体主体

    1.0/1.1支持,常用

  • PUT:传输文件

    1.0/1.1支持,一般网站不使用该方法,因为PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题

  • HEAD:获取报文首部

    1.0/1.1支持,常用

  • DELETE:删除文件

    1.0/1.1支持,存在与PUT方法相同的问题

  • OPTIONS:询问支持的方法

    1.1支持

  • TRACE:追踪路径

    1.1支持,配合Max-Forward首部字段检查路径

  • CONNECT:要求用隧道协议连接代理

    1.1支持,配合SSL(Secure Sockets Layer安全套接层)、TLS(Transport Layer Security传输层安全)实现用隧道进行TCP通信

  • (LINK):建立和资源之间的联系

    1.0支持,已被1.1废弃

  • (UNLINK):断开连接关系

    1.0支持,已被1.1废弃

三.HTTP状态码

  • 1XX:Informational(信息性状态码)

    接收的请求正在处理

    • 101:Switching Protocol,切换协议,配合Upgrade首部字段请求切换协议,不是很常见
  • 2XX:Success(成功状态码)

    请求正常处理完毕

    • 200:OK,请求正常处理

    • 204:No Content,请求处理成功但没有资源可返回(响应体为空)

    • 206:Partial Content,请求部分内容,响应头中的Content-Range表明范围

  • 3XX:Redirection(重定向状态码)

    需要进行附加操作以完成请求

    • 301:Moved Permanently,永久性重定向,浏览器应该自动更新书签

    • 302:Found,临时性重定向,不更新书签

    • 303:See Other,类似于302,但要求用GET方法访问新URL

      注意:规范要求是遇到301、302不改变请求方法(本来是POST就接着用POST),但事实标准是几乎所有浏览器遇到301、302、303都会改用GET方法,这与规范不符

    • 304:Not Modified,找到了资源,但不满足请求条件(If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since)

      注意:虽然304属于3XX,但是和重定向没关系

    • 307:Temporary Redirection,临时重定向,与302意义一样

      为了纠正事实标准推出的状态码,希望严格遵守302不要改变方法,结果现在浏览器并不一定会这么做,标准再次失败

  • 4XX:Client Error(客户端错误状态码)

    服务器无法处理请求

    • 400:Bad Request,请求报文存在语法错误

    • 401:Unauthorized,表示需要认证(BASIC认证或者DIGEST认证)或者认证失败

    • 403:Forbidden,对指定资源的访问请求被拒绝

    • 404:Not Found,服务器无法找到请求的资源,可以代替不想说明理由的403响应

    • 405:Method Not Allowed,方法不支持,不是很常见

    • 412:Precondition Failed,前提失败,不是很常见

    • 417:Expectation Failed,期望失败,不是很常见

  • 5XX:Server Error(服务器错误状态码)

    服务器处理请求出错

    • 500:Internal Server Error,服务器在执行请求时发生了错误

    • 503:Service Unavailable,服务器超负载或者正在维护

四.HTTP报文首部

HTTP报文首部 = 报文首部 + 空行(CR+LF) + 报文主体

             = 起始行(请求行/状态行) + 首部 + 空行 + 报文主体

             = 起始行 + 请求/响应首部字段 + 通用首部字段 + 实体首部字段 + 空行 + 报文主体

P.S.不要小看这个空行(CR+LF),HTTP首部注入攻击的存在就是因为有这个空行

1.起始行

起始行分为请求行和状态行(分别对应HTTP请求报文和响应报文):

  • 请求行:说明请求使用的方法、URI和HTTP版本

  • 状态行:说明返回响应的HTTP版本和状态码

2.首部字段

请求首部字段
首部字段名说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言(自然语言)
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与If-Match相反)
If-Range 资源未更新时发送实体Byte的范围请求
If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
*Referer* Web认证信息
TE 传输编码的优先级
User-Agent HTTP客户端程序的信息
响应首部字段
首部字段名说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Location 另客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息
通用首部字段
首部字段名说明
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其它协议
Via 代理服务器的相关信息
Warning 错误通知
实体首部字段
首部字段名说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 代替对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间

P.S.其它首部字段以及更详细的首部字段信息请查看博客园:HTTP报文

参考资料:

  • 《图解HTTP》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code