HTTP学习笔记(1)ULR语法

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资源是完整的,只是显示在浏览器上是按照指定的内容显示。

时间: 2024-12-04 06:48:40

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

lua学习笔记之基本语法

Lua学习笔记之基本语法 1.  赋值语句 赋值是改变一个变量的值和改变表域的最基本的方法. a = "hello".."world" t.n = t.n+1 lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会一次赋给左边的变量. a,b = 10,2*x    <-->a = 10;b = 2*x 遇到赋值语句lua会先计算右边所有的值然后再执行赋值操纵,所以我们可以这样进行交换变量的值: x,y = y,x    

01-Python学习笔记-基础语法

Python标识符 -d           在解析时显示调试信息 -O           生成优化代码 ( .pyo 文件 ) -S           启动时不引入查找Python路径的位置 -v            输出Python版本号 -X           从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd     执行 Python 脚本,并将运行结果作为 cmd 字符串. file           在给定的python文件执行python脚本. P

lua学习笔记(1)-基本语法

==============变量类型nilnumber(实数)    1 2 3.14 7.65e8string            "hello world" "\n"boolean(true false)    true falsefunction*userdata and threadstable(1)默认key初始化t = {a, "hello", b, "world"} (2)自定义key初始化t = {n1 =

PHP:学习笔记(2)——基础语法

PHP:学习笔记(2)--基础语法 向屏幕输出 说明 1.void echo ( string $arg1 [, string $... ] ) 2.int print ( string $arg ) 注意: 1.echo.print 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表. 2.输出变量的时候需要使用双引号! 3.int printf ( string $format [, mixed $args [, mixed $... ]] ) 4.strin

学习笔记之06-点语法

前言 在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法".比如: 1.在Student类的第2行定义了一个公共的成员变量age 1 public class Student { 2 public int age; 3 } 2.然后在第5行通过点语法直接给stu的成员变量age赋值 1 public class Test { 2 3 public static void main(String[] args) { 4 Stu

《Java程序员面试宝典》学习笔记(基本语法部分)

这是我学习欧立奇<Java程序员面试宝典>第三版的笔记.这篇是基本语法部分. ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 在Java中,字符只以一种形式存在,那就是Unicode.在JVM内部一切都由Unicode表示,而输出到外部后(JVM和OS的交界处就是各种输入/输出流)转换为其他形式的编码. Java用了中间缓存变量的机制,所以,j=j++可换成如下写法: te

golang学习笔记:golang 语法篇(二)

在语法篇(一)中学习了go中基本的数据类型.变量.常量等组成语言的基本要素,在这一节中将会学习如何将这些元素组织起来,最终写成可以执行的代码. 在这一部分包括: go中的流程控制语句: go中函数的用法: go特殊的错误处理方式: Golang中的流程控制语句 在具体编程的时候免不了需要使用一些特殊的语句实现某些功能,比如使用循环语句来进行迭代,使用选择语句控制程序的执行方式等.这些语句在任何一门程序设计语言 中都会有支持,golang中除了支持常用的循环,条件选择语句以外,还支持跳转语句,下面

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

国庆节七天假期,这段时间刚好项目那边催的不是很紧,基本上每天都是白天重构一下项目代码,晚上自己学习.(大概是因为容总那边的人都去度假了把项目进度放慢了吧.这两天“彩虹”姐姐也来凑热闹,据说还是直接从澳门出发,然后漂洋过海到了咱们大广东,昨天还在顺德发了个大脾气.苦逼的咱们几个还是天天待在工作室发霉,因为害怕被彩虹姐姐带走,所以把工作室的门窗锁得紧紧的,然后把空调开到20多度,穿上外套,哈哈,这才叫个爽啊!).最近看到了一篇文章名曰<不要在一门技术上吊死> 深有感触,于是就开始着手学习久闻大名但

c++学习笔记(部分语法及c++11新特性)

前言 c++的语法细节实在过杂,再加上c++11的新特性,看了又忘,忘了再看,故讲学习过程所得以笔记形式记录于此. 1. c++对变量初始化的形式 int a = 0; int a = {0}; int a(0); int a{0};//叫做列表初始化 c++11时,才得以全面应用 long double b = 1.02; int a(b); int a=b; //正确:转换执行,但丢失了部分值 int a{b}; int a={b};//错误:转换未执行,因为存在丢失信息的危险 2. 变量声

Vue.js学习笔记: 数据绑定语法---插值

文本:数据绑定最基础的形式就是文本插值,使用一对双大括号 双大括号标签会被相应数据对象的msg属性的值替换,每当这个属性变化时它也会更新 HTML: <span id="test01">Message:{{msg}}</span> JS: var vm = new Vue({     el:'#test01',     data:{         msg:'数据绑定语法--文本插值'     } }); 也可以只处理单次插值,今后的数据变化就不会再引起插值更新