1、url(资源定位器)的构成
协议://域名(端口号、参数、查询等)
http://zhidao.baidu.com
协议:http / https (有加密的协议https)
域名: zhidao.baidu.com(百度知道)
端口: 80/ 90 / 3000等。
https默认的端口443;http默认端口80
例:https://www.baidu.com:443(默认端口443,可以不写)
2、同源策略:为了安全考虑的一种约定
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况下,不能读写对方的资源。必须满足协议、域名、端口都相同的情况下浏览器才同意拿数据。
简单的来说,浏览器不允许包含在腾讯页面的脚本访问阿里巴巴页面的数据资源,会受到同源策略的限制。
例如:
Index请求getNews.php的数据,浏览器会判断:协议相同(http)、域名相同(localhost),端口号(80)相同
http://localhost/lesson1/index.html
http://localhost/lesson1/getNews.php?
3、DNS域名解析:域名是通过DNS服务器倒着解析的
.com 顶级域名
baidu.com (一级,按国际分类)二级域名 (按国家分类)
zhidao.baidu.com (二)三级域名
www 二级域名前缀,表示万维网维护的
www.baidu.com,属于特殊的三级域名
zhidao.baidu.com ,属于 百度自己维护的网络地址
3.1 www拓展
最开始,Internet提供的主要服务有万维网(WWW)、文件传输(FTP)、电子邮件(E-mail)、远程登录(Telnet)等。也就是说,那个时候的www(World Wide Web)是标识这是一个需要你用浏览器来访问的网页服务,而不是需要你用telnet访问的bbs,或者ftp工具访问的文件传输服务。所以那个时候,网站主页的域名前面要用www。
baidu有多个服务区为他服务。不同的子域名对应处理不同服务的服务器。现在,把任务分配到多台服务器,不需要通过子域名来区分了。http://www.goole.com一个地址背后有多台服务器支持运作。还用www只是尊重用户习惯,方便用户看。国外其实已经不用写www了。
3.2顶级域名:分两类
按照国家分:.cn 中国,.gp日本, .hk香港
按照国际分:
.com (商业机构)
.net(从事互联网服务的机构)
.org (非赢利性组织)
.edu (教育机构)
.com.cn (国内商业机构)
.net.cn (国内互联网机构)
.org.cn (国内非赢利性组织)
4、端口:每个端口对应不同的服务
如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有多个。浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“:80
5、url请求详解
5.1 url请求简图
5.2 url请求流程
①浏览器通过DNS域名解析到服务IP(ping www.baidu.com)
②客户端(浏览器)通过TCP协议建立到服务器的TCP连接 (三次握手)
③客户端(浏览器)向web服务器端(HTTP服务器)发送HTTP协议包,请求服务器里的资源文档 (telnet 模拟)
④服务器向客户端发送HTTP协议应答包
⑤客户端和服务器断开(四次挥手),客户端开始解释处理HTML文档
5.2.1 三次握手,报文交换,TCP链接
①先Client端发送连接、请求报文。
②Server端接受连接后回复ACK报文,并为这次连接分配资源。
③Client端接收到ACK报文后也向Server端发送ACK报文,并分配资源,这样TCP连接就建立了。
5.2.2 四次挥手,关闭TCP链接
①Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭(Socket),可以继续发送数据。
②server发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续等我的消息"。
wait:这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
③当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。
④Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
5.2.3 TCP/UDP协议
①面向连接的TCP:微信,先加好友,再聊天
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。
②面向非连接的UDP协议:短信,知道号码就可以,实时语音
“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。与手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
6、应用层协议: http https等
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
上面的协议建立客户端与服务器端的连接,方便两者进行沟通。
为什么要有此协议呢,让计算机之间按照规矩说话,你问我答,你怎么问我怎么答,否则计算机各说各话,没办法沟通。
如何沟通呢? 让我们来了解一下http报文吧
7、http (请求报文,响应报文)通过报文进行沟通
7.1 请求报文:请求头、请求行、请求主体
请求行: 请求方法(GET POST DELETE HEAD TRACE OPTION);请求资源 (URL) ;请求协议版本(HTTP/1.1)
请求头: http://tools.jb51.net/table/http_header
请求主体: 表单提交数据如:name=aimee&age=18;
7.2 响应报文:响应头、响应行 、响应主体
响应行:响应协议版本号(HTTP/1.1);响应状态码 (200);响应状态文(0K)http://tool.oschina.net/commons?type=5(响应状态码)
响应头:http://tools.jb51.net/table/http_header
响应主体:‘sign success’ (注册成功)
7.2.1 状态码
状态码 |
定义 |
说明 |
1xx |
信息 |
接到请求继续处理 |
2xx |
成功 |
成功的收到,理解,接受 |
3xx |
重定向 |
为了完成请求需要进行另一部措施(如直接重浏览器缓存获取资源,或跳转到其他页面) |
4xx |
客户端错误 |
请求语法有错误,不能完全符合要求 |
5xx |
服务器错误 |
服务器无法完成明显有效的请求 |
常见的http状态码
成功状态码:
200 服务器成功返回内容
301/2 临时/永久重定向
304 资源未被修改过
失败状态码:
404 请求内容不存在
500 服务器暂时不可用
503 服务器内部错误
8、请求方法 GET和POST 的区别?
在http协议里实际上没有区别!
①请求方式不一样,get,请求数据;post,推数据
②GET 使用URL 或Cookie 传参,而POST将数据,放在BODY中。 ? NAME = ‘CST’&AGE=18
③都有长度限制,post可以传输的数据比get多。get将数据拼接在url中,早期浏览器会对URL长度进行限制(浏览器URL输入框);post通过Content-Length限制了长度。
④POST比GET安全。GET在url中,直接就能看到,POST放在相应体里,通过控制台也可以看到,只能说相对安全。对于小白很安全,对于黑客,都不安全。
9、浏览器缓存机制
工作原理:是在HTTP Response中添加ETags信息。当客户端再次请求该资源时,将在HTTP Request中加入If-None-Match信息(ETags的值)。如果服务器验证资源的ETags没有改变(该资源没有改变),将返回一个304状态;否则,服务器将返回200状态,并返回该资源和新的ETags。
304:重定向
请求头中:
if-None-Match: (匹配etag 如果它修改了 不取缓存)
If-Modified-Since:将先前服务器端发过来的最后修改时间戳发送回去
响应头中:
Etag;last-Modified (服务器最后修改的时间)和 etag 配合使用
Date: 服务器响应内容日期
Cache-control:内容缓存时间
no-cache 不被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 根据缓存超时
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以 接收超出超时期指定值之内的响应消息。
Expires:内容保质期,表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的效果。但是如果同时存在,则被cache-control的max-age覆盖。
网站如何统计用户从何点击而来
Referer中会记录当前网页从哪个网页跳转过来(比如百度搜索,搜狗搜索)
referer:如果从浏览器地址栏里直接输入地址请求头没有referer
原文地址:https://www.cnblogs.com/wangzhenling/p/8799040.html