美文网首页
Http介绍

Http介绍

作者: 蜻蜓小子 | 来源:发表于2017-12-05 18:52 被阅读0次

    什么是Http协议

    超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。其实,我们平时浏览的网页就是基于 HTTP 协议呈现的,HTTP 协议是互联网应用中,客户端(浏览器)与服务器之间进行数据通信的一种协议。协议中规定了客户端应该按照什么格式给服务器发送请求,同时也约定了服务端返回的响应结果应该是什么格式。

    Http请求结构

    HTTP请求由3部分组成,分别是请求行、请求首部、请求体,首部和请求体是可选的,并不是每个请求都需要的。

    • 请求行
      请求行是每个请求必不可少的部分,它由3部分组成,分别是请求方法(method)、请求URL(URI)、HTTP协议版本,以空格隔开。

    • 请求首部
      因为请求行所携带的信息量非常有限,以至于客户端还有很多想向服务器要说的事情不得不放在请求首部(Header),请求首部用于给服务器提供一些额外的信息,比如 User-Agent 用来表明客户端的身份,让服务器知道你是来自浏览器的请求还是爬虫,是来自 Chrome 浏览器还是 FireFox。

    • 请求体
      请求体是客户端提交给服务器的真正内容,比如用户登录时的需要用的用户名和密码,比如文件上传的数据,比如注册用户信息时提交的表单信息。

    HTTP请求方法

    根据HTTP标准,HTTP请求可以使用多种请求方法。
    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。


    HTTP请求方法

    URL概述

    统一资源定位符(URL,英语 Uniform / Universal Resource Locator的缩写)是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
    URL格式:schema://host[:port#]/path/…/[?query-string][#anchor]

    • schema 协议(例如:http, https, ftp)
    • host 服务器的IP地址或者域名
    • port# 服务器的端口(如果是走协议默认端口,缺省端口80)
    • path 访问资源的路径
    • query-string 参数,发送给http服务器的数据
    • anchor- 锚(跳转到网页的指定锚点位置)

    常用的请求报头

    报头信息.png
    • Host
      Host初始URL中的主机和端口,用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的.
    • Connection
      表示客户端与服务连接类型;
      交互步骤:
      1.client 发起一个包含Connection:keep-alive的请求
      2.server收到请求后,如果server支持keepalive,回复一个包含Connection:keep-alive的响应,不关闭连接。否则回复一个包含Connection:close的响应,关闭连接。
      3.如果client收到包含Connection:keep-alive的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。Keep-alive在很多情况下能够重用连接,减少资源消耗,缩短响应时间HTTP。
    • Accept
      表示浏览器支持的 MIME 类型
      MIME的英文全称是 Multipurpose Internet Mail Extensions(多用途互联网邮件扩展)
      eg:
      Accept:image/gif,表明客户端希望接受GIF图象格式的资源;
      Accept:text/html,表明客户端希望接受html文本。
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      意思:浏览器支持的 MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和 */*,优先顺序是它们从左到右的排列顺序。
    
      Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
      Application:用于传输应用程序数据或者二进制数据;
    
    image.png
    • Content-Type
      POST 提交,application/x-www-form-urlencoded
      提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
    • User-Agent
      浏览器类型
    • Referer
      请求来自哪个页面,用户是从该 Referer URL页面访问当前请求的页面。
    • Accept-Encoding
      浏览器支持的压缩编码类型,比如gzip,支持gzip的浏览器返回经gzip编码的HTML页面。
    • Accept-Language
      浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
      eg:
      Accept-Language:zh-cn
    

    如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

    • Accept-Charset
      浏览器可接受的字符集,用于指定客户端接受的字符集
      eg:
      Accept-Charset:iso-8859-1,gb2312
      ISO8859-1,通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符;
      gb2312是标准中文字符集;
      UTF-8 是 UNICODE 的一种变长字符编码,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。
      如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
    
    • Cache 头域
      If-Modified-Since
      作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.

    • Pragma
      作用: 防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样+
      Pargma只有一个用法, 例如: Pragma: no-cache
      注意: 在HTTP/1.0版本中,只实现了Pragema:no-cache, 没有实现Cache-Control

    • Last-Modified与ETag
      Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。因为last-modified只能精确到秒级 所以etag才比last-modified的优先级高。

    Http响应结构

    服务端接收请求并处理后,返回响应内容给客户端,同样地,响应内容也必须遵循固定的格式浏览器才能正确解析。HTTP 响应也由3部分组成,分别是:响应行、响应首部、响应体,与HTTP的请求格式是相对应的。

    • 响应行
      响应行同样也是3部分组成,由服务端支持的 HTTP 协议版本号、状态码、以及对状态码的简短原因描述组成。状态码是响应行中很重要的一个字段。通过状态码,客户端可以知道服务器是否正常处理的请求。如果状态码是200,说明客户端的请求处理成功,如果是500,说明服务器处理请求的时候出现了异常。404 表示请求的资源在服务器找不到。除此之外,HTTP 协议还很定义了很多其他的状态码。
    • 响应首部
      响应首部和请求首部类似,用于对响应内容的补充,在首部里面可以告知客户端响应体的数据类型是什么?响应内容返回的时间是什么时候,响应体是否压缩了,响应体最后一次修改的时间。
    • 响应体
      响应体(body)是服务器返回的真正内容,它可以是一个HTML页面,或者是一张图片、一段视频等等。

    所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。 状态代码的第一个数字代表当前响应的类型

    1xx消息——请求已被服务器接收,继续处理
    2xx成功——请求已成功被服务器接收、理解、并接受
    3xx重定向——需要后续操作才能完成这一请求
    4xx请求错误——请求含有词法错误或者无法被执行
    5xx服务器错误——服务器在处理某个正确请求时发生错误

    常见状态代码、状态描述、说明:
    ◆200 (OK): 找到了该资源,并且一切正常。
    ◆301(Moved Permanently): 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
    ◆302 (Found): 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。
    ◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
    ◆400 (Bad Request): 请求出现语法错误。
    ◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
    ◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。
    ◆500 (Internal Server Error): 服务器遇到了意料不到的情况,不能完成客户的请求
    ◆503 (Service Unavailable): 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头
    详细的状态码信息:http://www.runoob.com/http/http-status-codes.html

    延伸阅读
    《图解HTTP》
    《HTTP权威指南》
    HTTP Request:https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5

    相关文章

      网友评论

          本文标题:Http介绍

          本文链接:https://www.haomeiwen.com/subject/zbsvbxtx.html