HTTP 基本知识

1、HTTP 基础

当您开发服务器或客户端应用程序时,您很有可能通过HTTP执行API请求。HTTP(超文本传输协议)是用于万维网(WWW)的应用级通信的标准化协议。
HTTP基于请求和响应。对于本教程,Android应用程序将作为客户端,并向服务器发送请求,该服务器将发回响应。要在服务器上请求的资源的标识符始终使用URL(统一资源定位符)。URL的方案表示您是加密(例如,https)通信(例如,http)。

2、客户端请求

Android应用程序向服务器发送请求。请求包含四个主要部分:
a、Request line(请求的URL地址)
b、Request headers(请求头(可选))
c、Empty line to separate headers and body(空的URL去分离header和body)
d、Request body(请求体(可选))
下面,我们将详细介绍这几部分。

① Request line
请求的第一部分是request line。它包含两条信息:请求方法和请求URL。我们将在下面研究请求方法。现在我们以GET为例,这意味着客户端不发送数据,只是询问服务器的一些信息。服务器根据传递的请求URL知道客户端要求的资源。
例如:

GET https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1505107071654&di=f874b2d2bf8d1d78bbfc5ae0d9aeb488&imgtype=0&src=http%3A%2F%2Fpic7.nipic.com%2F20100514%2F2158700_153225558098_2.jpg

上面的代码是一个有效的请求,要求服务器返回一张图片。

② Request Headers
有时,服务器需要更多的信息,而不仅仅是请求方法和资源位置。例如,很多服务器实现支持各种客户端。以前,我们开展过一个项目,服务器根据客户端是Android或IOS应用程序,发送不同的回复。但服务器如何知道是什么样的应用程序请求资源?请求头!没错,就是请求头!请求头是用于附加数据补充请求的一种方式,它们被构造为简单的基于文本的键值数组。在上面的示例中,Android应用程序将添加一个用户代理:Android 头,从而将自己标识给服务器。还有更多的标准header,甚至更多的自定义header,您可以根据您的应用程序进行开发。重要的是要知道header在创建一个干净的应用程序和减少在请求URL或请求正文中发送的数据量非常有用。

③ Request Body
与header不同,请求体支持各种格式的复杂数据结构。通用数据格式是JSON,XML或二进制格式。请求体通常包含消息的重要部分。例如,如果客户端将向服务器发出创建新用户的请求,则请求主体将包含用户的信息(名称,地址,...)。

3、Request Methods(请求方式)

您已经知道了请求的第一部分是请求方法,如GET。这并不是偶然的,根据请求方式请求的性质可能完全不同。

GET https://baidu.com/api/user/42  
DELETE https:/baidu.com/api/user/42  

例如,上面的请求几乎是相同的。然后,第一个将请求用户42的数据,而第二个将删除它!因此,请仔细处理请求方法。

① GET
正如我们多次提到的,GET请求方法向服务器请求客户端要访问哪些数据。这是一个简单的阅读,它不会添加,更改或删除它。

② POST&PUT
POST和PUT都是将数据发送到服务器的方式。但是,其含义是不同的。POST请求期望服务器将其添加到现有的。例如,具有用户对象的POST请求意味着服务器创建一个新账户。另一方面,PUT请求期望服务器更新或替换现有的数据项。因此,如果有人更新自己的配置文件,则具有用户对象的PUT请求将是适合的。

③ DELETE
最后,也是最简单的一个DELETE。如果要删除您在请求URL中指定的数据项,则使用DELETE。总体而言,您可能会认识到GET,POST,PUT,DELETE与许多数据库的CRUD模型非常相似。GET等于读取,POST正在创建一新的数据项,PUT正在编辑,DELETE是删除。

4、HEAD, PATCH, TRACE, OPTIONS, CONNECT

在绝大多数API中,您可以编辑或交互,这四个请求方法将足够。然而,在有些罕见的情况下,另一种请求方法可能更适合。由于它们超出了本教程的介绍性质,建议大家稍后阅读特殊请求方法。最后,希望大家遵循请求方式标准。在大多数情况下,客户端,服务器和开发人员都更容易遵循通用的请求方法。

