- python3搭建简单的HTTP服务器:python3 -m http.server 8080
URL
- URI:统一资源标示符
- URL:统一资源定位符。URL描述了一台特定服务器上某资源的特定位置
- URN:统一资源名。URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。URN仍处于试验阶段,未大范围使用
URL格式分为三个部分:
- URL的第一部分被称为方案,说明了访问资源所使用的协议类型。
- 第二部分给出了服务器的地址
- 第三部分指定了服务器上的某个资源
方案 |
地址 |
资源 |
http:// |
127.0.0.1:8080 |
/README.txt |
ftp:// |
127.0.0.1:8080 |
/README.txt |
组件 |
描述 |
方案 |
访问服务器资源时使用的协议。方案名是大小写无关的 |
用户 |
某些方案访问资源需要的用户名 |
密码 |
用户名后面包含的密码,中间用冒号分割 |
主机 |
资源服务器的主机名或IP地址 |
端口 |
资源服务器监听的端口号 |
路径 |
服务器上资源的本地名,由一个斜杠将其与前面的URL组件分割 |
参数 |
某些方案会用这个组件来指定输入参数。参数为名/值对。URL可以包含多个参数字段,相互之间以及路径的其他部分用封号分割 |
查询 |
某些方案用这个组件传递参数以激活应用程序。查询组件的内容没有通用格式,用字符?将其与URL其他部分分割 |
片段 |
一小片或一部分资源的名字,引用对象时,不会将frag字段传给服务器。这个字段是在客户端内部使用的,通过#将其与URL的其他部分分割 |
字符 |
保留/受限 |
% |
保留,用于转义, 如%20表示空格 |
/ |
保留,路径组件分割路径 |
. |
保留,在路径组件中使用 |
.. |
保留,在路径组件中使用 |
# |
保留,分段定界符 |
? |
保留,查询定界符 |
; |
保留,参数定界符 |
: |
保留,作为方案、用户/口令,以及主机/端口组件的定界符 |
$ + |
保留 |
@ & = |
保留,在某些方案的上下文中有特殊含义 |
{ } | \ ^ ~ [ ] ' |
受限,由于各种传输Agent代理,比如各种网管的不安全处理 |
< > " |
不安全,这些字符在URL范围之外通常是有意义的 |
0x00 - 0x1F, 0x7F |
受限,不可打印 |
>0x7F |
受限,不在ASCII7位二进制范围内 |
HTTP概述
- HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者来自服务器的响应。由三部分组成:对报文进行描述的起始行、包含属性的首部块,以及可选的、包含数据的主体部分。起始行和首部就是用行分割的ASCII文本,每行都以\r\n终止。注意,一组HTTP的首部总是以\r\n结束,即使没有首部与实体的主体部分也应如此。报文的主体是一个可选的数据块,可以包含文本、二进制信息、为空。
HTTP报文包含三个部分:
- 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现什么情况
- 首部字段: 起始行后面跟零或多个首部字段,每个首部字段都包含一个名字和一个值,为了便于解析,两者用冒号分割。首部以一个空行结束
- 主体:空行之后就是可选的报文主体,其中包含了所有类型的数据。请求主体中包含了要发送给Web服务器的数据。响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且结构化的,而主体却可以包含任意的二进制数据
-
HTTP报文分为请求报文和响应报文。请求报文向Web服务器请求一个动作,响应报文会将请求的结果返回给客户端。请求报文和响应报文的基本报文结构相同。
请求报文格式:
<method> <request-url> <version>
<headers>
<entity-body>
响应报文格式:
<version> <status> <reason-phrase>
<head>
<entity-body>
Http方法 |
描述 |
GET |
从服务器向客户端发送命名资源 |
PUT |
将来自客户端的数据存储到一个命名的服务器资源中 |
DELETE |
从服务器中删除命名资源 |
POST |
将客户端数据发送到一个服务器网关应用程序 |
HEAD |
仅发送命名资源响应中的HTTP首部 |
HTTP状态码 |
描述 |
200 |
正确 |
302 |
重定向,到其他地方去获取资源 |
404 |
资源未找到 |
请求报文
GET /Test.txt HTTP/1.1
Accept:*
响应报文
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.4.3
Date: Sun, 05 May 2019 14:16:33 GMT
Content-type: text/plain
Content-Length: 22
Last-Modified: Sun, 05 May 2019 14:15:32 GMT
Hello World
Bad World
- Http是应用层协议,一般依赖于TCP/IP协议
- Http的默认端口是80
- HTTP/1.1是当前使用的HTTP版本
网友评论