http的初步学习
@(示例)[关键字,知识点,图表,帮助]
1. http的简介
1.1. 定义
http协议的英文名称为HyperText Transfer Protocol,全称为超文本传输协议。它是应用层协议,基于TCP和IP传输数据。
1.2. 特点
- 明文传输。安全性比较差。一般我们访问银行和电子交易的网站,登陆和付款时需要下载插件,利用插件加保密文件。
- 无状态。在浏览器和服务器进行数据传输和交互时,但我们输用户名和密码实现登陆,服务器就可以知道怎么作,我们就不需要进行下一步的操作。这属于保存状态了。但是单纯的HTTP协议是无法保存我们的状态,每次登陆都要重新登陆一次。
- 应用层协议。目前版本为HTTP/1.1,效率比较低。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
1.3 类型
静态超文本
客户端直接通过 URL请求到服务端相对应的资源,服务端直接将部署在数据库或者文件系统中的标签语言文件返还给客户端
动态超文本
动态超文本需要通过软件技术来实现创建和处理动态文本,例如CGI,JavaServlet等技术,将URL中‘?’之后的动态部分做解析并生成动态文档,并且可以嵌入脚本语言交付给浏览器中的解析引擎来提高动态文档的效率,使文档中不必要的重复的部分独立解析完成,甚至可以实现活动文档,直接在文档上运行字节码形式的java程序或者javascript脚本。
2.http消息结构
2.1 客户端请求消息
http协议的请求消息的格式如下:请求行,请求头部,空行,请求数据。
1. 请求行
请求方法 | 空格 | URL | 空格 | 协议版本 | 回车符 | 换行符 |
---|
2. 请求头部
头部字段名 | : | 值 | 回车符 | 换行符 |
---|
3. 空行
回车符 | 换行符 |
---|
4. 请求数据
数据 |
---|
2.2 请求消息示例
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
2.3 服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
1. 状态行
协议版本 | 空格 | 状态代码 | 空格 | 状态代码英文名称 |
---|
2. 消息报头
Date | : | 星期几 | , | 日 | 空格 | 月 | 空格 | 年 | 空格 | 时 | : | 分 | : | 秒 | 空格 | GMT |
---|
Contect-Type | : | 文档类型 | charset |
---|
Contect-Length | : | 字长 |
---|
3. 空行:同上;
4. 响应正文,如果是text/html则是html文件。
2.4 响应消息实例
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
2.5 实例分析
- 消息报头
关键概念 | 含义 | 实现 |
---|---|---|
GMT | 格林威治时间,中国东八区,加8个小时 | |
Last-Modified | Last-Modified的属性标记此文件在服务器端最后被修改的时间。 | 服务器端的资源没有变化,则自动返回 HTTP 304(Not Changed.)状态码。 |
ETag | 用于标示URL对象是否改变 | 服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体。 |
Accept-Encoding | HTTP Header中Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型 | 默认是identity |
text/plain | 纯文本类型 |
2. 协议版本
- http/1.1
- http/1.0
3. 状态代码
状态代码1 | 内涵 | 具体状态 | 内涵 | 具体状态 | 内涵 | ||
---|---|---|---|---|---|---|---|
1XX | 临时响应 | 100 | 继续 | 203 | 非授权信息 | ||
2XX | 请求成功 | 101 | 切换协议 | 204 | 无内容 | ||
3XX | 已重定向 | 200 | 请求成功 | 205 | 重置内容 | ||
4XX | 客户端请求错误 | 201 | 已创建 | 206 | 部分内容 | ||
5XX | 服务器请求错误 | 202 | 已接受 | 300 | 多种选择 |
(续上)
具体代码 | 内涵 | 具体代码 | 内涵 | 具体代码 | 内涵 | ||
---|---|---|---|---|---|---|---|
301 | 永久移动 | 307 | 临时重定向 | 405 | 方法禁用 | ||
302 | 临时移动 | 400 | 错误请求 | 406 | 不接受 | ||
303 | 查看其他位置 | 401 | 未授权 | 407 | 需要代理授权 | ||
304 | 未修改 | 403 | 已禁止 | 408 | 请求超时 | ||
305 | 使用代理 | 404 | 未找到 | 409 | 请求冲突 |
(续上)
具体代码 | 内涵 | 具体代码 | 内涵 | 具体代码 | 内涵 | ||
---|---|---|---|---|---|---|---|
410 | 已删除 | 415 | 不支持的媒体类型 | 502 | 错误网关 | ||
411 | 需要有效长度 | 416 | 请求范围不符合要求 | 503 | 服务不可用 | ||
412 | 为满足条件 | 417 | 请求不满足期望值 | 504 | 网关超时 | ||
413 | 请求实体过大 | 500 | 服务器内部错误 | 505 | http版本不受支持 | ||
414 | 请求URL过长 | 501 | 尚未实施 |
4. Content-Type
常用Content-Type对照表2
文件扩展名 | content-type | 描述 |
---|---|---|
.* | application/octet-stream | 二进制流,不知道下载文件类型 |
application/pdf | PDF(Portable Document Format的简称,意为“便携式文件格式”) | |
.ai | application/postscript | PostScript(PS)是主要用于电子产业和桌面出版领域的一种页面描述语言和编程语言。 |
.xml | application/atom+xml | Atom feeds |
.js | application/ecmascript | 相当于application/javascript但是严格的处理规则 |
文件扩展名 | content-type | 描述 |
---|---|---|
.edi | application/EDI-X12 | EDI ANSI ASC X12数据 |
.edi | application/EDIFACT | EDI EDIFACT数据 |
.json | application/json | JSON(JavaScript Object Notation) |
.js | application/javascript | ECMAScript/JavaScript(相当于application/ecmascript但是宽松的处理规则) |
.ogg | application/ogg | Ogg, 视频文件格式 |
.rdf | application/rdf+xml | 资源描述框架(Resource Description Framework,缩写 RDF),是万维网联盟(W3C)提出的一组标记语言的技术标准,以便更为丰富地描述和表达网络资源的内容与结构。 |
文件扩展名 | content-type | 描述 |
---|---|---|
.xml | application/rss+xml | RSS(Really Simple Syndication,简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章、新闻、音频或视频的网摘 |
.xml | application/soap+xml | 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。 |
.woff | application/font-woff | Web开放字体格式(Web Open Font Format,简称WOFF)是一种网页所采用的字体格式标准。(推荐使用;使用application/x-font-woff直到它变为官方标准) |
.xhtml | application/xhtml+xml | 可扩展超文本标记语言(eXtensible HyperText Markup Language,XHTML),是一种标记语言,表现方式与超文本标记语言(HTML)类似,不过语法上更加严格。 |
.xml | application/xml | 可扩展标记语言(英语:eXtensible Markup Language,简称: XML),是一种标记语言。 |
文件扩展名 | content-type | 描述 |
---|---|---|
.dtd | application/xml-dtd | XML文件的文件型别定义(Document Type Definition)可以看成一个或者多个XML文件的模板,在这里可以定义XML文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。 |
.xml | application/xop+xml | 二进制优化封装协议(Xmlbinary Optimized Packaging) |
.zip | application/zip | ZIP压缩文件 |
.gzip | application/gzip | Gzip是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。 |
.xls | application/x-xls | XLS 就是 Microsoft Excel 工作表,是一种非常常用的电子表格格式。 |
5.请求方法3
- GET:
- 描述:请求指定的页面信息,并返回实体主体;
- HEAD:
- 描述: 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
- POST:
- 描述: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请 求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT
- 描述:从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE
- 描述:请求服务器删除指定的页面。
- CONNECT
- 描述:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS
- 描述:允许客户端查看服务器的性能。
-
TRACE
- 描述: 回显服务器收到的请求,主要用于测试或诊断。
6.总结
6.1 不懂的知识
- HTTP协议应该写在什么文件中,怎么运行的?
- HTTP协议中的cookie和session?
- HTTP协议与JavaScript的关系?
6.2 感想
学了HTTP协议,感觉前端要学东西慢慢出现了,是越来越接近前端的本质了吗?之前学了前端的三种语言,现在学因特网五层协议,感觉大佬让我们学习的顺序是有一定的道理的,跟着他的指导方向走,前面应该就是前端的奥秘吧!
参考文献