网络原理总结

在浏览器的地址栏输入url,浏览器给用户返回了一个页面。

这个现象涉及到了客户端向web服务器发起请求报文,web服务器收到这个请求报文再返回给客户端,客户端解析后并展示给用户。

总结:客户端发送请求报文-->服务器端接收请求内容返回给客户端--->客户端解析后展示给用户

再细致些内容是:当用户键入url的时候,客户端会通过DNS解析成ip地址,然后根据ip地址寻址得到web服务器的位置。

当客户端确定好web服务器的位置的时候,客户端向web服务器发送请求报文。

web服务器接收到客户端的请求报文后,web服务器会根据请求响应内容发送给客户端。

这个过程中,如果请求内容的类型是PHP类型时,web服务器自身是不能处理PHP动态脚本文件,就会寻找php应用服务器来处理该响应内容,PHP应用服务器会将该请求解析为html静态代码,发送给web服务器,web服务器再将该代码发给客户端。

web服务器能处理html静态类型的文档,如果是其他类型的就需要寻找能处理的应用服务器。

无论这个请求和接收有多复杂,客户端最后收到的都是解析过的html静态文档,并将其解析再展示给用户。

细节问题就是url--->DNS解析为ip地址--->根据ip地址寻址web服务器的位置--->客户端发送请求---->web 服务器接收的请求是html静态类型的就会自行处理,如果是PHP动态脚本类型需委托PHP应用服务器,应用服务器弄完后再告知web 服务器。---->web服务器响应内容发送给客户端--->客户端解析html静态文档并展示给用户

具体是如何请求,如何回复,用到了http协议。

首先我们的浏览器会先连接到web服务器端,并主动与web服务器的http端口建立一个tcp连接,通过TCP的套接字,发送数据。服务器收到请求后会定位到请求的资源,并将资源发送给套接字中,客户端读取接收到接收的内容后会自行解析并展示给用户。然后服务器回复完之后会查看connection的状态,如果是close,就会主动关闭连接,释放整个tcp。

对于http协议的请求类型:get类型和post类型。本质上区别都是TCP连接,由于浏览器的限制会在应用中有所不同,从请求数据包方面来讲,get类型会发出一个数据包,post类型会发出两个数据包。对于get请求类型,浏览器会吧http header和data拼接在一起发出去,服务器在响应一个200状态码。对于post类型,浏览器会先发送header,服务器响应100状态码,表示服务器可以继续处理,这个时候服务器再把data发送出去,然后服务器响应200状态码。

对于状态码这边记录下

1**   表示接收的请求正在处理

2**   表示请求正常处理完毕

3** 表示重定向连接

4**  表示服务器无法处理请求

5**  表示服务器可以处理请求,但是服务器发生了内部错误。

这边写一个简单的web服务器,是个傻瓜式的,输入本地地址:8000,服务器接收到请求信息后会发出自己定义的内容。

# encoding:utf-8
import socket
addr=('0.0.0.0',8000)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(addr)
print("服务器已开启了,可以接受连接请求了")
sock.listen(5)
print("指定了连接请求的最多次数是5")
while True:
    conn,addr=sock.accept()#等待客户请求一个连接
    print('欢迎光临,此时socket进入了waiting状态,客户请求连接时候,会建立连接并返回服务器,accept会返回两个元素,第一个是服务器会通过这个和客户同学,第二个是客户的Internet地址。')
    request=conn.recv(1024)#服务器通过recv和send传输数据,recv是从客户接收信息。
    print(request)
    print("Connected by",addr)
    conn.sendall(bytes('hello client,you find me!I am server'))#send方法是服务器采用字符串向客户发送信息
    conn.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值