第4关:服务端响应请求头部信息
创始人
2024-06-02 10:05:08

任务描述

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

相关知识

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

  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()

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...