第4关:服务端响应请求头部信息

任务描述

本关任务:实现服务器向请求客户端返回响应头部信息的代码。

相关知识

为了完成本关任务,你需要:

  1. 掌握 WEB 服务器响应消息头部定义

  1. 掌握如何发送响应消息给相应客户端

WEB服务器响应消息头部定义

WEB 服务器在接收到客户端的连接请求后,接下来就会响应该请求。HTTP 响应报文由三部分组成:响应行、响应头、响应体。如下图所示。

  • 响应行:一般由协议版本、状态码及其描述组成,比如 HTTP/1.1 200 OK其中协议版本 HTTP/1.1 或者 HTTP/1.0,200 就是它的状态码,OK 则为它的描述。

  • 响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理它回送的数据。

常见的响应头字段含义:

Allow:服务器支持哪些请求方法(如GET、POST等)。

Content-Encoding:文档的编码(Encode)方法。

Content-Length:表示内容长度。

Content-Type:表示后面的文档属于什么MIME类型。

Date:当前的GMT时间

Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。

Last-Modified:文档的最后改动时间。

Location:用于重定向接收者到一个新URI地址。

Refresh:告诉浏览器隔多久刷新一次,以秒计。

Server:服务器通过这个头告诉浏览器服务器的类型。

在这个 WEB 服务器返回的头部信息示例如下:

HTTP/1.1 200 OK  
Connection: close  
Content-Type: text/html  
Content-Length: 24  
发送响应消息头部内容

在定义好响应消息的头部信息后,使用套接字的 send 方法发送即可。

在发送前需要使用编码 encode() 方法,将字符串转换为字节数组后发送。

例如:

socket.send(header.encode())  

编程要求

根据提示,在右侧编辑器代码中 Begin-End 之间补充代码,实现将响应消息头部发送给请求客户端的功能。

答案:

#import socket module
from socket import *

serverSocket = socket(AF_INET, SOCK_STREAM) 
#Prepare a sever socket 
serverSocket.bind(("127.0.0.1",6789))
serverSocket.listen(1)

#while True:
print('开始WEB服务...')

try:
        connectionSocket, addr = serverSocket.accept()
        message = connectionSocket.recv(1024) # 获取客户发送的报文
        
        #读取文件内容
        filename = message.split()[1]       
        f = open(filename[1:])
        outputdata = f.read();
        
        #发送响应的头部信息
        header = ' HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/html\nContent-Length: %d\n\n' % (len(outputdata))
         #########Begin#########
        connectionSocket.send(header.encode())
        #########End#########
        connectionSocket.close()
except IOError:
        connectionSocket.close()
serverSocket.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值