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. PHP文件读写操作之文件写入代码

    在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...

  2. noip2006解题报告

    T1.能量项链 给出一串数字(其实是个环也就是可以旋转).n个数组成n颗珠子,形如: 1 2 3 4 表示的珠子是(1,2)(2,3)(3,4)(4,1) 定义珠子的聚合:如前两颗聚合放出能量为1*2 ...

  3. nodejs生成UID(唯一标识符)——node-uuid模块

    unique identifier 惟一标识符        -->> uid 在项目开发中我们常需要给某些数据定义一个唯一标识符,便于寻找,关联. node-uuid模块很好的提供了这个 ...

  4. [转] Making GTFS query more convenient

    url:http://ontrakinfo.wordpress.com/2012/10/29/making-gtfs-query-more-convenient/ 这简直说出了我的心声. I have ...

  5. java 中小数点的处理

    第一种 BigDecimal bg = new BigDecimal(f); double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleVa ...

  6. notepad++ 正则表达式

    body { font-family: Bitstream Vera Sans Mono; font-size: 11pt; line-height: 1.5; } html, body { colo ...

  7. XidianOJ 1183 Water Problem: Items divided

    题目描述 Youyouyouyou is very interested in math, one day, an idea came into his mind that how many ways ...

  8. 3.openssl speed和openssl rand

    (1).openssl speed 测试加密算法的性能. 支持的算法有: openssl speed [md2] [mdc2] [md5] [hmac] [sha1] [rmd160] [idea-c ...

  9. SBT 构建scala eclipse开发

    scala eclipse sbt 应用程序开发 搭建Eclipse开发Scala应用程序的一般步骤 一.环境准备: 1.Scala : http://www.scala-lang.org/ 2.Sc ...

  10. Action类中获取request等对象的方法

    struts2中的action类中,SevletActionContext可以获取