报文大致结构:

  • 报文首部:

    • 请求行(请求报文)/状态行(响应报文)
    • 首部字段:请求和响应的各种条件和属性的各类首部;
    • 其它(Cookie)
  • 空行
  • 报文主体(不是必须)

编码提升传输速率:

  • 报文主体和实体主体的差异:通常相等,当传输中进行编码操作时,实体主体内容发生变化后会和报文主体有差异;
  • 压缩传输的内容编码:指明应用在实体内容上的编码格式,并保持实体信息原样;内容编码后的实体由客户端接受并负责解码;
  • 分割发送的分块传输编码:HTTP通信中,如果请求的编码实体资源未全部传输完,浏览器无法显示请求页面;当传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面;

发送多种数据的多部分对象集合:

  • 邮件采用了MIME(多用途英特网邮件扩展)机制,允许处理文本,图片,视频等不同类型的数据;
  • 其中会使用一种称为多部分对象集合的方法来容纳不同类型的数据;
  • 相应的,HTTP协议中也采纳了多部分对象集合,发送一份报文主体可含多类型实体;通常是在图片或文本等上传使用;

获取部分内容的范围请求:

  • 在请求过程中失败时则需要重头开始,恢复机制是指能从之前下载中断处恢复下载;
  • 要实现该功能需要指定下载的实体范围;像这样,指定范围发送的请求叫做范围请求(Range Request);
  • 执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围。针对范围请求,响应会返回状态码为 206 Partial Content 的响应报文。
  • 另外,对于多重范围的范围请求,响应会在首部字段 Content-Type 标明 multipart/byteranges 后返回响应报文。

内容协商返回最合适的内容:

  • 内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
  • 包含在请求报文中的某些首部字段就是判断的基准。
  • 内容协商技术有以下 3 种类型:
    • 服务器驱动协商,由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。
    • 客户端驱动协商,由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手动选择。
    • 透明协商,是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。

状态码告知从服务器端返回的请求结果:

  • 状态码的类别
  类别  原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX  Server Error(服务器错误状态码) 服务器处理请求出错

2XX 成功 : 表明请求被正常处理了。

  • 204 No Content:

    • 该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
    • 另外,也不允许返回任何实体的主体;一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
  • 206 Partial Content:
    • 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。
    • 响应报文中包含由 Content-Range 指定范围的实体内容。

3XX 重定向:表明浏览器需要执行某些特殊的处理以正确处理请求。

  • 301 Moved Permanently:永久性重定向。

    • 该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。
    • 如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存
    • 当指定资源路径的最后忘记添加斜杠“/”,就会产生 301 状态码。
  • 302 Found:临时性重定向。
    • 该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
    • 302 状态码代表的资源不是被永久移动,只是临时性质的;已移动的资源对应的 URI 将来还有可能发生改变。
  • 303 See Other:
    • 表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
    • 303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源;
    • 比如,当使用 POST 方法访问 CGI 程序,其执行后的处理结果是希望客户端能以 GET 方法重定向到另一个 URI 上去时,返回 303 状态码。
  • 当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。
  • 304 Not Modified: 
    • 表示客户端发送附带条件的请求 2 时,服务器端允许请求访问资源,但未满足条件的情况。
    • 304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。
  • 307 Temporary Redirect: 临时重定向。
    • 该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。
    • 307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。

 4XX 客户端错误:表明客户端是发生错误的原因所在。

  • 400 Bad Request:

    • 表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。
  • 401 Unauthorized
    • 表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示用 户认证失败。
    • 返回含有 401 的响应必须包含一个适用于被请求资源的 WWW-Authenticate 首部用以质询(challenge)用户信息。当浏览器初次接收到 401 响应,会弹出认证用的对话窗口。
  • 403 Forbidden:
    • 表明对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述;
    • 未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因。
  • 404 Not Found:
    • 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

5XX 服务器错误:表明服务器本身发生错误。

  • 500 Internal Server Error:

    • 表明服务器端在执行请求时发生了错误。也有可能是 Web 应用存在的 bug 或某些临时的故障。
  • 503 Service Unavailable:
    • 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入 RetryAfter 首部字段再返回给客户端。

