Linux之HTTP协议

资料:《图解HTTP》

一.HTTP简介
(1) HTTP协议(超文本传输协议),是用于从万维网服务器传输超文本到本地浏览器的传送协议。
(2) HTTP基于TCP/IP通信协议来传递数据,包括HTML文本、图片文件和查询结果等。
(3) HTTP是一个属于应用层的面向对象的协议,工作于客户端-服务器架构以上。浏览器作为HTTP客户端通过URL向HTTP服务端(web)发送所有请求,Web服务器根据接受到的请求后,想客户端发送相应信息。
(4) 其主要特点有简单快速、灵活、无连接、无状态和支持B/S及C/S模式。


二.HTTP之URI

URI是统一资源标识符,用来唯一的标识一个资源。Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个由URI来定位的。
这里写图片描述

使用 http: 或 https: 等协议方案名获取访问资源时要指定协议类型。 不区分字母大小写, 最后附一个冒号(:) 。也可使用 data: 或 javascript: 这类指定数据或脚本程序的方案名。
登录信息(认证)
指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证) 。 此项是可选项。
服务器地址
使用绝对 URI 必须指定待访问的服务器地址。 地址可以是类似hackr.jp 这种 DNS 可解析的名称, 或是 192.168.1.1 这类 IPv4 地址名, 还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。
服务器端口号
指定服务器连接的网络端口号。 此项也是可选项, 若用户省略则自动使用默认端口号。
带层次的文件路径
指定服务器上的文件路径来定位特指的资源。 这与 UNIX 系统的文件目录结构相似。
查询字符串
针对已指定的文件路径内的资源, 可以使用查询字符串传入任意参数。 此项可选。
片段标识符
使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置) 。 但在 RFC 中并没有明确规定其使用方法。 该项也为可选项。


三.HTTP之URL

URL是统一资源定位器,它是一种具体的URI,即URL可以用来表示一个资源,而且还指明了如何locate(定位)这个资源。URL是internet上用来描述信息资源的字符串,主要用在各种客户程序和服务器上。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部分组成:
(1) 协议(或称为服务方式)
(2) 存有该资源的主机IP地址(有时也包括端口号)
(3) 主机资源的具体地址,如目录和文件名等。

HTTP之URN

URN统一资源命名,是通过名字来表示资源,
URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。

四.HTTP工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

这里写图片描述
这里写图片描述
五.HTTP的方法:

GET:获取资源

GET方法就是请求访问已经被URI识别的资源,指定的资源在经过服务器解析之后返回给相应内容。
例:
GET /index.htm HTTP/1.1
Host: hackr.jp

起始行开头的GET表示请求访问服务器的类型, 称为方法(method) 。 随后的字符串 /index.htm 指明了请求访问的资源对象,也叫做请求 URI(request-URI) 。 最后的HTTP/1.1, 即 HTTP 的版本号, 用来提示客户端使用的 HTTP 协议功能。

响应返回 index.html 的页面资源

POST:传输实体的主体

POST方法用来传输实体的主体。

例:
POST /submit.cgi HTTP/1.1
Host: www.hackr.jp
Content-Length: 1560(1560字节的数据)

响应返回 submit.cgi 接收数据的处理结果

这里写图片描述

请求报文是由请求方法、 请求 URI、 协议版本、 可选的请求首部字段和内容实体构成的。

PUT:传输文本
PUT 方法用来传输文件。 就像 FTP 协议的文件上传一样, 要求在请求报文的主体中包含文件内容, 然后保存到请求 URI 指定的位置。
例:
PUT /example.html HTTP/1.1
Host: www.hackr.jp
Content-Type: text/html
Content-Length: 1560(1560 字节的数据)

响应返回状态码 204 No Content(比如 : 该 html 已存在于服务器上)

HEAD: 获得报文首部

HEAD 方法和 GET 方法一样, 只是不返回报文主体部分。 用于确认URI 的有效性及资源更新的日期时间等。
例:
HEAD /index.html HTTP/1.1
Host: www.hackr.jp

响应 返回index.html有关的响应首部

DELETE:删除文件
DELETE方法就是请求URI删除指定的资源。
因为DETETE方法本身和PUT方法一样不带验证机制,所以一般Web网站不适用DELETE的方法。

例:
DELETE /example.html HTTP/1.1
Host: www.hackr.jp
响应 响应返回状态码 204 No Content(比如 : 该 html 已从该服务器上删除)

OPTIONS: 询问支持的方法
OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
例:
OPTIONS * HTTP/1.1
Host: www.hackr.jp

**响应**HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS(返回服务器支持的方法)

TRACE: 追踪路径
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。

CONNECT: 要求用隧道协议连接代理
CONNECT 方法要求在与代理服务器通信时建立隧道, 实现用隧道协议进行 TCP 通信。 主要使用 SSL(Secure Sockets Layer, 安全套接层) 和 TLS(Transport Layer Security, 传输层安全) 协议把通信内容加 密后经网络隧道传输

GET和POST的区别

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
  3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

响应报文
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html

……
在起始行开头的 HTTP/1.1 表示服务器对应的 HTTP 版本。紧挨着的 200 OK 表示请求的处理结果的状态码(status code) 和原因短语(reason-phrase) 。 下一行显示了创建响应的日期时间, 是首部字段(header field) 内的一个属性。接着以一空行分隔, 之后的内容称为资源实体的主体(entitybody) 。

这里写图片描述
响应报文基本上由协议版本、 状态码(表示请求成功或失败的数字代码) 、 用以解释状态码的原因短语、 可选的响应首部字段以及实体主体构成。
这里写图片描述

HTTP的持久连接就是建立1次TCP连接后进行多次请求和响应的交互,持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

六.状态码
状态码
状态码由3位数字+原因短语组成
第一位数字指定了响应类别(后两位无分类)
1XX 信息性状态码 接受的请求正在处理
100 Continue 客户端告诉服务器端还有数据要发送

2XX 成功状态码 请求正常处理完毕
200 OK 请求成功

3XX 重定向状态码 需要进行附加操作以完成请求
301 Moved Permanently 资源被转移走了,请求将被重定向
302 Found 通知客户端资源能在其他地方找到,但是需要用GET方法来获取他
304 Not Modifind 表示被申请的资源没有更新,和之前获得的相同
307 Temporary Redlirect 通知资源能在其他地方找到,和302不同的是,客户端可以使用和原始请求相同的请求方法来访问目标资源

4XX 客户端错误状态码 服务器无法处理请求
400 Bad Request 通知客户请求错误
401 Unauthorized 请求需要认证消息
403 Forbidden 访问被服务器禁止,通常是由于客户端没有权限访问该资源
404 Not Found 资源没找到
407 Proxy Authentication Required 客户端需要先获得代理服务器的认证

5XX 服务端错误状态码 服务器处理请求出错
500 Intrenal Server Error 通用服务器错误
503 Service Unavailable 暂时无法访问服务器

猜你喜欢

转载自blog.csdn.net/qq_39110766/article/details/79716525
今日推荐