HTTP 请求

HTTP 原理

HTTP 是应用层协议,通过 TCP 实现可靠传输,能够保证数据的完整性、正确性。

C/S 架构的交互流程

  1. 客户端执行网络请求,从 URL 解析服务端的主机名
  2. 主机名解析成 IP 地址
  3. 从 URL 解析出端口号
  4. 建立客户端到服务端的 TCP 连接
  5. 客户端通过输出流向服务端发送一条 HTTP 请求
  6. 服务端向客户端回送一条 HTTP 响应报文
  7. 客户端从输入流获取报文
  8. 客户端解析报文,关闭连接
  9. 客户端将结果显示在 UI

HTTP 请求方式

HTTP 常见请求方式有 GET、POST、DELETE、PUT、HEAD、TRACE、OPTIONS。

GET

用来获取服务器中的某个资源

POST

用来向服务器传递数据,比如递交 HTML 表单

PUT

用来向服务器写入资源。有些发布系统允许用户创建 Web 页面,并用 PUT 直接将其传输到 Web 服务器上

DELETE

用来请服务器删除 URL 所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。因为,HTTP 规范允许服务器在不通知客户端的情况下撤销请求

HEAD

与 GET 方法行为类型,但是服务器在响应中只返回首部。不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。

TRACE

TRACE 方法允许客户端在最终将请求发送给服务器时,看看它变成什么样子。TRACE 请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条 TRACE 响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间 HTTP 应用程序组成的请求/响应链上,原始报文是否以及如何被毁坏或修改过。

OPTIONS

OPTIONS 方法请求 Web 服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法(有些服务器可能只支持对一些特殊类型对象使用特定的操作)。这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。

HTTP 报文格式解析

HTTP 请求报文由请求行(request line)、请求头部(header)、空行和请求数据 4 个部分组成。

|请求方法 | 空格 | URL | 空格 | HTTP 版本 | 回车符 | 换行符 |
| ----------头部字段名:值 --------- | 回车符 | 换行符 |
|------回车符 -----------|------- 换行符---------- |
|-------------------请求数据-------------------- |

1.起始行
报文的第一行就是起始行,在请求报文中用来说明要以什么方式做什么请求,而在响应报文中粗略说明了报文的执行结果。

2.首部字段
起始行后面有零个或者多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(如 Connection:Keep-Alive)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。

3.主体
首部字段的空行之后就是可选的报文主体,其中包含了所有类型的数据。请求主体中包括了要发给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是结构化的文本形式,而主体可以包含任意的二进制数据(如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。

响应报文

HTTP 响应也由 3 个部分组成,分别是:状态行、消息报头、响应正文。

<状态行>
<响应报文 header>
<空行>
[响应报文内容]

在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明请求的资源情况。

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version 表示服务器 HTTP 协议的版本;Status-Code 表示服务器发回的响应状态代码;Reason-Phrase 表示状态代码的文本描述。状态代码由 3 位数字组成,第一个数字定义了响应的类别,有 5 中可能取值。

取值范围 含义
100-199 指示信息-表示请求已经接收,继续处理
200-299 请求成功。表示请求已经被成功接收、理解
300-399 重定向。要完成请求必须做进一步操作
400-499 客户端错误。请求有语法错误或请求无法实现
500-599 服务器端错误。服务器未能实现合法请求

常见状态代码

代码 状态 说明
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在
500 Internal Server Error 服务器发生不可预期错误
503 Server Unavailable 服务器当前不能处理客户端的请求
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容