目录

  • HTTP协议
  • HTTP特点
  • HTTP工作流程
  • HTTP协议组成部分
    • HTTP协议中URI、URL、URN
      • URI
      • URL
      • URN
    • HTTP请求 Request
      • 请求行
        • HTTP请求方法
      • 请求头部
      • 空行
      • 请求体(请求主体)
    • HTTP响应 Response
      • 状态码
      • 响应头部
      • 响应体(响应主体)

HTTP协议

  • http 协议详解
  • http 协议
  • HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
  • HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图【提示:借鉴了上述文章】:
  • HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
  • HTTP默认的端口号为80,HTTPS的端口号为443

HTTP特点

  1. 简单快速:客户向服务器请求服务时,只需传送请求方法路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  2. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  3. HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
  4. 无状态:HTTP协议是无状态协议。**无状态是指协议对于事务处理没有记忆能力。**缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  5. 支持B/S及C/S模式。

HTTP工作流程

  • 一次HTTP操作称为一个事务,其工作过程可分为四步:

    1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
    2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
    3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
      如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

HTTP协议组成部分

HTTP协议中URI、URL、URN

URI

  • URI:(Uniform Resource Identifier),统一资源标识符,是一个用于标识某一互联网资源名称的字符串。URL和URN都是URI的子集。
  • URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。他不属于定位符,因为根据该标识符无法定位任何资源。URI只是一种概念,怎样实现无所谓,只要它唯一标识一个资源就可以了。
  • URL :指定位置的 URI
  • URN :指定名称的 URI
  • URI :同时指定名称和位置的 URI

