B/S架构:B浏览器/S服务器端初学

409 阅读2分钟

HTTP请求报文:

从浏览器向服务器发 起请求的过程
http:监听80端口
https:监听443端口

请求部分:

① 请求行  GET/POST   请求路径   HTTP/1.1

② 请求头  发送请求时携带的参数
③  空行
在请求报文中,每行结束后,尾部都要添加\r\n符号

post请求报文:

① 请求行  POST  请求路径  HTTP/1.1
② 请求头  发起请求时携带的参数
③ 空行
④ 请求体 (向服务器端推送的数据,如账号 + 密码 + 验证码)

响应报文说明:

①响应行(response_line) => HTTP/1.1  响应状态码  
响应描述
HTTP/1.1   200  OK
200/404200代表服务器端正常响应,404代表资源未找到
OK/Not Found
②  响应头(response_header) ,最少要包含一行,说明使用的服务器名称Server:nginx
可以自己开发,也可以任意命名但是这一行不能少
③ 空行 => 直接通过\r\n表示即可
④ 响应体(response_body) : 你希望返回什么内容给浏览器

静态Web服务器之返回固定页面 代码:

```
```
'''
要用到的知识点:with语句(根据打开的文件,在读取完毕后,自动对其进行关闭操作)
'''
import socket

if __name__ == '__main__':
    # 1、创建socket套接字对象
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口复用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 2、绑定端口
    tcp_server_socket.bind(('', 8080))
    # 3、开始监听
    tcp_server_socket.listen(128)

while True:
    # 4、接收客户端连接,产生新的套接字
    conn_socket, ip_port = tcp_server_socket.accept()
    # 5、接收客户端发送过来的HTTP请求
    recv_client_data = conn_socket.recv(4096)
    if len(recv_client_data) > 0:
        # 6、解析数据
        recv_client_content = recv_client_data.decode('utf-8')
        print(recv_client_content)

        # 7、返回HTTP响应给客户端浏览器(1-响应行 2-响应头 3-空行 4-响应体)
        # ① 打开static目录下的index.html文件
        with open('static/index.html', 'rb') as f:
            file_data = f.read()

        # ② 响应行
        response_line = 'HTTP/1.1 200 OK\r\n'
        # ③ 响应头
        response_header = 'Server:PWB1.0\r\nContent-type:text/html; charset=utf-8\r\n'
        # ④ 响应体
        response_body = file_data
        # ⑤ 响应数据'
        response_data = (response_line + response_header + '\r\n').encode('utf-8') + response_body

        conn_socket.send(response_data)

        # 8、关闭客户端连接
        conn_socket.close()