1,概述

当你打开一个浏览器则会进入一个主页,也许你会想只是打开了浏览器罢了,但是浏览器默默的把这个主页默认的网址发送出去,你只是不知道而已,你只是没有输入而已。我们来做个实验。

1,双击打开

2,可以看到

注意输入网址的框中会显示百度的首页的网址。

实际上看这里

看到常规这一栏里面有我设置的默认主页。

因此当打开一个浏览器时,它会根据设置的默认主页的的网址向服务器发送请求。

那么平常我们说的这个网址到底是什么呢?实际上在计算机科学术语里面叫URL.

ULR(Uniform Resource Locator):统一资源定位符。它的功能就是定位因特网上的资源,并可使用不同的协议去访问。一般来说一个URL本身只代表了某个资源在服务器上的位置,并不能获取资源,当你使用浏览器输入某个ULR时,浏览器会代我们向服务器发送一个请求,请求的正是这个ULR所定位的资源,如果一切正常,服务器则会向我们返回我们需要的结果,正像你输入https://www.baidu.com/ 那么你会看到服务器给你返回一个百度首页面。

我来举个例子说明一下。假如你有一个电话本,里面有许多电话号码,这些电话号码会定位不同的人吧?对了URL其实也可以类比这里的电话号码。因为URL其实定位的是许多资源。

电话号码------URL

1,电话号码可以定位某个人;URL可以定位某个资源。

2,电话号码不拨出去的话根本得不到别人的应答;URL如果没有通过浏览器发送出去自然也得不到任何结果。所以这两者有个重要的特点,就是只标识某个人或者资源,必须通过拨打或者发送请求才可以通知到对方。

3,由第二条我们想到把这些发送号码或者URL发送出去需要一个介质,即就是电话和浏览器。

4,打电话的时候假如这个号码被注销了(以前还在使用),类比到URL现在所定位的那个资源现在不存在(以前存在过),那么电话自然也打不通,使用浏览器访问的资源也访问不到。

5,第四条只是举个简单的例子,但是实际上打电话和访问某个资源过程是大不相同的,总体来讲就是出现某种情况打不通电话,也会有访问不到某个资源,这是一种发送URL不成功的例子。

6,大多数情况电话打通了,你就和那个电话号码定位的人建立了连接,自然如果正常的情况,你使用浏览器发送的URL达到了服务器,也就是那个资源存在的地方,那么你和服务器也建立了连接。

7,当双方建立了连接,自然双发可以打电话,也可以访问服务器上的资源。

2,URL的语法

上面说明了使用URL就可以获取服务器上的资源,那么这个过程是怎么样的呢?这就需要知道URL的语法。

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

上面的URL的内容比较多,其实一般不会都用到的,你看百度首页呢?https://www.baidu.com/只是一个协议和主机。

说明:

scheme:方案,也许大家很奇怪这个方案是什么,其实就是我们经常看的比如说http协议这样的。它规定了只能使用某些协议。

https://www.baidu.com/ 比如这个https就是一个方案,他是https协议,有一点需要注意的是协议名称不区分大小写。

用户名和密码:某些协议需要使用用户名和密码。比如ftp协议。如下图,假如不输入用户名和密码,会有个提示输入的窗口。

其实也可以按照URL的格式来:这里没有输入端口号,其实ftp协议有自己默认的端口号21,所以可以不输入。

当一切输入完成的时候可以发送请求进入网页,此时我们关注这里:

