Http介绍

什么是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

推荐阅读更多精彩内容

  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 42,418评论 22 520
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 104,987评论 12 126
  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 2,522评论 0 20
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 5,914评论 5 149
  • 半月前,表姐夫来电话,说表姐病了,在当地医院检查后,说不大好治,建议来市医院治疗。 原来,表姐牙龈出血已有大半年的...
    简之宁阅读 163评论 4 15