简述http协议

  • 超文本传输协议(HyperText Transfer Protocol)是一种应用层协议。
  • HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
  • 请求request-响应response 式模式

Content-Type指示响应的内容

请注意,浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是http://www.baidu.com/meimei.jpg,它也不一定就是图片。

浏览器解析过程

当浏览器读取到新浪首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给新浪服务器,拿到相应的图片、视频、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求。

1. HTTP协议特点

  • 传输网页资源的协议
  • 基于TCP协议实现的应用层协议
  • 99年公布HTTP/1.1版本
  • 请求request-响应response式

2. HTTP请求报文格式说明

  • GET / HTTP/1.1
  • 请求行 request line
    • 请求方法 资源请求路径
  • HTTP协议版本\r\n
    • GET方法浏览器获取网页资源
    • POST方法浏览器向服务器发送数据

请求行 后续都是请求头部[头名称: 头值\r\n]

  • Host: itcastcpp.cn
    • 代表 浏览器请求的主机名字
  • Connection: keep-alive
    • 代表长连接keep-alive 还是 短连接close方式
  • User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) - - - - - Chrome/64.0.3282.186 Safari/537.36
    • 代表 浏览器身份 网页适配 初步反爬
  • Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
    • 代表浏览器能够接受的 文件类型
  • Accept-Encoding: gzip, deflate
    • 可以接受的压缩方式 -- 节约带宽资源 提高文件的传输效率
  • Accept-Language: zh-CN,zh;q=0.9
    • 可以接受的语言文件
  • 空行 \r\n
  • 请求体
    • GET方式请求 一般请求体为空
    • POST方式请求 请求体中存储的就是 浏览器要发送给服务器的数据(图片 文件 用户数据)

3. HTTP请求报文总结

  • 请求行[方法 资源请求路径 版本\r\n]
  • 请求头[头名称: 头值\r\n]
  • 空行 [\r\n]
  • 请求体[浏览器要发送给服务器的数据]

4. HTTP请求数据的实例

GET / HTTP/1.1\r\nHost: 127.0.0.1:8888\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7\r\n
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
X-Lantern-Version: 4.4.2\r\n
\r\n

5. HTTP响应数据实例-了解

HTTP/1.1 200 OK\r\n
Server: nginx/1.6.3\r\nDate: Sun, 11 Mar 2018 04:33:10 GMT\r\n
Content-Type: text/html\r\nContent-Length: 612\r\n
Last-Modified: Sat, 02 Sep 2017 15:23:27 GMT\r\n
Connection: keep-alive\r\nETag: "59aaccef-264"\r\n
Accept-Ranges: bytes\r\n
\r\n
<!DOCTYPE html>
\n<html>
\n<head>\n
<title>Welcome to nginx!</title>
\n<style>\n    
body {
\n        width: 35em;
\n        margin: 0 auto;
\n        font-family: Tahoma, Verdana, Arial, sans-serif;
\n    }
\n</style>
\n</head>
\n<body>
\n<h1>Welcome to nginx!</h1>
\n<p>If you see this page, the nginx web server is successfully installed and\nworking. Further configuration is required.</p>\n
\n<p>For online documentation and support please refer to
\n<a href="http://nginx.org/">nginx.org</a>.<br/>\nCommercial support is available at
\n<a href="http://nginx.com/">nginx.com</a>.</p>\n
\n<p><em>Thank you for using nginx.</em></p>
\n</body>
\n</html>
\n
<think>我们被要求简述HTTP协议的主要特点,并在最后提出3-5个相关问题。 根据HTTP/1.1的标准以及常见特性,我们可以总结如下: 1. 无状态(Stateless):默认情况下,HTTP协议不会保留之前请求的任何信息。每个请求都是独立的。 2. 基于请求/响应模型(Request-Response):客户端发送一个请求,服务器返回一个响应。 3. 可扩展(Extensible):通过HTTP头部可以扩展功能(如新的方法、状态码等)。 4. 支持多种方法(Methods):如GET、POST、PUT、DELETE等。 5. 无连接(Connectionless):在HTTP/1.0中,每次请求响应后都会断开连接。HTTP/1.1引入了持久连接(默认保持连接)来改善性能。 6. 支持缓存(Caching):通过特定的头部(如Cache-Control)来控制缓存行为。 7. 支持内容协商(Content Negotiation):客户端和服务器可以通过头部(如Accept-*)协商内容类型、语言等。 8. 分层系统(Layered System):中间可以有代理、网关等中间层,而客户端和服务器不需要知道中间层存在。 9. 明文传输(明文协议):HTTP默认是明文传输(虽然现在普遍使用HTTPS加密,但HTTP本身是明文)。 注意:现在广泛使用的是HTTPS,即HTTP over TLS/SSL,它提供了加密、身份验证和完整性保护,但HTTP协议本身并不提供这些。 根据以上内容,我们组织回答,并在最后按照要求提出3-5个相关问题。</think>### HTTP协议主要特点 #### 1. 无状态协议 (Stateless) - **核心特点**:服务器不保存客户端状态信息 - **解决方案**:通过Cookies/Session机制维持状态 - **示例**:用户登录状态需每次请求携带身份凭证 #### 2. 基于请求/响应模型 (Request-Response) - **通信模式**: ```mermaid graph LR A[客户端] -->|HTTP请求| B[服务器] B -->|HTTP响应| A ``` - **请求结构**: ``` GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 ``` - **响应结构**: ``` HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234 <html>...</html> ``` #### 3. 支持多种方法 (Methods) | 方法 | 幂等性 | 安全 | 典型用途 | |---------|--------|------|------------------------| | GET | 是 | 是 | 获取资源 | | POST | 否 | 否 | 创建资源/提交数据 | | PUT | 是 | 否 | 完整更新资源 | | DELETE | 是 | 否 | 删除资源 | | HEAD | 是 | 是 | 获取响应头 | | PATCH | 否 | 否 | 部分更新资源 | #### 4. 可扩展性强 (Extensible) - **头部扩展**:自定义头部字段(如`X-API-Version`) - **方法扩展**:支持自定义方法(如`PURGE`) - **状态码扩展**:补充状态码(如`418 I'm a teapot`) #### 5. 连接管理机制 - **HTTP/1.0**:短连接(每个请求新建TCP连接) - **HTTP/1.1**:持久连接(默认`Connection: keep-alive`) - **HTTP/2**:多路复用(单个连接并行处理请求) - **HTTP/3**:基于QUIC协议(解决队头阻塞) #### 6. 内容协商机制 (Content Negotiation) - **类型协商**:`Accept` / `Content-Type` ```http Accept: text/html, application/xhtml+xml Content-Type: application/json ``` - **语言协商**:`Accept-Language` - **编码协商**:`Accept-Encoding: gzip, br` #### 7. 缓存控制 (Caching) - **强缓存**: ```http Cache-Control: max-age=3600 Expires: Wed, 21 Oct 2025 07:28:00 GMT ``` - **协商缓存**: ```http ETag: "33a64df5" If-None-Match: "33a64df5" ``` #### 8. 分层架构 - **典型分层**: ``` 应用层:HTTP 传输层:TCP/TLS 网络层:IP 链路层:以太网/WiFi ``` - **中间组件**:代理、网关、CDN等可介入处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值