cs and bs
cs模式是指服务端客户端关系,客户端有浏览器,电子邮件客户端等基于TCP协议(udp)socket与tcp协议的关系socket是对tcp/udp的封装,是网络层传输层和应用层的接口bs模式浏览器本身就是客户端
http协议:短链接,一次发送接收即断开
cs模式是指服务端客户端关系,客户端有浏览器,电子邮件客户端等基于TCP协议(udp)socket与tcp协议的关系socket是对tcp/udp的封装,是网络层传输层和应用层的接口bs模式浏览器本身就是客户端http:属于应用层,基于ip+tcp/udp请求协议:浏览器发往服务器关键字竞价排名,点击进入网站,根据用户点击地址完成一次完整的排名计价。盗链与反盗链:资源在别的地方,但是点击量集中在自己网站,做自己的广告。就可以查看Referer,如果不对,转到其他页面 或者转入自己的网站,必须在我自己网站上使用资源,才能下载。请求首行; // 请求方式,请求路径,协议和版本,例如:GET /index.html HTTP/1.1请求头信息;// 请求头名称:请求头内容,即为字典key:value格式,例如:Host:localhost Host:127.0.0.1:8000 Connection:keep-alive 保持连接状态 User-Agent:Mozilla/5.0 用户代理一般为浏览器 Accept:text/html 支持类型 Accept-Encoding:gzip,br 支持编码 Accept-Language:zh-CN,zh可接受语言 Referer:http://127.0.0.1:8080 进入的入口地址 Cookie:浏览器字典格式,存储密码等,保存状态空行; // 用来与请求体分隔开请求体。 // GET没有请求体,只有POST有请求体。get:url+参数 访问网址是get,提交默认get一般使用post为了安全post:当地址栏太长参数不够用的时候,用post安全,大小无限制HTTP默认的请求方法就是GET * 没有请求体 * 数据必须在1K之内! * GET请求数据会暴露在浏览器的地址栏中GET请求常用的操作: 1. 在浏览器的地址栏中直接给出URL,那么就一定是GET请求 2. 点击页面上的超链接也一定是GET请求 3. 提交表单时,表单默认使用GET请求,但可以设置为POSTPOST:(1). 数据不会出现在地址栏中(2). 数据的大小没有上限(3). 有请求体(4). 请求体中如果存在中文,会使用URL编码!?(1)连接作用:连接页面地址和参数(2)清除缓存:不调用缓存的内容,而认为是一个新地址,重新读取,比如引用样式表后加?& 主要是get请求连接参数比如name=adamanter&age=24响应协议:服务器发往浏览器响应首行:HTTP/1.1 200 OK:响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释;响应头信息: Server:WSGIServer/0.2 CPython/3.5.2:服务器的版本信息; Content-Type: text/html;charset=UTF-8:响应体使用的编码为UTF-8; Content-Length: 724:响应体为724字节; Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:响应给客户端的Cookie; Date: Wed, 25 Sep 2012 04:15:03 GMT:响应的时间,这可能会有8小时的时区差; Request URL:http://127.0.0.1:8090/login/ Request Method:GET Status Code:200 OK Remote Address:127.0.0.1:8090 Response Headers view source Content-Type:text/html; charset=utf-8 Date:Wed, 26 Oct 2016 06:48:50 GMT Server:WSGIServer/0.2 CPython/3.5.2空行:分隔响应头和响应体响应体:apache nginx:解析http状态码:200成功 302 重定向 需要重发请求500以上基本都是服务器错误200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;404:请求的资源没有找到,说明[客户端错误]的请求了不存在的资源;302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;304: 重定向,Last-Modified 存储服务器端修改的时间,如果是上次修改时间说明没变,就直接才能从缓存中取出来500:请求资源找到了,但服务器内部出现了错误;其他响应头:告诉浏览器不要缓存的响应头:Expires: -1;Cache-Control: no-cache;Pragma: no-cache;自动刷新响应头,浏览器会在3秒之后请求http://www.baidu.com:Refresh: 3;url=http://www.baidu.comHTML中指定响应头在HTMl页面中可以使用 来指定响应头,例如在index.html页面中给出 ,表示浏览器只会显示index.html页面3秒,然后自动跳转到http://www.baidu.com.GET /favicon.ico HTTP/1.1Host: 127.0.0.1:8080Connection: keep-aliveUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36Accept: */*Referer: http://127.0.0.1:8080/Accept-Encoding: gzip, deflate, sdch, brAccept-Language: zh-CN,zh;q=0.8Cookie: sessionid=e0ci3j4mwkg8itrtr5so824raj8wilfk;Http协议:一 请求协议 (浏览器------>server) url: www.baidu.com?a=1 (1)请求首行 GET /favicon.ico HTTP/1.1 (2)请求头信息 Host: 127.0.0.1:8080 Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 Accept: text/html Accept-Encoding: gzip, deflate, sdch, br Accept-Language: zh-CN,zh;q=0.8 Referer: http://127.0.0.1:8080/ Cookie: sessionid=e0ci3j4mwkg8itrtr5so824raj8wilfk; csrftoken=0nNXMorXRmbll9pDD1mEWAlUmqPLPDOMvY5zQvRawcbXyuiuSaYtTGkzQUB5XfPF (3) 空行 (4)请求体(请求数据)----------------get请求体不存在二 响应协议(server-----------》浏览器) 响应首行; HTTP/1.1 200 OK 响应头信息; 空行; 响应体。Title
socket+http模拟发送信息
# 这段代码就是开启服务,浏览器最重要额就是sendall(),里面要加入http协议import socketdef main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8083)) sock.listen(5) while True: print("server is working.....") conn, address = sock.accept() request = conn.recv(1024) with open("index.html") as f: data=f.read() # conn.sendall(bytes("Hello
","utf8")) 不成功 # conn.sendall(bytes("HTTP/1.1 201 OK\r\n\r\nHello Yuan
", "utf8")) conn.sendall(b"HTTP/1.1 201 OK\r\n\r\nHello ALEX
", "utf8") conn.sendall(b"HTTP/1.1 201 OK\r\n\r\n%s"%data.encode("utf8")) conn.close()if __name__ == '__main__': main()