2020-05-20 http

Jietu20504-234@2x.jpg

第一章 前言

我们现实生活中的协议是指相互遵守的规定,单方面违背,协议不成立;而在互联网交互的过程中,也存在这许多协议,例如FTP、HTTP、STMP、TCP/IP等。

而HTTP协议则是web服务器和web客户端达成的一种可靠的数据传输协议,通过HTTP可以从遍布全世界的Web服务器上将JPEG图片,HTML页面,文本文件,MPEG电影,WAV音频文件和其他资源信息块迅速、便捷、可靠地搬移到人们桌面上的Web浏览器上去。它能够确保数据在传输的过程当中不会损坏或者产生混乱。这样,对用户来说是个好事,同样对internet应用的开发人员来说也是一件好事。因为我们在开发过程中也不需要担心自己的页面和数据会在传输过程中发生破坏和畸变了。

第二章 WEB客户端和服务器

Web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP协议,因此经常会被称为HTTP服务器。这些HTTP服务器存储了因特网中的数据,如果HTTP客户端发出请求的话,它们会提供数据。客户端向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据。

那么一次请求和响应的过程中发生了什么?

WX20190504-211516@2x.png

HTTP属于无状态链接协议,即是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间和服务器资源。

当然也有有状态链接,那就是我们常用的QQ。H5新增的特性中也包含Websocket帮助我们构建长链接。

第三章 资源和媒体类型

web服务器是web资源的宿主,而web资源就是我们常见的web内容的源头,最简单的web资源就是我们服务器中的静态文件:文本文件,HTML文档,JPEG图片文件,mp4文件等等。

当然web资源也可以是动态生成的,类似搜索引擎生成的页面,qq空间的动态等,总之,所有类型的内容来源都是资源。

因特网上有数千种不同类型的数据类型,HTTP在传输的过程中为每个传输的数据都打上了名为MIME类型的数据类型标签,描述并标记多媒体内容。

Snipaste_2019-05-04_21-20-37.png

web浏览器请求一个网站的时候往往会发布多个HTTP请求,比如我们在浏览一个具有丰富图片的的web页面的时候,浏览器会执行一次HTTP请求来获取描述页面布局的HTML,然后发布另外的请求来获取每个嵌入式的图片,这些图片甚至可能位于不同的服务器上。因此,一个web页面通常不是单个资源,而是一组资源的集合。

web服务器会为所有的HTTP对象数据附加一个MIME类型,当浏览器从服务器中取回一个对象的时候,会查看相关的MIME类型。看看它是否知道应该如何处理这个对象。对象的类型写在响应的content-type头中;同样,请求的时候浏览器也会告知服务器请求数据类型。

常见的MIME类型:

  • HTML 格式的文本文档由 text/html 类型来标记。
  • 普通的 ASCII 文本文档由 text/plain 类型来标记。
  • JPEG 格式的图片为 image/jpeg 类型。
  • GIF 格式的图片为 image/gif 类型。

以application开头的媒体格式类型:

  • application/xhtml+xml :XHTML格式
  • application/xml : XML数据格式
  • application/atom+xml :Atom XML聚合格式
  • application/json : JSON数据格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded<form encType=''>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
  • multipart/form-data : 需要在表单中进行文件上传使用的数据格式。

当然还有很多类型,我们就不一一列举了。

MIME 参考手册:

http://www.w3school.com.cn/media/media_mimeref.asp

第四章 URL

统一资源定位符(Uniform Resource Locator)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

大部分 URL 都遵循一种标准格式, 这种格式包含三个部分。

  • URL 的第一部分被称为方案(scheme), 说明了访问资源所使用的协议类型。 这部
    分通常就是 HTTP 协议(http://)。
  • 第二部分给出了服务器的因特网地址(比如,http://www.itheima.com)。
  • 其余部分指定了 Web 服务器上的某个资源(比如, /static/image/common/zixuelogo.png)。

URL可以更为细致的进行划分。

  foo://username:password@xxx.xx.xx:8080/over/there/index.html?type=answer&name=yanshiba#nose
  \_/   \_______________/ \_________/ \__/            \___/ \_/ \______________________/ \__/
   |           |               |       |                |    |            |                |
   |       userinfo           host    port              |    |          query          fragment
   |    \________________________________/\_____________|____|/ \__/       \__/
 scheme                 |                          |    |    |    |          |
  name              authority                      |    |    |    |          |
                                                 path   |    |    interpretable as keys
                                                        |    |
        \_______________________________________________|____|/       \____/     \_____/
                             |                          |    |          |           |
                     hierarchical part                  |    |    interpretable as values
                                                        |    |
                                   interpretable as filename |
                                                             |
                                                             |
                                               interpretable as extension

第五章 方法

HTTP支持几种不同请求和命令,这些命令被称为HTTP方法,每条HTTP请求报文都包含一个方法。 这个方法会告诉服务器要执行什么动作(获取一个Web页面、发送一段信息、删除一个文件等);

我们在学习form表单的时候也知道method可以写作post和get。这就是HTTP请求的方法。

请求方法如下:

请求方法 描述
GET 获取一个URL指定的资源,即资源实体
POST 向服务器提交数据
PUT 向服务器提交数据
DELETE 请求源服务器删除Request-URI标志的资源
HEAD 获取一个指定资源的头信息
OPTIONS 获取服务器支持的方法

我们随后学习的node和ajax中都会用到HTTP请求具体的方法实现。

第六章 状态码

每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功, 或者是否需要采取其他动作。

状态码分成如下几个系列:

状态码 定义 说明
1XX 请求被接受 一般只在实验环境下使用
2XX 成功 操作成功的收到,理解和接收
3XX 重定向 为了完成请求,进行进一步措施
4XX 客户端错误 请求的语法有错误或者不能完全被满足
5XX 服务器错误 服务器无法完成明显有效的请求

常见的HTTP状态码:

HTTP状态码 描述
200 OK。文档正确返回
301/2 永久/临时重定向
304 not modified 未修改(原有的缓存可以继续使用)
404 请求的网页不存在
503 服务器暂时不可用
500 服务器内部错误

第七章 报文

HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。

message.png

从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message)。

HTTP 报文包括以下三个部分:

  • 起始行
    报文的第一行就是起始行, 在请求报文中用来说明要做些什么, 在响应报文中说明
    出现了什么情况。

    • 请求行部分由 请求方法(GET,POST等),请求路径,协议版本组成。
    • 响应行部分由 协议版本,状态码,状态文字组成。
  • 首部字段
    起始行后面有零个或多个首部字段。 每个首部字段都包含一个名字和一个值, 为了
    便于解析, 两者之间用冒号来分隔。 首部以一个空行结束。

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

HTTP报文常见的内容:http://www.cnblogs.com/Joans/p/3956490.html\

使用火狐浏览器打开一个网页,找到其中一个网络请求查看报文:


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