HTTP基础03--HTTP报文的更多相关文章

  1. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  2. javascript基础03

    javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...

  3. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  4. day33-线程基础03

    线程基础03 6.用户线程和守护线程 用户线程:也叫工作线程,当线程的任务执行完或者通知方法结束.平时用到的普通线程均是用户线程,当在Java程序中创建一个线程,它就被称为用户线程 守护线程(Daem ...

  5. HTTP 协议基础概念和报文结构

    基础概念 1.WWW(World Wide Web,万维网)构建技术有3项: (1)把SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文 ...

  6. JavaEE基础(03):Http请求详解,握手挥手流程简介

    本文源码:GitHub·点这里 || GitEE·点这里 一.Http协议简介 1.概念说明 HTTP超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通信协议来传 ...

  7. ADO.NET基础03

    数据库和VS的连接,实现数据的同步,让用户的一切信息都可以在数据库中留下记录. ADO.NET基础      它是连接所有数据库的一种特殊的技术,提供对不同的数据库统一操作接口. 在VS中也可以添加数 ...

  8. php基础03:数据类型

    <?php // day01:数据类型 //01.字符串 $x = "hello world"; echo $x; echo "<br>"; ...

  9. MYSQL基础03(日期函数)

    工作中对日期的处理是经常遇到的,需求可能多种多样,因此重点介绍. 1.获取当前日期 select NOW() -- 结果:2015-10-28 22:41:11 ),NOW() -- 结果 2015- ...

  10. CSS基础(03)

    1.简单了解浏览器是如何渲染页面和加载页面            浏览器就是通过HTTP 协议与服务器进行通信,取到数据之后进行渲染的过程,如图:    这图是园友的看着挺符合我思路就直接拿来用了,从 ...

随机推荐

  1. Unity3D研究院之Jenkins的使用(七十八)

    长夜漫漫无心睡眠,来一篇嘿嘿.我相信如果已经用Shell脚本完成IOS和Android打包的朋友一定需要Jenkins 怎么才能让策划打包ipa和apk?怎么才能彻底省去程序的时间,只要在同一局域网内 ...

  2. Lucene4.3开发之分词器总结

    Lucene4.3开发之分词器总结 http://java.chinaitlab.com/tools/940011.html

  3. 怎样从命令行进入mac桌面

    www.iwangzheng.com 刚买的mac电脑,想在终端进入桌面,可以用下面的方式 点击桌面右上方的放大镜搜索到Terminal并打开,输入 $ cd /Users 这里会显示多个用户,进入自 ...

  4. maven常见问题

    maven常见错误: 一..在Eclipse导入已存在工作空间的项目,出现 情况1: Scanning errors (1):1 Could not read pom.xml 就是pom.xml出现了 ...

  5. 暑假热身 D. 条形码设计

    校ACM队准备筹划向学校批请一个专用机房.但是为了防止它变成公用机房,FL建议采用刷卡进入的办法,她设计了一种条形码,每人都对应一个.这种大小为2*n的条形码由以下三种元素构成:1*2.2*1.2*2 ...

  6. [ruby on rails] 跟我学之(8)修改数据

    修改views 修改index视图(app/views/posts/index.html.erb),添加编辑链接,如下: <h1>Our blogs</h1> <% @p ...

  7. ubuntu12 apache2部署多个网站的方法

    由于对apache2的配置不是很精通.吃了不少瘪. 这里总结下,希望对碰到同样问题的人带来帮助: 假设需求是有两个站点,site1和site2.其端口分别为80和8080. 1. 配置监听端口 修改 ...

  8. 解决Centos关闭You have new mail in /var/spool/mail/root提示

    昨天搬到阿里云了. 装的系统是Centos 6.3的加固版 今天查看内存的时候 出现一天奇怪的提示 You have new mail in /var/spool/mail/root 有的时候每敲一下 ...

  9. 【Hibernate】Hibernate系列7之二级缓存

    二级缓存 7.1.概述 7.2.配置方法

  10. Power of Two & Power of Three & Power of Four

     Check Power of 2 Using O(1) time to check whether an integer n is a power of 2. Example For n=4, re ...