主机和端口:主机就是可以标识一个服务器的标志,可以是个主机名称(比如说百度首页URL:https://www.baidu.com/的主机就是www.baidu.com),也可以是个IP,其实这个www.baidu.com实际上和某个IP是对应的,在发送这个URL的时候会把www.baidu.com解析成IP。主机和端口定位某个资源的大体位置,端口对本服务器某个服务进行监控,外界也只有通过这个端口才可以和这个服务器进行通信。如下图,一个服务器有两个服务,各有一个端口,每个服务都有一些资源。如何要访问到服务器的服务2中的资源2?首先要访问到该服务器,用IP,何如访问到服务2呢?使用端口2,如何找到资源2呢?其实资源存放的是有路径的,这就需要使用下面的这种格式:<scheme>://<host>:<port>/<path>;比如:http://liulanqi.baidu.com/80/index.html这个URL使用http协议,通过主机liulanqi.baidu.com访问到某个服务器,这里端口没有,http协议的端口默认为80,可以不写上。通过主机和端口可以访问到服务,后面的80/index.html可以找到某个特定的资源。

参数:通过上面的分析,我们已经可以访问到某个资源了,其实事实上还有诸多问题,比如某个协议访问某个资源使用不同的方式,就可能导致出错。比如图片在服务器使用二进制存放,而ftp协议传输资源如果使用文本形式,那就会出错,这个时候要说明一下我们要用二进制形式传输资源,这个时候参数就很重要。

ftp://prep.ai.mit.edu/pub/gnu;type=d  这里面的type=d就是参数,他是由参数名称和相对应的值组成。其中使用分号“;”和前面的路径区分开。

查询字符串:主要的功能是如果查询某个资源,可以使用特殊的方式减少搜索范围,比如资源是数据库的内容,可以通过查询字符串来使得判断范围更小。

http://www.joes-hardware.com/inventory-check.cgi?item=12731 这里面的item=12731就是查询字符串,他是由名称和相对应的值组成。其中使用问号“?”和前面的内容区分开。多个名值对使用&隔开。

片段:其实这里面的这个片段的作用就是减少显示的内容。假如一个资源比较大,比如说某个html页面有很多内容,我们只需要让其显示某些指定的内容,这就需要使用片段。但是要注意的是:从服务器发送过来的HTML资源是完整的,只是显示在浏览器上是按照指定的内容显示。

HTTP学习笔记(1)ULR语法的更多相关文章

  1. python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样

    python3.4学习笔记(一) 基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入 ...

  2. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  3. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  4. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  5. CUBRID学习笔记 41 sql语法之select

    cubrid的中sql查询语法 SELECT [ ] [{TO | INTO} ][FROM ] [WHERE ][GROUP BY {col_name | expr} [ASC | DESC], . ...

  6. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...

  7. Angular 5.x 学习笔记(1) - 模板语法

    Angular 5.x Template Syntax Learn Note Angular 5.x 模板语法学习笔记 标签(空格分隔): Angular Note on github.com 上手 ...

  8. Webpack4 学习笔记三 ES6+语法降级为ES5

    前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 Webpack 将es6.es7语法降级为es5 需要通过 babel JavaScript编译器. 安装: npm i babel ...

  9. tensorflow学习笔记(1)-基本语法和前向传播

    tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程.                                       图中的constant是个常量 计 ...

  10. Go语言学习笔记一(语法篇)

    国庆节七天假期,这段时间刚好项目那边催的不是很紧,基本上每天都是白天重构一下项目代码,晚上自己学习.(大概是因为容总那边的人都去度假了把项目进度放慢了吧.这两天“彩虹”姐姐也来凑热闹,据说还是直接从澳 ...

随机推荐

  1. How to force the UI to refresh immediately(WPF)

    Question 0 Sign in to vote Folks, In my application, when the user hits "Submit" button, I ...

  2. No.1__C#

    这是第一篇C#的日记,到现在为止已经学习了一个礼拜的C#了.由于是实习中才开始学习,所以这次不准备像在大学学习那样,拿着课本划重点,背概念.这应当是一门实践的课程,应该一边编程,一边学.这是到公司第一 ...

  3. ReSharper 文件注释

    添加文件注释方法如下: 打开菜单RESHARPER->Options->Code Editing –> File Header Text 如图所示,在其中空白处添加对应文件头注释, ...

  4. backbone.js学习笔记

    之前只接触过jQuery,看来Backbone是除了jQuery的第二大JS框架... backbone到底是个啥? 其实刚开始我也不知道=_=,我是这周二才听说居然还有这么个框架...于是乎我的导师 ...

  5. jquery事件合集

    1.在input输入数据时执行的事件(边输入边触发事件) $("input[id='subjectNum']").bind('input propertychange', func ...

  6. modelsim(1) - 安装和使用 心得

    最近一段时间使用modelsim, 一,安装 使用的时候,出现license验证不对. 由于经常换虚拟机,要注意首先MAC地址是否换了,如果换了,license要重新做! 其次/etc/hosts的I ...

  7. VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的

    消息作用:    在进程间共享数据(内部通过创建内存映射文件) 消息介绍:需要用到的数据结构/类型:typedef struct tagCOPYDATASTRUCT {    ULONG_PTR dw ...

  8. Android_helloworld

    看见 HelloWorld 相信你就明白我要干什么了.这是每个程序的第一步,让 HelloWorld 带我们走入 Android 的学习之旅吧. 前面我们下载了海马模拟器,所以接下来我们是在模拟器上进 ...

  9. linux 下文件节点索引

    最近发现一个奇怪的问题,就是一个pyhton 后台的服务一直打印日志文件,在中间我用vim看日志文件,关闭时习惯性的:wq退出,在此之后日志文件就不输出了. 1 对于这个现象我开始认为是python ...

  10. js中==与===的区别