本次分享http协议,共分为三部分,这是第二部分,主要讲解请求与响应的字段,以及状态码。

以http/1.1版本的一个完整的请求与响应作为例子

http请求信息由三部分组成

1、请求方法(GET/POST)、URI、协议/版本

2、请求头(Request Header)

3、请求正文

  eg:

    GET /form.html HTTP/1.1 (CRLF)
    Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-      powerpoint,application/msword,*/* (CRLF)
    Accept-Language:zh-cn (CRLF)
    Accept-Encoding:gzip,deflate (CRLF)
    If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
    If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
    User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
    Host:www.guet.edu.cn (CRLF)
    Connection:Keep-Alive (CRLF)
    (CRLF)

  第一行分别为  请求方法GET  URL:form.html  协议版本:HTTP/1.1

  第二行    Accept:声明可以接收哪些数据格式

  第三行    Accept-Language:声明可以支持什么语言

  第四行    Accept-Encoding:声明支持的编码格式

  第五行    If-Modified-Since:声明该文件的最后修改时间

  第六行    If-None-Match:用来判断当前请求的资源是否改变

  第七行    User-Agent:用户代理,存储一些浏览器信息以及系统信息

  第八行    Host:请求资源所在的服务器

  第八行    Connection:声明是持久连接

  CRLF     回车换行

--------------------------------------------------------------------------------------------------------------------------------------

这里是常用的请求字段解释

  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                       对请求中 URI 的原始获取方

  TE                            传输编码的优先级

  User-Agent                    HTTP 客户端程序的信息

HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:

  1、状态行

  2、响应头(Response Header)

  3、响应正文

eg:

  HTTP/1.1 200 OK   
  Server: nginx
  Date: Tue, 31 May 2016 02:09:24 GMT
  Content-Type: application/json;charset=UTF-8
  Connection: keep-alive
  Vary: Accept-Encoding
  Access-Control-Allow-Origin: *
  Access-Control-Allow-Headers: X-Requested-With,access_token,access-token,content-type,multipart/form-data,application/x-www-form- urlencoded
  Access-Control-Allow-Methods: GET,POST,OPTIONS
  Content-Length: 49

  {"resultCode":1,"resultMsg":"手机号未注册"}

  第一行:  协议版本http/1.1  状态码 200  状态描述   OK

  第二行:  告知客户端当前服务器上安装的http服务器应用程序的信息。其中包含软件应用名称,甚至版本号和安装时的启动项

  第三行:  响应时间

  第四行:  实体主体的媒体类型

  第五行:  声明长连接

  第六行:  控制缓存的管理信息

  第七行:  声明允许任何

  第八行:  声明允许任何人访问

  第九行:  设置允许访问的请求方法

  第十行:  指明正文长度

  空行:   表明响应头结束

  响应正文

----------------------------------------------------------------------------------------------------------------------------------------

下面是一些常见的响应字段

  Accept-Ranges                 是否接受字节范围请求
  Age                               推算资源创建经过时间
  ETag                              资源的匹配信息
  Location                          令客户端重定向至指定URI
  Proxy-Authenticate           代理服务器对客户端的认证信息
  Retry-After                     对再次发起请求的时机要求
  Server HTTP                     服务器的安装信息
  Vary                              代理服务器缓存的管理信息
  WWW-Authenticate            服务器对客户端的认证信息

  Allow                             资源可支持的HTTP方法
  Content-Encoding             实体主体适用的编码方式
  Content-Language            实体主体的自然语言
  Content-Length                实体主体的大小(单位:字节)
  Content-Location             替代对应资源的URI
  Content-MD5                   实体主体的报文摘要
  Content-Range                 实体主体的位置范围
  Content-Type                  实体主体的媒体类型
  Expires                           实体主体过期的日期时间
  Last-Modified                  资源的最后修改日期时间

----------------------------------------------------------------------------------------------------------------------------------

响应状态码详解

  状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
  1xx:指示信息--表示请求已接收,继续处理
  2xx:成功--表示请求已被成功接收、理解、接受
  3xx:重定向--要完成请求必须进行更进一步的操作
  4xx:客户端错误--请求有语法错误或请求无法实现
  5xx:服务器端错误--服务器未能实现合法的请求

常见的状态码详解

  100 Continue 继续。客户端应继续其请求。

  101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议

  200 OK 表示从客户端发来的请求在服务器端被正常处理了。

   204 No Content 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新

  206 Partial Content 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。

  301 Moved Permanently 永久性重定向。该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。 像下方给出的请求URI,当指定的资源路径的最后忘记添加斜杠"/",就会产生301状态码

  302 Found 临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

  303 See Other 该状态码表示由于请求对应的资源存在另外一个URI,应使用GET方法定向获取请求的资源。 303状态码和302状态码有着相同的功能,但303状态码明确表明客户端应当采用GET方法获取资源。 当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动再次发送。 301,302标准是禁止将POST方法改变成GET方法的,但实际上使用时大家都会这么做。

  304 Not Modified 该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。

  307 Temporary Redirect 临时重定向。该状态码与302 Found有着相同的含义。307会遵照浏览器标准,不会从POST变成GET。

  400 Bad Request 该状态码表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容后再次放松请求。

  401 Unauthorized 该状态码表示发送的请求需要有通过HTTP认证的认证信息,另外若之前已进行过1此请求,则表示用户认证失败。

  403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。

  404 Not Found 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

  500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。

  503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

每周分享之 二 http协议(2)的更多相关文章

  1. 每周分享之 二 http协议(1)

    本次分享http协议,共分为三部分,这是第一部分,主要讲解http的发展历程,各个版本,以及各个版本的特点. 一:http/0.9 最早版本是1991年发布的0.9版.该版本极其简单,只有一个命令GE ...

  2. 每周分享之 二 http协议(3)

    本次分享http协议,共分为三部分,这是第三部分,主要讲解一个完整的http请求都经过哪些步骤,当我们在地址栏中输入网址,到返回页面都经历了什么 1.输入网址 当我们在浏览器中输入网址的时候,浏览器就 ...

  3. 每周分享五个 PyCharm 使用技巧(二)

    这是 「PyCharm 技巧分享」系列的第二篇分享.由于上一篇文章得到了大家的一些赞同,所以今天又来给大家推荐一些我平时自己有用的小技巧,大家择需所取即可. 先声明下,并不保证对所有的人都是有帮助的, ...

  4. 关于启用 HTTPS 的一些经验分享(二)

    转载: 关于启用 HTTPS 的一些经验分享(二) 几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个 ...

  5. 每周分享五个 PyCharm 使用技巧(一)

    PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌握一些高效的使用技巧,肯定会给我们的开发效率带 ...

  6. 每周分享五个 PyCharm 使用技巧(六)

    大家好,今天我又来给大家更新 PyCharm 的使用技巧. 从今年3月24号开始一直到今天,将近四个月的时间.包括本篇,一共更新了6篇文章,每篇 5 个小技巧,总计 30 个. 这30个使用技巧,全部 ...

  7. 每周分享五个 PyCharm 使用技巧(四)

    文章首发于 微信公众号:Python编程时光 PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌 ...

  8. 每周分享五个 PyCharm 使用技巧(三)

    文章首发于 微信公众号:Python编程时光 PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌 ...

  9. .net之工作流工程展示及代码分享(二)工作流引擎

    在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: [Serializable] public class Flow { [Xml ...

随机推荐

  1. 在Windows上使用Ubuntu共享的打印机

    Ubuntu下使用cups共享打印机, 是一种简单易用的方法.CUPS(Common UNIX Printing System,通用Unix打印系统)是Fedora Core3中支持的打印系统,它主要 ...

  2. 修改 Pattern代码使 Java 正则表达式支持下划线 '_'

    为什么 由于工作是做数据ETL的,很多时候会使用到正则对数据进行提取,但是java的正则中的groupname不支持'_',官方的文档中是这样的: Group name A capturing gro ...

  3. vue引入echarts、找不到的图表引入方法、图表中的点击事件

    1.在vue-cli项目中添加webpack配置,本文引入的最新版本.在 3.1.1 版本之前 ECharts 在 npm 上的 package 是非官方维护的,从 3.1.1 开始由官方 EFE 维 ...

  4. None是什么?

    None是什么,是空,就是空即是色,色即是空.是一个真的很特别的值,下面比较了下 0,True,False (python 的比較) >>> None == 0False>&g ...

  5. 【DDD】领域驱动设计实践 —— 业务建模小招数

    本文结合团队在ECO(社区服务系统)业务建模过程中的实践经验,总结得到一些DDD业务建模的小招数,不一定是完美的,但是对我们团队来说很有效用,希望能帮到其他人.后面会陆续将项目中业务建模的一些经典例子 ...

  6. dnsmasq一次成功的配置

    第一次用这个小软件,感觉还不错,因为没有像bind那样配置起来繁琐,并且我们也不需要去配置很多文件,内外网访问互不干涉. 我是在centos6.5下进行配置的: 先说说自己的理解: dnsmasq先去 ...

  7. 团队作业4---第一次项目冲刺(ALpha)版本 第五天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 a.完成所有基础功能 b.正在进行测试调试 四.困难与问题 1.根据测试需求功能,部分基础功能不能实现,性能不达标,后续已完成 ...

  8. 201521123080《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  9. 201521123106 《Java程序设计》第5周学习总结

    1. 本章学习总结 2. 书面作业 Q1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 答 ...

  10. PTA中提交Java程序的一些套路

    201708新版改版说明 PTA与2017年8月已升级成新版,域名改为https://pintia.cn/,官方建议使用Firefox与Chrome浏览器. 旧版 PTA 用户首次在新版系统登录时,请 ...