愚公移山日记·23
域名
简称:DN 域名可以理解为是一个网址,由于IP地址不便于记忆,所以产生了域名,local host指的是本机是一个域名
DNS服务器
域名解析系统,主要适用于将域名转换成对应的IP地址。
浏览器访问服务器的过程:浏览器与服务器建立连接时,是先去访问DNS服务器,返回域名相对应的IP地址,再去将得到的IP地址区连接相应的服务器,由服务器返回给我们信息。
当然在实际的访问过程中,建立连接时,会先访问本地DNS,如果在本地的DNS中没有找到相对应的域名,那么再去访问DNS服务器。
C:\Windows\System32\drivers\ect\hosts 本地的DNS位置
HTTP协议概述
超文本传输协议:为了提供发布和接受HTML页面的方法,HTTP是基于TCP,浏览器和服务器之间由TCP连接。
HTTP协议分为两个部分:请求协议,响应协议
请求行
GET 请求方式
/ 请求资源的路径 体现请求资源的路径 (不包含域名)
HTTP/1.1 请求协议以及版本
请求头
协议名:协议内容
Host :当url中所要请求的服务器的主机名
accept-encoding:是浏览器发给服务器,声明浏览器支持解压编码类型
accept_charset:表示浏览器支持的字符集
referer:表示此次请求来自于哪个网站
accept-Language zh-CN,zh;q= 0.8(权重,越大越先解析)
cookie:如果当前请求的服务器在浏览器端设置了数据(cookie)那么当前浏览器再次请求该服务器的时候,就会把对应数据带回去。
user-agent:用户代理,当前发起请求的浏览器的内核信息。
accept:表达浏览器可以接受的数据类型,text/html,iamage/img
请求空行
分割请求头与请求主体
请求主体
浏览器要发送给服务器的内容
get方式没有请求体,post方式才有请求体
http响应报文协议分析
是服务器向浏览器做出响应(反馈数据)时候的协议
响应行
http/ 1.1 200 ok
协议与版本 响应的状态码 200 表示服务器已经接受了浏览器的请求并且返回了数据 响应状态的描述
1开头:已经接受仍在处理
3开头:重定向的一个网页
500:服务器报的错误
响应头
*server :服务器的版本
data:响应时间
contend length :响应的长度
*content-type :相应的数据类型
location :重定向
refresh:重定向(刷新)
空行
分割响应头与响应主体
简单的web服务器
''#TCP服务端
#导入模块
#创建套接字
#设置地址重用
#绑定端口
#设置监听,让套接字由主动变为被动
#接受客户端连接 定义函数 request_handler()
#接受客户端浏览器发送的请求协议
#判断协议是否为空
#拼接响应的报文
#发送响应报文
#关闭操作
'''
import socket
def request_handler(new_client_socket,ip_port):
#接受客户端浏览器发送的请求协议
request_data = new_client_socket.recv(1024)
#print(request_data)
#判断协议是否为空
if not request_data:
print('客户端已经下线' +str(ip_port))
new_client_socket.close()
return
#拼接响应的报文
#相应行
response_line = 'http/1.1 200 ok\r\n'
#响应头
response_header ='Server:python/2.1\r\n'
#响应空行
response_blank = '\r\n'
#响应主体
response_body = 'helloWorld'
response_data = response_line + response_header +response_blank +response_body
#发送响应报文
new_client_socket.send(response_data.encode())
#关闭当前连接
def main():
'''主函数'''
#导入模块
#创建套接字
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#设置地址重用
#当前套接字,设置地址重用,属性为Ture
tcp_client_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
#绑定端口
tcp_client_socket.bind(('',8080))
#设置监听,让套接字由主动变为被动
tcp_client_socket.listen(128)
#接受客户端连接 定义函数 request_handler()
while True:
new_client_socket,ip_port = tcp_client_socket.accept()
#调用函数处理
request_handler(new_client_socket,ip_port)
if __name__ =='__main__':
main()
在今天的实现代码的过程中我这里出现了一些问题,程序可以运行,但是不能给客户端反应情况,我思考到底是不是因为虚拟机,或者在操作系统的环境搭建出现了问题。