URL

  • URL(Uniform Resource Location统一资源定位符),可以帮助我们唯一定位互联网上的某一个资源,相当于是互联网资源的身份证号。URL的五个元素包括在一个简单的地址中:

    • 传送协议。
    • 服务器。(通常为域名或者IP地址)
    • 端口号。(以数字方式表示,若为HTTP的默认值“:80” HTTPS的默认值“:443”可省略)
    • 请求资源路径。
    • 传递数据。(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
  • 例子:
     http://www.itbaizhan.cn:80/course/id/18.html?a=3&b=4其中:1.http, 是协议;2.itbaizhan.cn,是服务器域名;3.80,是服务器上的默认网络端口号,默认不显示;4./course/id/18.html,是路径(URI:直接定位到对应的资源);5.?a=3&b=4,请求时传递的数据;

URN

  • URN(Uniform Resource Name,统一资源名称),其目的是通过提供一种途径,用于在特定的命名空间资源的标识,以补充网址。
  • URN是URI的子集,包括名字(给定的命名空间内),但是不包括访问方式。

HTTP请求 Request

  • 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

    • 请求行、请求头部、空行和请求数据(请求主体信息)四个部分组成。
    • 请求报文结构:
      • POST /search HTTP/1.1  //请求行
        Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
        application/msword, application/x-silverlight, application/x-shockwave-flash, */*
        Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
        Accept-Language: zh-cn
        Accept-Encoding: gzip, deflate
        User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
        Host: <a href="http://www.google.cn">www.google.cn</a>
        Connection: Keep-Alive
        Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
        NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
        FxlRugatx63JLv7CWMD6UB_O_r  hl=zh-CN&source=hp&q=domety //请求主体(请求信息)
        

请求行

HTTP请求方法

  • 根据HTTP标准,HTTP请求可以使用多种请求方法。

    • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
    • 请求方法 解释
      GET 请求指定的页面信息,并返回实体主体
      HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
      POST 向指定资源提交数据进行处理请求(例如:提交表单或者上传文件。)数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
      PUT 从客户端向服务器传送数据取代指定的文档的内容
      DELETE 请求服务器删除指定的页面
      CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
      OPTIONS 允许客户端查看服务器的性能
      TRACE 回显服务器收到的请求,主要用于测试或者诊断
  • GET和POST的区别1
    1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
    2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
    3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
    4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
  • GET和POST的区别2(重要,面试常问)
    1. GET在浏览器回退时是无害的,而POST会再次提交请求。
    2. GET产生的URL地址可以被Bookmark,而POST不可以。
    3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
    4. GET请求只能进行url编码,而POST支持多种编码方式。
    5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
    6. GET请求在URL中传送的参数是有长度限制的,而POST则没有。对参数的数据类型GET只接受ASCII字符,而POST即可是字符也可是字节。
    7. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    8. GET参数通过URL传递,POST放在Request body中。
    9. Get的速度比POST速度要快

请求头部

  • 请求头:也被称作消息报头,请求头是由一些键值对组成,每行一对,关键字和值用英文冒号“:”分隔。允许客户端向服务器发送一些附加信息或者客户端自身的信息,典型的请求头如下:
    *

    请求头 作用 示例
    Accept 指定客户端能够接收的内容类型,告诉WEB服务器自己接受什么介质类型,/ 表示任何类型,type/* 表示该类型下的所有子类型。 Accept:text/html
    Accept-Charset 浏览器可以接受的字符编码集 Accept-Charset:utf-8
    Accept-Encoding 指定浏览器可以支持web服务器返回内容的压缩编码类型,浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)。 Accept-Encoding:gzip
    Accept-Language 浏览器可接受的语言,浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等。 Accept-Language:en
    Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges:bytes
    Authorization HTTP授权的授权证书类型
    Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control:no-cache
    Connection 表示是否需要持久连接,注意HTTP1.1默认进行持久连接。如果值是close则表示基于短连接方式,如果该值是keep-alive,网络连接就是持久的,在一定时间范围内不会关闭,使得对同一个服务器的请求可继续在该连接上完成。 Connection:close
    Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器 Cookie:$Version=1;Skin=new
    Content-Length 请求的内容长度 Content-Length:348
    Content-Type 请求与实体对应的MIME信息
    Host 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。

空行

  • 空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

请求体(请求主体)

  • 请求数据:请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

HTTP响应 Response

  • Response消息也由三部分组成:第一部分叫响应行(Response line)、第二部分叫响应头(Response header)、第三部分叫响应主体(Response body)。
  • 响应报文结构:
    • HTTP/1.1 200 OK
      Date: Fri, 22 May 2009 06:07:21 GMT
      Content-Type: text/html; charset=UTF-8<html><head></head><body><!--body goes here--></body>
      </html>//第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。//第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok).
      //第二部分:消息报头,用来说明客户端要使用的一些附加信息//第二行和第三行为消息报头,Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8.
      //第三部分:空行,消息报头后面的空行是必须的
      //第四部分:响应正文,服务器返回给客户端的文本信息。//空行后面的html部分为响应正文。
      

状态码

  • 用来代表网页服务器超文本响应状态的3位数字代码,http状态码的核心作用是Web Server服务器用来告诉客户端,当前的网页请求发生了什么事,或者说当前web服务器的响应状态。因此http状态码用来判断和分析当前web服务器的运行状况。
  • 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
# 常见的状态码
200 OK                      //客户端请求成果
400 Bad Request             //客户端请求有语法错误,不能被服务器访问
401 Unauthorized         //请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden               //服务器收到请求,但是拒绝提供服务
404 Not Found               //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error   //服务器发生不可预期的错误
503 Server Unavailable      //服务器当前不能处理客户端的请求,一段时间可能恢复正常
  • 1xx:指示信息–表示请求已接收,继续处理

    • 100

      • 服务器已经接收到请求头,并且客户端应继续发送请求主体。或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后,向客户端发送一个最终的请求。
    • 101
      • 服务器已经理解了客户端的请求,并通过升级消息头,通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将切换到在升级消息头中定义的那些协议。
    • 102
      • 服务器已经收到并正在处理请求,但无响应可用。这样可以防止客户端超时,并假设请求丢失。
  • 2xx:成功–表示请求已被成功接收、理解、接受
    • 200

      • 请求已经成功,请求希望的响应头或数据体将随之响应返回。实际的响应则取决于你请求的方法,就以GET和POST的请求为例,在GET的请求中,响应将包含与请求的资源相对应的实体。则在POST的请求中,响应将包含描述或操作结果的实体。
    • 201
      • 请求已经被实现,而且有一个新的资源已经依据请求的需要而创建,并且URI已经随Location头信息返回。
    • 202
      • 服务器已经接受请求,但是尚未处理,最终该请求也可能不会被执行,并且可能在处理发生时被禁止。
    • 203
      • 服务器是一个转换代理服务器,例如网络加速器,以200状态码为起源,但回应了原始响应的修改版本。
    • 204
      • 服务器处理了请求,没有返回内容。。一般适用场景,在wifi设备连接到需要进行Web认证的Wife接入点时,通过访问一个能在HTTP 204响应的网站,如果能正常接受204的响应,则代表无需Web认证,否则会弹出网页浏览器界面,显示出Web网页认证界面用于让用户进行登陆。
    • 205
      • 服务器成功处理了请求,但没有返回任何内容。与204的区别就是,此响应要求请求者重置文档视图。
    • 206
      • 服务器已经成功处理了部分GET请求。典型的应用就是像迅雷这类的HTTP下载工具响应实现端点续传或者将一个大文档分解为多个下载段同时下载。
    • 207
      • 代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。
    • 208
      • DAV绑定的成员已经在(多状态)响应之前的部分被列举,且未被再次包含。
    • 226
      • 服务器已经满足了对资源的请求,对实体请求的一个或多个实体操作的结果表示。
  • 3xx:重定向–要完成请求必须进行更进一步的操作
    • 300

      • 被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。除非这是一个HEAD请求,否则该响应应当包括一个资源特性及地址的列表的实体,以便用户或浏览器从中选择最合适的重定向地址。这个实体的格式由Content-Type定义的格式所决定。浏览器可能根据响应的格式以及浏览器自身能力,自动作出最合适的选择。
      • Content-Type 标头告诉客户端实际返回的内容的内容类型。一般在http的请求头进行设置。一般有以下的几种格式:
        • text/html: HTML 格式
        • text/plain: 纯文本格式
        • ext/xml: XML 格式
        • image/gif: gif图片格式
        • image/jpeg: jpg图片格式
        • image/png: png图片格式
    • 301
      • 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
    • 302
      • 要求客户端执行临时重定向,由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求,只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。Cache-Control是http响应头用来放置缓存信息的。
    • 303
      • 对应当前请求的响应可以在另一个URI上被找到,当响应于POST(或PUT / DELETE)接收到响应时,客户端应该假定服务器已经收到数据,并且应该使用单独的GET消息发出重定向。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。这个新的URI不是原始资源的替代引用。同时,303响应禁止被缓存。当然,第二个请求(重定向)可能被缓存。
    • 304
      • 表示资源在由请求头中的if-Modified-Since 或 if-None-Match 参数指定的这一版本之后,未曾被修改。由于客户端仍然具有以前下载的副本,因此不需要重新传输资源。
    • 305
      • 被请求的资源必须通过指定的代理才能被访问。Location域中将给出指定的代理所在的URI信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能创建305响应。
    • 306
      • 在最新版的规范中,306状态码已经不再被使用。最初是指“后续请求应使用指定的代理”。
    • 307
      • 在这种情况下,请求应该与另一个URI重复,但后续的请求应仍使用原始的URI,与302相反,当重新发出原始请求时,不允许更改请求方法。 例如,应该使用另一个POST请求来重复POST请求。
    • 308
      • 请求和所有将来的请求应该使用另一个URI重复。 307和308重复302和301。
  • 4xx:客户端错误–请求有语法错误或请求无法实现
    • 400

      • 由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。
    • 401
      • 类似于403 Forbidden,401语义即"未认证",即用户没有必要的凭据。该状态码表示当前需求需要用户验证。
    • 402
      • 该状态码是为了将来可能的需求而预留的。该状态码最初的意图可能被用作某种形式的数字现金或在线支付方案的一部分,但几乎没有哪家服务商使用,而且这个状态码通常不被使用。
    • 403
      • 服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个HEAD请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个404响应,假如它不希望让客户端获得任何信息。
    • 404
      • 请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用404状态码来告知旧资源因为某些内部的配置机制问题已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况。
    • 405
      • 请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow头信息用以表示出当前资源能够接受的请求方法的列表。例如,需要通过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。鉴于PUT,DELETE方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认的配置下不允许上述的请求方法,对于此类请求均会返回405错误。
    • 406
      • 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体,该请求不可接受。除非这是一个HEAD请求,否则该响应就应当返回一个包含可以让用户或者浏览器从中选择最合适的实体特性以及地址栏表的实体。实体的格式由Content-Type头中定义的媒体类型决定。浏览器可以根据格式及自身能力自行作出最佳选择。但是,规范中并没有定义任何作出此类自动选择的标准。
    • 407
      • 与401的响应类似,不同的是客户端必须在代理服务器上进行身份验证。代理服务器必须返回一个Proxy-Authenticate用以进行身份询问。客户端可以返回一个Proxy-Authorization信息头用以验证。
    • 408
      • 请求超时。根据HTTP规范,客户端没有在服务器预备等待的时间内完成一个请求的发送,客户端可以随时再次提交这一请求而无需进行任何更改。
    • 409
      • 表示因为请求存在冲突无法处理该请求,例如多个同步更新之间的编辑冲突。
    • 410
      • 表示所请求的资源不再可用,将不再可用。当资源被有意地删除并且资源应被清除时,应该使用这个。在收到410状态码后,用户应停止再次请求资源。但大多数服务端不会使用此状态码,而是直接使用404状态码。
    • 411
      • 服务器拒绝在没有定义Content-Length头的情况下接受请求。在添加了表明请求消息体长度的有效Content-Length头之后,客户端可以再次提交该请求。
    • 412
      • 服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。
    • 413
      • 表示服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。此种情况下,服务器可以关闭连接以免客户端继续发送此请求。如果这个状况是临时的,服务器应当返回一个Retry-After的响应头,以告知客户端可以在多少时间以后重新尝试。
    • 414
      • 表示请求的URI长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。通常将太多数据的结果编码为GET请求的查询字符串,在这种情况下,应将其转换为POST请求。通常的情况包括:

        • 本应使用POST方法的表单提交变成了GET方法,导致查询字符串过长;
        • 重定向URI“黑洞”,例如每次重定向把旧的URI作为新的URI的一部分,导致在若干次重定向后URI超长。
        • 客户端正在尝试利用某些服务器中存在的安全漏洞攻击服务器,这类服务器使用固定长度的缓冲读取或操作请求的URI,当GET后的参数超过某个数值后,可能会产生缓冲区溢出,导致任意代码被执行,没有此类漏洞的服务器,应当返回414状态码。
    • 415
      • 对于当前请求的方法和所请求的资源,请求中提交的互联网媒体类型并不是服务器中所支持的格式,因此请求被拒绝。例如。客户端将图像的格式上传为svg,但服务器要求图像使用上传格式为jpg。
    • 416
      • 客户端已经要求文件的一部分,但服务器不能提供该部分。例如,如果客户端要求文件的一部分超出文件尾端。
    • 417
      • 在请求头Expect中指定的预期内容无法被服务器满足,或者这个服务器是一个代理服显的证据证明在当前路由的下一个节点上,Expect的内容无法被满足。
    • 421
      • 该请求针对的是无法产生响应的服务器(例如因为连接重用)。
    • 422
      • 请求格式正确,但是由于含有语义错误,无法响应。
    • 423
      • 当前的资源被锁定。
    • 424
      • 由于之前的某个请求发生错误,导致当前的请求失败。
    • 425
      • 服务器拒绝处理在Early Data中的请求,以规避可能的重放攻击。
      • 重放攻击是一种网络攻击,通过恶意的欺诈性地重复或拖延正常的数据传输而实施。因工作原理如同重放歌曲一样而得名。
    • 426
      • 原服务器要求该请求满足一定条件。这是为了防止“未更新”问题,即客户端读取(GET)一个资源的状态,更改它,并将它写(PUT)回服务器,但这期间第三方已经在服务器上更改了该资源的状态,因此导致了冲突。
    • 429
      • 用户在给定的时间内发送了太多的请求。旨在用于网络限速。
    • 431
      • 服务器不愿处理请求,因为一个或多个头字段过大。
    • 451
      • 该访问因法律的要求而被拒绝。
  • 5xx:服务器端错误–服务器未能实现合法的请求
    • 500

      • 通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。没有给出具体错误信息。
    • 501
      • 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
    • 502
      • 作为网关或者代理工作服务器尝试执行请求时,从上游服务器收到无效的响应。
    • 503
      • 由于临时的服务器维护或者过载,服务器无法处理请求。这个状况时暂时的,且在一段时间后就会恢复。
    • 504
      • 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP,FTP,LDAP)或者辅助服务器(例如DNS)收到的响应。
    • 505
      • 服务器不支持,或者拒绝支持在请求中使用的HTTP版本。这暗示着服务器不能或不愿使用与客户端相同的版本。响应中应当包含一个描述了为何版本不被支持以及服务器支持哪些协议的实体。
    • 506
      • 代表服务器存在内部配置错误,被请求的协商变元资源被配置为在透明内容协商中使用自己,因此在一个协商处理中不是一个合适的重点。
    • 507
      • 服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。
    • 508
      • 服务器在处理请求时陷入死循环。
    • 511
      • 客户端需要进行身份验证才能获得网络访问权限,旨在限制用户群访问特定网络。

响应头部

  • 响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key:value。

  • 响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key:value。

    • Date

      • 响应的Date使用的是GMT时间格式,表示响应消息送达时间。
    • Server
      • 服务器通过这个Server告诉浏览器服务器的类型。
    • Vary
      • 客户端缓存机制或者是缓存服务器在做缓存操作的时候,会使用到Vary头,会读取响应头中的Vary的内容,进行一些缓存的判断。
    • Content-Encoding
      • 文档的编码(Encode)方式。用gzip压缩文档能够显著地减少HTML文档的响应时间。
    • Content-Length
      • 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
    • Content-Type
      • 表示响应的文档属于什么MIME类型。
      • MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
      • MIME作用:HTTP协议所产生的响应中正文部分可以是任意格式的数据,那么如何保证接收方能看得懂发送方发送的正文数据呢?HTTP协议采用MIME协议来规范正文的数据格式。
      • 在服务端我们可以设置响应头中Content-Type的值来指定响应类型。
      • MIME类型对应列表
      • Type Meaning
        application/postscript PostScript file
        application/vnd.lotus-notes Lotus Notes file
        application/vnd.ms-excel Excel spreadsheet
        application/vnd.ms-powerpoint PowerPoint presentation
        application/x-gzip Gzip archive
        application/x-java-archive JAR file
        application/x-java-serialized-object Serialized Java object
        application/x-java-vm Java bytecode (.class) file
        application/zip Zip archive
        audio/basic Sound file in .au or .snd format
        audio/midi MIDI sound file
        audio/x-aiff AIFF sound file
        audio/x-wav Microsoft Windows sound file
        image/gif GIF image
        image/jpeg JPEG image
        image/png PNG image
        image/tiff TIFF image
        image/x-xbitmap X Windows bitmap image
        text/css HTML cascading style sheet
        text/html HTML document
        text/plain Plain text
        text/xml XML
        video/mpeg MPEG video clip
        video/quicktime QuickTime video clip
        application/msword Microsoft Word document
        application/octet-stream Unrecognized or binary data
        application/pdf Acrobat (.pdf) file
  • HTTP 响应头信息

  • HTTP消息头(HTTP headers)-常用的HTTP请求头与响应头

响应体(响应主体)

  • 响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

03 HTTP 协议相关推荐

  1. 透视HTTP协议-03|HTTP协议进阶(一)

    一.HTTP的实体数据 一.数据类型与编码 在 TCP/IP 协议栈里,传输数据基本上都是"header+body"的格式.但 TCP.UDP 因为是传输层的协议,它们不会关心 b ...

  2. vooc是什么快充协议_5G时代除了网速,快充同样重要!

    从2016年第一款全面屏手机「小米MIX」发布,到目前最新的「VIVO X50」系列手机的发布,在这短短的四年时间里,全面屏手机的技术已经达到了炉火纯青的地步.什么水滴屏,挖空屏,真全面屏在各大厂商手 ...

  3. librtmp实时消息传输协议(RTMP)库代码浅析

    没事碰到了librtmp库,这个库是ffmpeg的依赖库,用来接收,发布RTMP协议格式的数据. 代码在这里:git clone git://git.ffmpeg.org/rtmpdump 先看一段通 ...

  4. SPT20 协议_【笔试时间有变】关于国家电网三方协议的那些事!

    漫漫人生路  一切慢慢来 ✄ ✑2019年10月15日ㄨ⇪ㄨ⇪ 辽宁电网咨询微信 zgdw666666 It is better to be happy for a long time  than t ...

  5. 【流媒体|从入门到出家】:流媒体协议—HTTP

    第一篇章  流媒体原理 1.1    流媒体概念 1.2    流式传输特点 1.3    流媒体系统构成 1.4    流媒体涉及技术 1.5    流媒体应用 1.6    国内外大型流媒体系统 ...

  6. rtmplib rtmp协议过程分析

    转自:http://chenzhenianqing.cn/articles/1009.html 写的很好,收藏如下,向作者致敬! 没事碰到了librtmp库,这个库是ffmpeg的依赖库,用来接收,发 ...

  7. 区块链社交APP协议分析:Qbao

    " 本文从协议解析的角度,对区块链社交应用Qbao进行简单分析,重点介绍聊天内容的还原." 在正文开始前,先作几点说明: 首先,Qbao不是钱宝,而是一款区块链社交APP,请钱宝粉 ...

  8. 从ZETA无线通信技术特点出发选择合适的物联网协议

    -- 作者 | 纵行科技ZETA协议开发部 -- 业务背景:随着物联网技术的快速发展,正越来越多地在农业.工业.楼宇.资产跟踪.智能计量和智慧城市等多个领域中得到应用.物联网应用有其特定的要求,例如距 ...

  9. 接口测试之主流协议测试合集(python版)

    http://t.csdn.cn/U4WHz 接口测试之主流协议测试合集(python版) 01 TCP/IP四层模型&OSI七层模型 02 IP协议 03 TCP协议 04 UDP协议 05 ...

最新文章

  1. cudnn v4安装
  2. 服务器系统内存,服务器系统内存使用情况
  3. GIS开源库shapeLib的使用方法
  4. spring jdbctemplate 实体列与数据表列 查询
  5. ajax,jsonp,axios面试题
  6. 微信小程序入门第一天
  7. docker运行镜像报错:write init-p: broken pipe
  8. java中连接字符串_Java中几种方式连接字符串的方法
  9. 大学计算机—计算思维导论 中国大学mooc 哈尔滨工业大学 测验题目和答案
  10. Android实现边录音边播放
  11. 微信小程序input输入框控制金额格式
  12. git报错 warning: Clone succeeded, but checkout failed.
  13. SQL语句 日期查询
  14. nginx-http重定向到https配置
  15. win10微软图标点击无反应_steam图标 教你win10系统双击steam图标没反应的解决教程...
  16. 数据结构之ElemType
  17. 化妆品企业迎来的机遇和挑战
  18. Hadoop集群启动时,nameNode进程没有启动 :Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)解决方法
  19. 张家辉章子怡获2014金像奖影帝影后 一代宗师获多奖项
  20. 小白学分析——熊猫烧香分析报告【附pdf】

热门文章

  1. 哭着退票的你,要笑着过年呀!(文末有福利)
  2. Three.JS游戏开发入门
  3. 【Python】pyserial module sends hex style byte data to embedd system
  4. Centos Linux没有显示IP
  5. Java-Eddy的难题
  6. 计算机未连接到网络但是可以上网,win10系统能上网但图标显示未连接的解决办法...
  7. FUNCTION 数据库名.GETDATE does not exist 详情页下单
  8. DeepMind最新研究:AI击败了人类,设计了更好的经济机制
  9. 基于深度多尺度卷积LSTM网络的出行需求和出发地预测
  10. 组件化开发之路由器模块详解(ActivityRouter源码详解)