1. 协议基础:
HTTP是一种请求-响应协议,客户端发起请求,服务器响应请求。
2. 无状态性:
每个HTTP请求都是独立的,服务器不会保存请求之间的状态信息。这意味着服务器无法识别两个请求是否来自同一个客户端。
例子:
假设你访问一个网站,每次点击链接或提交表单,浏览器都会发送一个新的HTTP请求。服务器处理每个请求,但不会记住你之前访问了哪些页面。
3. 连接:
HTTP/1.1之前,每个请求/响应都需要建立一个新的TCP连接。HTTP/1.1引入了持久连接(Persistent Connection),允许在一个TCP连接上发送多个请求和响应。
例子:
打开一个网页,页面中的图片、CSS文件和JavaScript文件都可以通过同一个TCP连接加载,而不是每个资源都建立一个新的连接。
4. 请求方法:
HTTP定义了多种请求方法,用于不同的操作:
GET:请求数据。
POST:提交数据,通常用于表单提交。
PUT:更新数据。
DELETE:删除数据。
例子:
当你访问一个网页时,浏览器会发送一个GET请求。当你在网站上注册账户并提交表单时,浏览器会发送一个POST请求。
5. 资源定位:
每个资源都有一个唯一的URI(Uniform Resource Identifier,统一资源标识符),通常是URL(Uniform Resource Locator,统一资源定位符)。
例子:
访问 http://www.example.com/index.html,这里的URL指向服务器上的特定资源。
6. HTTP消息:
HTTP通信由HTTP消息组成,包括请求消息和响应消息。
请求消息包括请求行(方法、URI、HTTP版本)、请求头部、空行和请求体。
响应消息包括状态行(HTTP版本、状态码、状态信息)、响应头部、空行和响应体。
例子:
请求
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept-Language: en-US
响应
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Last-Modified: Wed, 21 Oct 2015 14:26:38 GMT
<html>
...
</html>
7. 状态码:
服务器响应包含一个三位数字的状态码,表示请求的结果。
常见的状态码包括:
200 OK:请求成功。
404 Not Found:请求的资源未找到。
500 Internal Server Error:服务器内部错误。
例子:
如果你尝试访问一个不存在的页面,服务器可能会返回一个404状态码。
8. 头部字段:
HTTP头部字段提供了关于请求或响应的附加信息,如:
Content-Type:指定返回内容的MIME类型。
Content-Length:指定返回内容的长度。
Set-Cookie:服务器用来设置客户端的cookie。
例子:
请求头部可能包含 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,表示客户端可以接受的MIME类型。
9. 安全性:
HTTP本身不加密数据,因此容易受到窃听和篡改。HTTPS通过在HTTP上添加SSL/TLS层来提供加密、身份验证和数据完整性。
例子:
当你访问 https://www.example.com 时,浏览器和服务器之间的通信是加密的,保护了你的数据安全。
10. 缓存:
HTTP提供了缓存机制,允许客户端存储之前请求的响应,减少重复请求相同资源的次数。
例子:
如果你之前访问过一个网页,浏览器可能会缓存该页面的一些资源,当你再次访问时,浏览器可以直接使用缓存的资源,而不需要重新从服务器加载。