5、Server Responses(服务器响应)

在上一节中,我们仅查看了客户端-服务器交互的前半部分。当然,服务器的响应也很重要。响应的结构也与请求略有不同。它通常包含四个部分:
a、Status line(包括状态码和文本描述)
b、Response headers (响应头(可选))
c、Empty line to separate headers and body(空的URL去分离header和body)
d、Response body(响应体(可选))

虽然响应头和响应体的结构与请求的对应关系相同,但是第一行实现的是完全不同的功能。状态码通知客户请求的结果。换句话说,它告诉你你的请求是否成功。当然,取决于内容,有一百万中不同的结果。因此状态行分为两部分:状态码和文本描述。文本不遵守任何标准化,可以是描述成功或错误的任何字符串。然而,状态码会以预期的方式行事。接下来我们再详细了解它们。

① Status Codes(状态代码)
如上面所了解的,状态码和文本描述由服务器设置,并作为服务器响应的第一行发送。客户端将使用这一行来快速了解服务器发送什么样的响应。我们来看一些状态码的示例:

200 OK  
204 No Content  
401 Unauthorized  
503 Service Unavailable

第一部分,数字状态码包含3个数字。这些数字被分成几百个,我们将在下面了解它们。
a、1xx Informational
虽然存在1xx的状态码,但它们通常用于更低级别的东西,而且您很可能在现实中不用去处理它们。

b、2xx Success
希望您最多使用这些状态码。以2开头的所有状态码表示请求成功。
几个重要的2xx状态码:

  • 200 OK - 用于指示成功请求的标准响应。可惜的是,许多API专门使用这个API,不会将成功分解成其他2xx状态码。
  • 201创建 - 请求成功导致创建新的东西。
  • 204无内容 - 请求成功,但服务器没有响应任何数据。这通常用于确认资源的成功删除。

c、3xx Redirect(重定向)
3xx组中的状态码都表示指定的URL不是正在或永久地服务于服务器,会在其他地方指示您的请求。这主要用于Web服务器,那些传递网页和较少的API。

d、4xx Client Error
希望您没有经常要去处理4xx组中的状态码。他们表示请求的形式不正确,服务器无法处理。会有一些技术原因,为什么会发生这种情况,例如,请求对服务器来说太大。但是,通常,请求的参数是有问题的。
几个常见的4xx状态码:

  • 400错误请求 - 与2xx状态码类似,这是所有类型的错误的统称。一些API专门使用它,这使得客户端很难理解错误。理想情况下,如果服务器的请求以某种不正确的形式(丢失数据,数据违反输入约束,...),则服务器只400状态码,并在响应主体中更详细地指定错误。
  • 401未经授权 - 此状态码对请求的内容没有任何说明,它告诉您无法处理请求,因为服务器无法验证请求(不知道请求后面的用户是谁)。通常,这意味着认证令牌丢失或不正确。
  • 403禁止 - 通常与401混淆,但是这里的服务器知道请求发件人是谁,但不允许该操作。例如,用户可以发送删除另一个用户的请求,但是需要管理员访问权限。
  • 404未找到 - 您在浏览网页时会时常看到这个。它也可以用于API。如果客户端尝试访问不存在的内容(应该会收到)。

e、5xx Server Error
最后的5xx组状态码特别麻烦。这些表示服务器有问题,无法处理您的请求。如果您是服务器开发人员,这些错误是您应该注意的。如果您是客户端开发人员。您也应该寻找他们,并立即向API人员报告。
最常用的5xx状态码是:

  • 500内部服务器错误 - 捕获所有因为各种原因,无法在服务器端处理请求。通常提示错误或错误配置。
  • 503服务不可用 - 这意味着服务器出现了问题。

总结

在这篇文章中,您已经看到了HTTP及其元素的概述。希望本教程为您提供了一个开始和一些资源,以便在必要时进一步阅读更多详细信息。

快乐工作,享受编程!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容