http学习笔记——章节02_初步了解http

知识点:

  • http通信初识
  • 无状态和资源定位
  • http相关方法
  • 持久连接和管线化
  • 使用cookie进行状态管理

1. http通信初识

两台计算机使用http进行通信时吧,在一条通信路上必定有一端为客户端,另一端为服务器端

通信方式为:客户端发出请求信息,服务器接收请求并返回响应信息
在这里插入图片描述

1.1 先来看请求信息

GET /index.htm HTTP/1.1 Host: hackr.jp

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

综上: 请求报文是由请求方法、 请求 URI、协议版本、可选的请求首部字段和内容实体构成的
在这里插入图片描述

1.2 再来看响应信息

HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
......
  • 开头的HTTP/1.1 表示服务器端对应的HTTP版本。 200 OK 表示请求的处理结果的状态码( status code)和原因短语( reason-phrase)
  • 第二行显示了创建响应的日期时间,它是首部字段中的一个属性
  • 下面俩个同为首部字段的属性,它反映了主体的信息
  • 最后的html片段则就是资源主体的实体

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

2. 无状态和资源定位

2.1 无状态

http是一个不保存状态的协议,即它不会对请求和响应之间的通信状态进行保存。也就是说都是转眼不认人的那种。

为什么这么设计?

要保存相应的状态信息,就肯定需要cpu和内存空间。为了使它能够更快速的处理大量事务,确保协议的可伸缩性。特意把它设计成这么简单的。

2.2 请求 URI 定位资源

http使用URI进行资源的定位,使得客户端可以通过它获取或访问资源

客户端因请求访问资源而发送请求信息时,要将URI放到请求报文中。来看几种指定请求URI的方式

  • URI为完整的请求URIGET http://hackr.jp/index.htm HTTP/1.1
  • 在首部字段Host中写明网络域名或IP地址 GET /index.htm HTTP/1.1 Host: hackr.jp

如果不是对某个特定的资源进行请求或访问,而是本事就是想对这个服务器本身发起请求,可以使用*来替代请求URI
栗子:
OPTIONS * HTTP/1.1

3. http相关方法

3.1 get

GET 方法用来请求访问资源,指定的资源经过服务器端解析之后返回响应内容。即如果是文本就原样返回;如果是程序,则返回执行结果

3.2 post

POST用来传输实体的主体,虽然GET也能传输实体(如地址栏传参)但是一般实体的传输都是用POST,GET的主要目的是获取资源POST则不然

3.3 put

PUT方法用来传输文件,如同FTP协议的文件上传。要求在请求报文的主体中包含文件内容信息,然后根据URI保存到它其指定的位置上
但是HTTP/1.1 的 PUT 方法自身不带验证机制,即任何人都可以向该服务端上传文件存在安全问题,故一般的web网站不会使用这个方法。若是配合web应用程序的验证机制,或者架构设计采用REST标准的同类web网站,就可能会开发put方法

3.4 HEAD

与get方法一样,只不过它所返回的响应报文不包含主体部分。只是为了确认URI的有效性及资源更新的日期

3.5 DELETE

DELETE用来删除上传的文件与PUT正好相反

3.6 OPTIONS

这个方法用来查询要请求URI资源所支持的方法,比如对方资源可能只支持get、post等

3.7 TRACE

路径追踪,这个办法是让web服务器端将之前的请求通信环回返给客户端

如:在客户端发送一个请求时,会在请求报文首部字段一个叫Max-Forwards的属性中填入一个数值,这个请求每经过一个中转服务器Max-Forwards里面的值便会减一,当它数值减到0时便会停止继续传输此时便正好到达了URI所定位的资源服务器端

这个方法容易引起XST(跨站追踪攻击)一般不会使用

3.8 CONNECT

这个方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密之后经过网络隧道传输

4. 持久连接和管线化

4.1 持久连接

为什么会用持久连接?
在http的初始版本中每进行一次HTTP通信便要断开一次TCP连接,这种设计可能适合当时的web环境。可是到如今一个好点页面几十张上百张大图片小图片。还有各种静态资源,如果还是每通信一次断开一次连接那不说cpu和内存的消耗。但用户体验便差到极点了吧(每次重复上百次三次握手四次挥手疯了)
为了解除这个问题,便出现了持久连接。持久连接的特点是只要任意一端没有明确提出断开连接,则保持TCP连接的状态

4.2 管线化

管线化是继持久连接的进一步优化,持久连接的实现使多数请求以管线化方式发送成为可能。
以前客户端发送了一个请求,只有收到了服务器端给额响应才能进行发送下一个请求,管线化的出现打破了这一规律。使得客户端不用等到响应信息直接可发送下一个请求

5. 使用cookie进行状态管理

我们已经知道为了尽可能的减少cpu和内存的消耗,http是无状态的。但是现实应用中我们又需要它保存状态。于是引进了cookie技术
cookie是通过在请求和响应报文中写入cookie信息的方式来控制它们状态的
流程

  1. 首先客户端向服务器端发送请求,服务器端在会响应报文中加一个Set-Cookie的首部字段信息来通知客户端保存cookie。并做下记录
  2. 当下次客户端再向该服务器发送请求时会自动给自己的请求报文加入保存的cookie
  3. 服务器端收到此cookie时会对比服务器端的记录检查它是哪个客户端(毕竟服务器端授予cookie的客户端不止),从而得到之前的状态信息

猜你喜欢

转载自blog.csdn.net/qq_41086511/article/details/105545099