• 手写简易的web服务器(理解BS架构和CS架构)


    1. package com.csdn.http;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.io.OutputStream;
    5. import java.net.ServerSocket;
    6. import java.net.Socket;
    7. public class WebServer {
    8. public static void main(String[] args) throws IOException {
    9. ServerSocket serverSocket = new ServerSocket(8899);
    10. while (true) {
    11. Socket clientSocket = serverSocket.accept();
    12. //接收客户端发送过来的数据
    13. InputStream inputStream = clientSocket.getInputStream();
    14. byte[] bytes = new byte[1024];
    15. int length = inputStream.read(bytes);
    16. System.out.println(new String(bytes, 0, length));
    17. clientSocket.shutdownInput();
    18. //给客户端返回数据
    19. OutputStream outputStream = clientSocket.getOutputStream();
    20. //服务器在返回内容之前,要先返回响应头
    21. outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());//每个响应头后面都要有一个换行
    22. outputStream.write("Date: Fri, 20 Oct 2023 12:54:09 GMT\r\n".getBytes());
    23. outputStream.write("Content-type:text/html;charset=utf-8\r\n".getBytes());
    24. //所以的响应头全部写完以后,再写一个换行
    25. outputStream.write("\r\n".getBytes());
    26. //服务器返回的内容
    27. outputStream.write("

      我是服务器返回的内容

      "
      .getBytes());
    28. // clientSocket.shutdownInput();
    29. clientSocket.close();
    30. }
    31. }
    32. }
    33. D:\Java\jdk-17\bin\java.exe
    34. GET / HTTP/1.1
    35. Host: 192.168.14.55:8899
    36. Connection: keep-alive
    37. Cache-Control: max-age=0
    38. Upgrade-Insecure-Requests: 1
    39. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46
    40. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    41. Accept-Encoding: gzip, deflate
    42. Accept-Language: zh-CN,zh;q=0.9
    43. GET /favicon.ico HTTP/1.1
    44. Host: 192.168.14.55:8899
    45. Connection: keep-alive
    46. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46
    47. Accept: image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
    48. Referer: http://192.168.14.55:8899/
    49. Accept-Encoding: gzip, deflate
    50. Accept-Language: zh-CN,zh;q=0.9

     1、BS架构

    • 下面我以 Microsoft  Edge 为例,访问我们的服务器
    • 用浏览器访问 web 服务器,服务器 控制台(这里指的是 IDEA的控制台 ) 打印的内容是 浏览器 请求标头 的内容

    2、CS架构 

    • 我会用一个小工具代表我们的 客户端 ,这个小工具是 NetAssist V4.3.13 版本的网络调试助手
    • 由于 IDEA 软件用的是 UTF-8 编码 所以 我们把 网络调试助手 软件 改为 接收编码为 UTF-8 ,防止我们接收服务器发过来的内容乱码

     

  • 相关阅读:
    vue 表单当用户修改字段,点击关闭弹窗时,检测用户是否有修改
    node js 快速构建部署 Wiki 风格的文档网站
    计算机视觉之三维重建——第八章:SLAM系统设计《深入浅出sfm和SLAM核心算法 (鲁鹏)》
    HCIE Routing&Switching之MPLS静态LSP配置
    Java 函数式编程思考 —— 授人以渔
    CCE云原生混部场景下的测试案例
    JVM系列——jvm常用指令,问题排查
    [WinError 1455] 页面文件太小,无法完成操作和RuntimeError: CUDA out of memory
    前端开发常用网站
    1.会计基础--会计的几大要素(会计总论、会计科目和账户)
  • 原文地址:https://blog.csdn.net/m0_65152767/article/details/133954733