本次分享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. pyhton安装pillow问题解决

    最近在学习Python的微信处理相关,因wxpy库中的微信客户端需要接收二维码需要安装pillow,如下 class wxpy.Bot(cache_path=None, console_qr=Fals ...

  2. 【完整资料】TC358779XBG:HDMI转MIPI DSI芯片方案

    TC358779XBG是一颗HDMI1.4转MIPI  DSI带缩放功能的芯片,分辨率1920*1080,封装BGA80.通信方式:IIC,电源3.3/1.8/2.2,应用领域:平板,广告机,VR,显 ...

  3. MySQL(九)之数据表的查询详解(SELECT语法)二

    上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1 ...

  4. hdu 2066 最短路水题

    题意:给出多个可选择的起始点和终点,求最短路 思路:执行起始点次的spfa即可 代码: #include<iostream> #include<cstdio> #include ...

  5. 使用设置sa用户登录sql server2008

    今天在net项目中添加数据库过程中出现了小问题,就是使用sql server身份验证没登录成功,经过一番调试,终于解决问题. 使用sa账户登录sql server 2008 的方法步骤如下: 1.首先 ...

  6. Python 进程与线程小随笔

    Process 涉及模块:multiprocessing Process p = Process() p.start() p.join() from multiprocessing import Pr ...

  7. HIVE和HBASE区别11

    对于刚接触大数据的用户来说,要想区分Hive与HBase是有一定难度的.本文将尝试从其各自的定义.特点.限制.应用场景等角度来进行分析,以作抛砖引玉之用.  Hive是什么? Apache Hive是 ...

  8. 扫雷游戏制作过程(C#描述):第二节、界面设计

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 扫雷界面设计 界面的设计,首先需要创建一个菜单栏.具体方法在左边找到工具箱窗口,展开其中的菜单和工具栏,找到MenuStrip选项,双 ...

  9. C语言之算法初步(汉诺塔--递归算法)

    个人觉得汉诺塔这个递归算法比电子老鼠的难了一些,不过一旦理解了也还是可以的,其实网上也有很多代码,可以直接参考.记得大一开始时就做过汉诺塔的习题,但是那时代码写得很长很长,也是不理解递归的结果.现在想 ...

  10. 201521123090 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 继承与多态的概念与实现 父类与之类的关系 解决代码复用的办法 2. 书面作业 注释的应用 使 ...