URL协议
URL是什么?就是我们访问网站时输入的链接,URL又叫统一资源定位符(uniform resource locator),它支持很多种协议,如HTTP、FTP等。
URL的作用:定位服务器资源。
如何定位呢?
我们在网购的时候,会填写收货地址。那么在web的世界当中URL就相当于我们要访问的资源在服务器当中的地址。通常我们在网购填写收货地址的时候会遵循一些规则(省市县区街道等等),那么URL也有它的规则。
URL的详细格式:
schema://host[:port#]/path/.../[?query-string][anchor]
schema:底层协议(例如:HTTP、HTTPS、ftp)
host:服务器的域名或者IP地址
port:服务器端口,HTTP默认端口是80端口(可省略),其他端口要指明
/path:访问资源的路径,以“/”开始
?query-string:发送给HTTP服务器的数据,以“?”开始
#anchor:锚点,以“#”开始,通常表示在页面的特定位置。
所有的URL都遵循这个URL标准。老师给的建议是初期见到的所有的URL都自行用标准分割一下,以达到熟练掌握的目的,如果你在看我的随笔,不妨也跟着试一下,反正也不花钱。
HTTP协议
什么是HTTP?就是超文本传输协议(hyper text transfer protocol),它是web通信时使用的协议,也是web的基础同时它也是互联网上应用最广泛的协议。那么浏览器是怎么用HTTP协议传输信息的呢?便于理解的比较如下:
浏览器 快递
get、post 送货方式:汽车
host 收货地址
user-agent 快递公司:某某快递
cookie 进入收货小区的通行证
response:HTTP200+正文 收到(状态)+已签收(正文)
以上这些都是属于HTTP的报文,那么报文到底长什么样子呢?
简单来说HTTP报文分为三个部分:起始行、头、身体
请求报文:
情况1:请求行(request line)、头部(get请求是没有数据体(body)部分的)
情况2:请求行(post)、头部(头部会增加cookie字段)、“空行(用于分割头和身体)”、数据体
响应报文:状态行(status line)、消息头部、“空行(用于分割头和身体)”、响应正文
注:上面的第二种请求报文是发帖等操作的请求,中间会有cookie字段。
cookie:用户的凭证,如果cookie被黑客盗用,那么黑客就可以以我的名义发帖。
从上面我们知道了HTTP请求有get和post,那么除了这两种还有其他的方式吗?当然有啦!
head 与get请求类似,不同在于服务器只返回HTTP头部信息,没有页面的内容(没有body)
put 上传置顶URL的描述
delete 删除指定资源
options 返回服务器支持的HTTP方法
刚刚讲了HTTP请求头的cookie很重要(这个后面在学),那么除了cookie外还有HTTP请求头的referer同样也很重要。
referer的作用就是告诉服务器,我们从什么地方来。神马意思呢?来举个栗子:
我们直接访问公司的网站和通过百度搜索跳转公司网站在HTTP请求头内的信息是不同的,后者会多一个referer头,用来表明咱是从百度跳过来的。
由于HTTP报文头中的 referer 会告知服务该请求的来源(浏览器自动加上的),所以很多站点就可以进行流量统计工作(例如:CNZZ、百度统计),同时也可以判断来源合法性(例如:防止盗链、防止CFRF漏洞)等。
防止盗链:例如qq空间的图片引用到别的站点就会打不开了,这就是通过referer来判断的。
响应报文的状态码:
之前举例响应报文的状态码是200(表示正常),那么还有其他的吗?
当然:例如:301/302都表示跳转的状态码,跳转的同时还会在HTTP头配合一个location字段(表示跳转到的地址)。如果URL可以被黑客控制,那么就存在URL跳转漏洞。
另外很重要的HTTP头字段:set-cookie字段,这个的意思就是web服务器向我们的浏览器办法凭证(通常我们使用用户名、密码登录成功后,web服务器就会给我们颁发一个凭证)
老师还给留了作业:除了以上讲到的状态码,HTTP状态码还有很多,就需要课下自己去学习了。我把链接附上,方便看到文章的你(*^▽^*)。
HTTP菜鸟教程链接:http://www.runoob.com/http/http-tutorial.html
思考一下一下问题:
1、URL是什么,有什么作用?
2、描述一下URL的格式?
3、HTTP的报文结构是什么样子?
4、cookie和set-cookie代表什么意思?
5、referer有什么作用?
6、状态码301/302和location分别代表什么意思?
野兔
2019.2.6