文章目录
1. HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
一次HTTP请求的基本流程一般是,在建立TCP连接后,由客户端向服务端发起一次请求(request),而服务器在接收到以后返回给客户端一个响应(response)。
所以我们看到的HTTP请求内容一般就分为请求和响应两部分。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。
默认HTTP的端口号为80。
HTTP是一个无状态的协议。
2. 无状态协议
HTTP协议是无状态的,也就是说每一次HTTP请求之间都是相互独立的,没有联系的,服务端不知道客户端具体的状态。
比如客户端访问一次网页之后关闭浏览器,然后再一次启动浏览器,再访问该网站,服务器是不知道客户关闭了一次浏览器的。
3. HTTP请求
每一个HTTP请求都由三部分组成,分别是:请求行、请求报头、请求正文。
4. HTTP响应
HTTP响应同样也是由状态行、响应报头、报文主体三部分组成。
5. HTTP请求方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
虽然HTTP请求中定义的方法有这么多种,但是我们平常使用的基本只有GET
和POST
两种方法,而且大部分网站都是禁用掉了除GET
和POST
外其他的方法。
因为其他几种方法通过GET
或者POST
都能实现,而且对于网站来说更加的安全和可控。
-
GET
其实简单来说,
GET
方法一般用来负责获取数据,或者将一些简短的数据放到URL参数中传递到服务器。比POST
更加高效和方便。 -
POST
由于
GET
方法最多在url中携带1024字节数据,且将数据放到URL中传递太不安全,数据量大时URL也会变得冗长。所以传递数据量大或者安全性要求高的数据的时候,最好使用POST
方法来传递数据。
6. 状态码(status code)
HTTP的状态码是由三位数字来表示的,由第一位数字来表示状态码的类型,一般来说有五种类型:
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
7. Cookie
指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
Cookie
其实就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。 服务器在接收到Cookie
以后,会验证Cookie
的信息,以此来辨别用户的身份。
Cookie
可以理解为一个临时通行证。
8. 作用
Cookie
其实是HTTP请求头的扩展部分,由于HTTP协议是无状态的协议,所以为了在网页上实现登陆之类的需求,所以扩展了Cookie
这样的功能。
每一次HTTP请求在数据交换完毕之后就会关闭连接,所以下一次HTTP请求就无法让服务端得知你和上一次请求的关系。而使用了Cookie
之后,你在第一次登陆之类的请求成功之后,服务器会在Response
的头信息中给你返回Cookie
信息,你下一次访问的时候带上这个Cookie信息,则服务器就能识别你为上一次成功登陆的用户。
9. Session
Session的目的则是,在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。
Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionId来进行判定,所以相对于Cookie,Session的安全性更高。
一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效。