java-learning/demo1/web_server.md
2025-06-19 16:43:01 +08:00

4.1 KiB
Raw Blame History

从0到1实现一个web服务器

一、网络请求

  1. 什么是网络请求?

    点击展开 网络请求Network Request是指计算机客户端向服务器发送数据或从服务器获取数据的过程。它是互联网通信的基础几乎所有网络应用如网页、APP、API 调用)都依赖网络请求来交换信息。
  2. 网络请求的基本概念

    • 组成客户端Client和服务器Server
    • 常见的网络请求类型
    请求方法 用途
    GET 获取数据(如加载网页、查询数据)
    POST 提交数据(如登录、上传文件)
    PUT 更新数据(如修改用户信息)
    DELETE 删除数据(如删除文章)
    PATCH 部分更新数据
    • 请求和响应的组成
    请求Request 响应Response
    - 请求方法GET/POST
    - URL目标地址
    - 请求头Headers
    - 请求体Body可选
    - 状态码200/404/500
    - 响应头Headers
    - 响应体Body如 JSON/HTML
  3. 网络请求的流程

    点击展开
    1. 客户端发送请求(如浏览器访问 https://example.com)。
    2. DNS 解析(将域名转换为 IP 地址)。
    3. 建立 TCP 连接3 次握手)。
    4. 发送 HTTP 请求(如 GET /index.html)。
    5. 服务器处理请求(读取数据库、计算数据)。
    6. 服务器返回响应(如返回 HTML 或 JSON
    7. 客户端解析响应(如浏览器渲染网页)。
    8. 关闭连接(或保持长连接)。
  4. 网络请求的状态码

状态码 含义
200 OK 请求成功
301 Moved Permanently 永久重定向
404 Not Found 资源不存在
500 Internal Server Error 服务器错误
403 Forbidden 无权限访问

二、WEB服务器

  1. Web服务器的实质是什么
    • Web服务器Web Server的实质是一个专门处理HTTP/HTTPS请求的软件或计算机系统它的核心职责是接收客户端如浏览器、APP的请求并返回静态或动态内容如HTML、JSON、图片等
  2. HTTP请求协议
    GET /index.html HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0
    Accept: text/html
    Connection: keep-alive
    
    
     POST /api/users HTTP/1.1
     Host: api.example.com
     Content-Type: application/json
     Content-Length: 45
     Authorization: Bearer abc123
     Content-Length: 10
    
     {"id":"1"}
    
    • 请求行Request Line
      • 请求方法GET、POST等
      • 请求URI资源路径
      • HTTP协议版本
    • 请求头Headers
      头部字段 描述
      Host 指定服务器域名
      User-Agent 客户端信息
      Accept 可接受的响应内容类型
      Accept-Language 可接受的语言
      Accept-Encoding 可接受的编码方式
      Connection 控制连接keep-alive/close
      Content-Type 请求体的MIME类型
      Content-Length 请求体的长度
      Authorization 认证信息
      Cookie 客户端Cookie
    • 请求体Body
      • application/x-www-form-urlencoded:表单数据
      • multipart/form-data:文件上传
      • application/jsonJSON数据
      • text/xmlXML数据
    • HTTP版本差异
      • HTTP/1.0 每次请求建立新连接
      • HTTP/1.1 默认持久连接,支持管道化
      • HTTP/2 二进制协议,多路复用,头部压缩
      • HTTP/3 基于QUIC协议改进传输效率

三、使用JAVA创建一个WEB服务器

  1. ServerSocket创建服务器指定端口
  2. 等待客户端连接
  3. 处理请求解析HTTP协议
  4. 响应请求(构建返回内容)