http初识

启动web服务的软件视为中间件

静态网页

html、JavaScript等,没有办法调用系统资源(CMD,BASH),源码公开

(nodejs使用JavaScript,但是可以与数据库交互)

动态网页

php、java,与数据库做交互

中间件服务器

apache:轻量级web服务,常与php一起(lamp,mysql、php、apache),不适用于访问量过大或多线程

nginx:负载均衡、反向代理

tomcat:JAVA,专为javaweb设计

数据库

mysql,Redis

HTTP协议

只负责传输

起始行

格式:方法 + 请求目标 + HTTP版本

  • 方法(Method)
    • GET:获取资源
    • POST:提交数据
    • PUT:更新资源
    • DELETE:删除资源
    • HEAD:获取响应头(无Body)
    • PATCH:部分更新
    • OPTIONS:查询服务器支持的HTTP方法
  • 请求目标(Request Target)
    • 通常是URL路径(如 /api/users),或完整URL(代理场景)。
  • HTTP版本
    • HTTP/1.0HTTP/1.1(主流)、HTTP/2HTTP/3

请求头

头部字段 作用说明 示例值
Host 目标服务器域名(HTTP/1.1必需) Host: www.example.com
User-Agent 客户端标识(浏览器/爬虫等) User-Agent: Chrome/120.0
Accept 客户端支持的响应内容类型 Accept: application/json
Content-Type 请求Body的类型(POST/PUT必需) Content-Type: application/json
Content-Length 请求Body的字节长度 Content-Length: 128
Authorization 身份凭证(如Token) Authorization: Bearer xxxx
Cookie 客户端携带的Cookie Cookie: session_id=abc123
Cache-Control 缓存策略(如 no-cache Cache-Control: max-age=3600

请求Body

  • 存在场景POSTPUTPATCH等需要提交数据的请求。
  • 格式:由Content-Type指定:
    • application/json:JSON数据
    • application/x-www-form-urlencoded:表单数据(如 name=John&age=30
    • multipart/form-data:文件上传

HTTP响应报文

1. 起始行(状态行)

格式:HTTP版本 + 状态码 + 状态描述
示例:

HTTP/1.1 200 OK
  • 状态码(Status Code)
    • 1xx:信息性状态码(如 101 Switching Protocols
    • 2xx:成功(如 200 OK201 Created
    • 3xx:重定向(如 301 Moved Permanently304 Not Modified
    • 4xx:客户端错误(如 400 Bad Request404 Not Found
    • 5xx:服务器错误(如 500 Internal Server Error

2. 响应头部(Headers)

常用头部字段:

头部字段 作用说明 示例值
Server 服务器软件信息 Server: nginx/1.18.0
Content-Type 响应Body的类型 Content-Type: text/html
Content-Length 响应Body的字节长度 Content-Length: 1024
Set-Cookie 服务器设置Cookie Set-Cookie: session_id=xyz
Cache-Control 控制缓存行为 Cache-Control: public, max-age=3600
Location 重定向目标URL(3xx响应必需) Location: /new-page
ETag 资源标识(用于缓存验证) ETag: "33a64df5"

3. 响应Body

  • 包含服务器返回的数据(如HTML、JSON、图片等)。
  • 格式由Content-Type指定:
    • text/html:HTML网页
    • application/json:JSON数据
    • image/png:PNG图片

关键特性与头部字段

1. 连接管理

  • 短连接(HTTP/1.0):每次请求后关闭TCP连接。
  • 长连接(HTTP/1.1默认):
    • 头部 Connection: keep-alive 复用TCP连接。
    • 减少握手开销,提升性能。

2. 内容协商

客户端通过请求头声明偏好:

  • Accept:内容类型(如 text/html, application/xml;q=0.9
  • Accept-Language:语言(如 en-US, zh-CN;q=0.8
  • Accept-Encoding:压缩算法(如 gzip, deflate

3. 缓存控制

  • 强缓存
    • Cache-Control: max-age=3600(资源有效期3600秒)
    • Expires: Wed, 21 Oct 2025 07:28:00 GMT(过期时间)
  • 协商缓存(需向服务器验证):
    • Last-Modified(资源最后修改时间) + If-Modified-Since
    • ETag(资源指纹) + If-None-Match

4. 安全与认证

  • HTTPS:HTTP over TLS/SSL,加密传输。
  • 认证机制
    • BasicAuthorization: Basic base64(username:password)
    • Bearer TokenAuthorization: Bearer <token>
Author: wickt42
Link: http://example.com/2025/08/11/初识http/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.