文章目录
同源策略
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。
所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript
、ActionScript
)在没明确授权的情况下,不能读写对方的资源。
简单的来说,浏览器不允许包含在腾讯页面的脚本访问阿里巴巴页面的数据资源,会受到同源策略的限制
demo:本地访问百度资源
url(资源定位器)的构成
协议://域名(端口号、参数、查询等)
http://www.zhidao.baidu.com
协议:http / https
域名:www.zhidao.baidu.com
端口:80/ 90 / 3000等
这里的同源指的是:同协议,同域名和同端口
域名解析
1、域名是倒着解析的
.com 顶级域名
baidu.com 属于一级域名
zhidao.baidu.com 属于二级域名
www 是一级域名前缀 表示万维网维护的
www.baidu.com 属于特殊的二级域名
zhidao.baidu.com 属于 百度自己维护的网络地址
2、顶级域名
com
org
net
属于顶级域名,是在全世界范围内解析的,cn
hk
是在一个地区解析的,
如
.cn(中国)
.com(商业机构)
.net(从事互联网服务的机构)
.org(非赢利性组织)
.com.cn(国内商业机构)
.net.cn(国内互联网机构)
.org.cn(国内非赢利性组织)
dns 先根据顶级域名判断网络范围在根据域名查找主机 IP 地址
前缀就不管了,理论上 www 开头相当于占位用的
在国外一般不写 www 国内风气就是写 www
3、端口
如果把 IP 地址比作一间房子 ,端口就是出入这间房子的门
真正的房子只有几个门,但是一个 IP 地址的端口可以有很多
浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入:80
4、当你在浏览器里输入一个url发生了什么
简单归纳:(画图)
-
浏览器通过 DNS 域名解析到服务 IP(ping www.baidu.com)
-
客户端(浏览器)通过 TCP 协议建立到服务器的 TCP 连接(三次握手)
-
客户端(浏览器)向 web 服务器端(HTTP 服务器)发送 HTTP 协议包,请求服务器里的资源文档 (telnet 模拟)
-
服务器向客户端发送 HTTP 协议应答包
-
客户端和服务器断开(四次挥手),客户端开始解释处理 HTML 文档
TCP/UDP(传输层协议)
面向连接的 TCP
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个 TCP 连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。
面向非连接的 UDP 协议
“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。与手机短信非常相似:你在发短信的时候,只需要输入对方手机号就 OK 了。
UDP(User Data Protocol,用户数据报协议)是与 TCP 相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
三次握手
1、先 Client
端发送连接、请求报文
2、Server
端接受连接后回复 ACK
报文,并为这次连接分配资源
3、Client
端接收到 ACK
报文后也向 Server
端发送 ACK
报文,并分配资源,这样 TCP
连接就建立了
四次挥手
1、Client
端发起中断连接请求,也就是发送 FIN
报文。Server
端接到 FIN 报文后,意思是说“我 Client
端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭(Socket
),可以继续发送数据。
2、server
发送 ACK
,“告诉 Client
端,你的请求我收到了,但是我还没准备好,请继续等我的消息”。
wait
:这个时候 Client
端就进入 FIN_WAIT
状态,继续等待 Server
端的 FIN
报文。
3、当 Server
端确定数据已发送完成,则向 Client
端发送 FIN
报文,“告诉 Client
端,好了,我这边数据发完了,准备好关闭连接了”。
4、Client
端收到 FIN
报文后,“就知道可以关闭连接了,但是他还是不相信网络,怕 Server
端不知道要关闭,所以发送 ACK
后进入 TIME_WAIT
状态,如果 Server
端没有收到 ACK
则可以重传。”,Server
端收到 ACK
后,“就知道可以断开连接了”。Client
端等待了 2MSL
后依然没有收到回复,则证明 Server
端已正常关闭,那好,我 Client
端也可以关闭连接了。Ok,TCP
连接就这样关闭了!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7vsIqCRs-1650157903734)(E:.\同源策略imges\0-1.png)]
应用层协议:http https等
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版
上面的协议为了建立客户端与服务器端的连接,此协议为了让两者进行沟通
为什么要有此协议呢,让计算机之间按照规矩说话,你问我答,你怎么问我怎么答,否则计算机各说各话,没办法沟通
http (请求报文,响应报文) 通过报文进行沟通
- 请求报文
- 请求行
- 请求方法(
GET、POST、DELETE、HEAD、TRACE、OPTION
) - 请求资源 (URL)
- 请求协议版本(HTTP/1.1)
- 请求方法(
- 请求头
- http://tools.jb51.net/table/http_header
- 请求主体
- 表单提交数据如:
name=aimee&age=18;
- 表单提交数据如:
- 请求行
- 响应报文:
- 响应头
- 响应协议版本号(HTTP/1.1)
- 响应状态码(200)
- 响应状态文字(0K)
- http://tool.oschina.net/commons?type=5
- (响应状态码)
- 响应行
- http://tools.jb51.net/table/http_header
- 响应主体
‘sign success’ (注册成功)
- 响应头
状态码 | 定义 | 说明 |
---|---|---|
1xx | 信息 | 接到请求继续处理 |
2xx | 成功 | 成功的收到,理解,接受 |
3xx | 重定向 | 为了完成请求需要进行另一部措施(如直接重浏览器缓存获取资源,或跳转到其他页面) |
4xx | 客户端错误 | 请求语法有错误,不能完全符合要求 |
5xx | 服务器错误 | 服务器无法完成明显有效的请求 |
常见的 http 状态码
- 成功状态码:
- 200 服务器成功返回内容
- 301/2 临时/永久重定向
- 304 资源未被修改过
- 失败状态码:
- 404 请求内容不存在
- 500 服务器暂时不可用
- 503 服务器内部错误
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8B9NbcSL-1650157903735)(E:.\同源策略imges\0-2.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLsflcdV-1650157903736)(E:.\同源策略imges\0-3.jpg)]
请求方方法 GET
POST
的区别
在 http
协议里实际上没有区别!搞什么鬼?
常规理解:
1、GET
使用 URL 或 Cookie
传参,而 POST
将数据,放在 BODY
中。 ? NAME = ‘CST’&AGE=18
2、GET
的 URL
会有长度上的限制, POST
可以传输很多数据
3、POST
比 GET
安全
但其实 HTTP
协议里没有规定 POST
数据就要放在 BODY
里, 也没有要求 GET
数据就一定要放在 URL
中而不能放在 BOD
Y 中
HTTP
协议对 GET
和 POST
都没有对数据的长度进行限制,两方面原因造成数据限制的原因
1、早期浏览器会对 URL
长度进行限制(浏览器 URL
输入框)
2、浏览器会对 Content-length
进行限制,这是为了服务器安全和稳定
浏览器缓存机制(http)
304 上次缓存的资源没有改变------浏览器如何知道是否直接取缓存的内容?
理解部分:请求、响应头
请求头:
if-None-Match
: 匹配 etag 如果它修改了 不取缓存
If-Modified-Since
:将先前服务器端发过来的最后修改时间戳发送回去
响应头:
etag ==> 标记图片资源
last-Modified (服务器最后修改的时间)和 etag 配合使用
ETags
和 If-None-Match
的工作原理是在 HTTP Response
中添加 ETags
信息。当客户端再次请求该资源时,将在 HTTP Request
中加入 If-None-Match
信息(ETags
的值)。如果服务器验证资源的 ETags
没有改变(该资源没有改变),将返回一个304状态;否则,服务器将返回200状态,并返回该资源和新的 ETags
-
Date: 服务器响应内容日期
-
Cache-control:内容缓存时间
-
no-cache:不被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
-
no-store:用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 根据缓存超时
-
max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
-
min-fresh:指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
-
max-stale:指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以 接收超出超时期指定值之内的响应消息。
-
Expires:内容保质期,表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同 max-age 的效果。但是如果同时存在,则被 cache-control 的 max-age 覆盖
以秒为单位)的响应。
-
min-fresh:指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
-
max-stale:指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以 接收超出超时期指定值之内的响应消息。
-
Expires:内容保质期,表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同 max-age 的效果。但是如果同时存在,则被 cache-control 的 max-age 覆盖
网站如何统计用户从何点击而来 ==> referer:如果从浏览器地址栏里直接输入地址请求头没有 referer