目录
1.2.1 URL(统一资源标识符,Uniform Resource Locator)
一、WWW概述
万维网WWW是World Wide Web的简称,也称为Web、3W等。WWW是基于客户机/服务器方式的信息发现技术和超文本技术的综合。WWW服务器通过超文本标记语言(HTML)把信息组织称为图文并茂的超文本,利用连接从一个站点跳到另一个站点。这样一来就彻底摆脱了以前查询工具只能按特定路径一步步的查找信息的限制
WWW(World Wide Web,万维网)是存储在Internet计算机中数量巨大的文档的集合。这些文档称为页面,它是一种超文本(Hypertext)信息,可以用来描述超媒体。文本、图形、视频、音频等多媒体,称为超媒体(Hypermedia)。Web上的信息是由彼此关联的文档组成的,而使其连接在一起的是超链接(Hyperlink)
超文本(Hypertext)是由一个叫网页浏览器(Web browser)的程序显示。网页浏览器从网页服务器取回称为“文档”或“网页”的信息并显示。人可以跟随网页上的超链接(Hyperlink),再取回文件,甚至也可以送出数据给服务器。顺着超链接走的行为又叫做浏览网页,相关的数据通常排成一群网页,又叫网站。
WWW是一个庞大的信息系统,它使得通过互联网连接的文档和其他资源能够相互连接和访问。这些资源主要通过URL(同一资源定位器)进行访问,并通过HTTP(超文本传输协议)传输。
WWW的构建基于三项核心技术:
- HTML(超文本标记语言):用于创建网页和网页上的链接。
- URI(同一资源标识符):作为每个资源的地址,最常见的形式是URL
- HTTP(超文本传输协议):用于在Web服务器和客户端之间传输数据
1.1 HTML
HTML(Hyper Text Markup Language)是用于创建网页和网页应用的标准标记语言。HTML是所有Web开发的基础,它描述了一个网站的结构和内容,而其外观和表现规则通常由CSS(层叠样式表)控制。
核心元素:
HTML文档由一系列的元素组成,这些元素通过标签来定义。HTML标签通常成对出现,如<tagname> </tagname>,中间包围的是元素的内容。下面是一些基本的HTML元素:
- <!DOCTYPE>:声明文档类型和HTML版本
- <html>:一个HTML文档的根元素
- <head>:包含了文档的元数据(如标题、字符集、连接到样式和脚本)
- <title>:定义了浏览器工具栏的标题或页面的标题
- <body>:包含了可见的页面内容,如文本、图片、链接和其他内容
- <h1>到<h6>:定义了六级标题
- <p>:定义了一个段落
- <a>:定义了一个超链接
- <img>:用于在页面上插入图片
- <ul><ol><li>:分别表示无序列表、有序列表和列表项
- <div>:用于组织内容的通用容器,通常与CSS一起使用来布局页面
HTML5的扩展功能:
HTML5引入了许多重要的新特性和改进,增强了Web的能力:
- 语意化元素:如<artical>,<section>,<nav>,<header>,<footer>等,使结构更清晰
- 表单控件:增加了多种类型的输入控件,如<date>,<time>,<url>等
- 图形和多媒体:<canvas>用于绘图,<svg>支持可缩放矢量图形,<audio>和<video>用于嵌入音频和视频
- 新的API:如拖放API、地理定位API、本地存储和Web Worker
1.2 URI与URL
URI(统一资源标识符,Uniform Resource Identifier)
URI是一种用来标识某一互联网资源的字符串。URI的目的是唯一标识一个资源而不必指明他在哪里存在或如何访问。URL具有两种形式:URL和URN
- URL(统一资源定位器):是URI的最常见形式,它不仅标识资源,还提供了找到该资源的方法。例如,https://www.baidu.com/index.html就是一个URL,它提供了资源的位置(w w w.baidu.com)和访问协议(https)
- URN(统一资源名称):是另一种形式的URI,它通过名字来标识资源,但不指明如何定位资源。例如,urn:isbn:0451450523通过国际标准书号唯一标识一个书籍资源,但不告诉你如何找到或获取这本书
例:
- URI:mailto:someone@example.com(标识电子邮件,不提供访问方法)
- URL:https://www.gogle.com/search?q=example(不仅提供标识资源,还提供了通过HTTPS协议访问Google搜索的方法)
- 所有URL都是URI,但URI不一定是URL
1.2.1 URL(统一资源标识符,Uniform Resource Locator)
以下是一个完整的URL示例,它包含了所有可能的组成部分:
https://username:password@www.example.com:8080/path/to/resource?name=kimi&age=5#section1
在这个URL中:
https
是协议,表示使用安全的HTTP协议。username
是用户名,用于访问资源的身份验证。password
是与用户名关联的密码。www.example.com
是主机名,表示资源所在的服务器。8080
是端口号,表示服务器监听的端口(如果不是标准端口,则需要指定)。/path/to/resource
是资源的路径,表示资源在服务器上的位置。?name=kimi&age=5
是查询字符串,用于传递额外的参数给服务器。name=kimi
是一个参数,表示名字是“kimi”。age=5
是另一个参数,表示年龄是5。
#section1
是片段标识符,用于指向页面中的特定部分(通常用于锚点)。
1.3 HTTP
HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最广泛的协议之一,基于TCP80端口。
主要用于在Web浏览器和服务器之间传输数据。这个协议定义了客户端(用户的浏览器)和服务器之间请求和相应的格式
主要特点:
- 无状态协议:HTTP自身不保存之前的交互状态,这意味着每次请求之间都是独立的。这个特点简化了服务器设计,但也限制了应用开发。为了克服这一限制,通常会在服务器端使用cookie来存储用户状态
- 可扩展:HTTP协议的请求和响应头部都支持自定义字段,使得HTTP可以适应各种用途
工作流程:
- 连接:客户端通过网络与服务器建立TCP连接(通常是80端口或443端口)
- 发送请求:客户端发送一个HTTP请求到服务器
- 处理请求并响应:服务器处理请求并回送一个HTTP响应
- 释放连接或复用:在HTTP/1.0中,每个请求/响应后通常关闭TCP连接。HTTP/1.1支持持久连接,可用于多个请求/响应
- 关闭连接:最终关闭TCP连接
HTTP消息结构:
- 请求:由一个请求行(包含方法、URI、HTTP版本)、请求头部和可选的消息体组成
- 响应:由一个状态行(包含HTTP版本、状态码3、状态文本)、响应头部和可选的消息体组成
1.3.1 HTTP请求:
HTTP请求由请求行、请求头、空行和请求体三部分组成
1.请求行:请求行是HTTP请求的第一行,包含三个部分:
(1)方法:这是一个动词,如GET、POST、PUT、DELETE等,指示请求的操作类型
- GET:请求检索指定的资源
- POST:用于表单提交或文件上传,向指定资源提交数据,通常导致服务器状态的改变或副作用
- PUT:替换指定资源的所有当前表示。服务器写入文档(危险)
- DELETE:删除指定的资源。请求服务器删除指定资源(危险)
- HEAD:域GET方法类似,但在服务器响应中只返回首部
- OPTIONS:测试服务器所支持的方法
(2)请求URI(统一资源标识符):指定所请求资源的位置
(3)协议版本:通常是HTTP/1.1 或 HTTP/2.0
例如,一个典型的请求行可能看起来像这样:
GET /index.html HTTP/1.1
这表示客户端希望使用GET方法获取位于/index.html的资源,使用的HTTP版本为1.1
2.请求头:请求头包含了关于请求和请求的资源的元数据。它们是键值对的形式。每对之间用冒号分隔。请求头在请求行之后,用空行结束。主要请求头包括但不限于:
请求头:从第二行开始到第一个空行行为为止的内容。包含多个字段
- Host:指定请求将发送到哪个主机和端口。这在访问托管在同一服务器上的多个网站时非常重要
- User-Agent:表示发出请求的客户端信息,通常包括操作系统、浏览器类型和版本等
- Accept:客户端能够接收的内容类型,如text/html、application/json等
- Content-Type:在POST或PUT请求中使用,表示请求体的媒体类型(MIME类型)
- Authorization:包含凭证信息,用于资源的认证
- Content-Length:请求体的长度(字节数)
- Referer:包含一个URL,表示本次访问上一次来自于哪个URL地址
- Cookie:记录请求者的身份认证信息
3.请求体:请求体是可选的,并不是所有的HTTP请求都包含请求体(比如GET请求没有)。请求体包含发送给服务器器的数据。在POST和PUT请求中,这些数据通常用于更新资源或创建资源。请求体的具体内容和格式由请求头中的Content-Type决定
1.3.2 HTTP响应
HTTP响应报文是服务器回应客户端请求的方式。每个响应报文由三个主要部分组成:状态行、响应头,以及可选响应体。这些部分共同描述了服务器对请求的处理结果以及返回的数据
1.状态行:状态行是响应报文的第一行,包括三个部分:
- HTTP版本:标示响应使用的HTTP协议版本,如HTTP/1.1或HTTP/2.0
- 状态码:一个三位数,表明请求处理的结果。状态码的第一个数字定义了响应的类别,常见状态码如:200 OK -- 请求成功;400 Not Found -- 请求资源未找到;500 Internal Server Error -- 服务器内部错误
- 状态描述:简短的短语描述状态码,例如“OK”“Not Found”
- 例如,一个成功响应的状态行可能为:
HTTP/1.1 200 OK
2.响应头:响应头提供了关于服务器、响应和其他访问控制的元数据,类似于请求头。响应头位于状态行之后,以空行结束,主要包括:
- Server:描述服务器软件的信息,例如 Server:Apache/2.4.1(Unix)
- Content-Type:指定响应体的媒体类型,如Content-Type:text/html;charset=UTF-8
- Content-Length:响应体的长度(字节数)
- Set-Cookie:如果服务器希望客户端存储一个cookie,会使用此头部
- Date:响应生成的日期和时间
3.响应体:响应体是服务器返回的实际数据部分,他不是所有响应都有的。响应体可能包含请求的HTML文件、图像、错误消息、或者其他类型的数据
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 12345
Server: Apache/2.4.1 (Unix)
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
ETag: "3f80f-1b6-53b61a31"
Accept-Ranges: bytes
Cache-Control: must-revalidate, post-check=0, pre-check=0
Content-Language: en
Connection: keep-alive
<html>
...
</html>
1.3.3 状态码
1xx(信息性状态码)
- 100 Continue:客户端应继续其请求。
- 101 Switching Protocols:服务器将遵从客户端的请求转换到另外一种协议。
2xx(成功状态码)
- 200 OK:请求成功。
- 201 Created:请求成功,并且服务器创建了新的资源。
- 202 Accepted:服务器已接受请求,但尚未处理。
- 204 No Content:服务器成功处理了请求,但不需要返回任何实体内容。
3xx(重定向状态码)
- 300 Multiple Choices:请求的资源可有多处可寻。
- 301 Moved Permanently:请求的资源已被永久移动到新位置。
- 302 Found:临时重定向。
- 303 See Other:建议客户端通过GET方法获取资源。
- 304 Not Modified:请求的资源未修改,可以使用缓存的版本。
- 307 Temporary Redirect:临时重定向,与302类似,但不允许从POST变成GET。
4xx(客户端错误状态码)
- 400 Bad Request:服务器无法理解请求格式。
- 401 Unauthorized:请求需要用户的身份认证。
- 403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
- 404 Not Found:请求的资源在服务器上不存在。
- 405 Method Not Allowed:请求方法(如GET、POST)不被允许。
- 408 Request Timeout:请求超时。
- 409 Conflict:请求与服务器当前状态冲突。
- 410 Gone:请求的资源已被永久删除。
5xx(服务器错误状态码)
- 500 Internal Server Error:服务器遇到了阻止其完成请求的意外情况。
- 501 Not Implemented:服务器不支持请求的功能,无法完成请求。
- 502 Bad Gateway:作为网关或代理工作的服务器从上游服务器接收到无效响应。
- 503 Service Unavailable:服务器目前无法使用(由于超载或停机维护)。
- 504 Gateway Timeout:网关或代理服务器在等待上游服务器的响应时发生了超时。
1.4常见Web URL格式
- 基本网址
http://www.example.com
这是一个标准的HTTP网址,不带端口号或虚拟目录。默认情况下,HTTP协议使用80端口
- 带端口号的网址
http://www.example.com:8080
这个URL指定了端口号8080。通常,Web服务器可以配置在除了默认端口外的任何端口上,这在主机上运行多个Web服务时特别有用
- 包含用户名和密码的URL格式
http://username:password@www.example.com:8080/index.html
虽然不推荐,但有时可能需要这样做
实验一、网站搭建
步骤1:安装IIS服务
IIS服务我们在上一篇的FTP实验中已经安装过,这里不多赘述。如果你在上个实验中直接安装了FTP,则需要再安装IIS并在服务器角色中选中“Web服务器(IIS)”并安装
步骤2:配置站点
- 选择IIS->右键打开管理器
- 注意:在配置你自己的网站之前需要将之前的默认站点(Default Web Site)关闭,否则可能会造成混乱
- 点击网站->右键添加网站或在右侧选择添加网站
- 输入你的网站和地址,这里的地址最好使用你虚拟机的IP地址----网站名称指新建的网络名称;物理路径指此网站的网页文件存放位置;主机名指访问此站点的域名,由于要求不允许IP地址访问,所以此处必须填写主机名
步骤3:配置网页文件
- 现在我们来修改默认网页文件:打开默认文档
- 默认文档用于设置不同网页文件名称,如网页文件是topsec.html需要从右侧添加,否则访问网站时会找不到网页而访问失败。在这里我使用index.html,所以不用添加
- 将网页放到你之前填写的物理路径文件夹下
- 给你的网站配置DNS
- 测试访问
在本实验中,我们还可以尝试拉取一个网站的前端代码“为己所用”。有两种方式可以实现:一是可以在你想拉取的网页中右键选择“查看源码”,将里面的代码完整复制到你本地的index.html中,这种方法的缺点是无法显示网页中的其他资源(如图片、音频等);另一种方法是选择“将页面另存为”,将页面资源连通源代码下载到本地,这样在放到正确路径下就可以显示完整前端页面了
1)访问失败可能性及诊断步骤
步骤1:检查IIS服务状态
首先确认IIS服务示范正在运行:打开服务器管理->找到与IIS相关的服务,如World Wide Web Publishing Service,确认他们的状态是否在运行
步骤2:检查网络设置
确认服务器的IP地址和域名系统设置是否正确:检查服务器的IP地址配置,确认DNS设置是否正确,确保域名可以正确解析到服务器的IP地址。因为在此我为了方便,服务器与客户机我使用了一台虚拟机,所以为了避免访问到与你的网站重名的网站(假如你使用了baidu.com作为你的网站名字,很可能不小心访问到真实的百度),我直接使用127.0.0.1作为我们DNS,这样可以保证网页只在本地范围内加载
步骤3:检查应用程序池和网站配置
打开IIS管理器,确认应用程序池对应的 .NET版本和托管是否正确,确保应用程序池处于启动状态。检查网站的绑定设置,确保端口和IP地址没有冲突,并且域名(如果使用)正确绑定
步骤4:检查防火墙设置
确认Windows防火墙或任何其他网络防火墙没有组织访问IIS服务的端口(通常是80和443端口)。如果需要,添加防火墙规则以允许流量通过这些端口
步骤5:检查文件目录和目录权限
确认IIS的应用程序池账户有权访问网站的物理路径:检查文件夹权限,确保有适当的读取权限和执行权限
步骤6:查看事件查看器和IIS日志
打开事件查看器(Event Viewer),检查与IIS相关的错误日志:查看日志文件(通常位于%SystemDrive%\inetpub\logs\LogFiles),找出任何可能的错误或警告信息
步骤7:使用命令行工具诊断
使用命令行工具如ping和telnet来测试网络连接和端口可访问性:使用ping命令检查服务器的网络连通性;使用telnet命令尝试连接到你的服务器的HTTP端口
2)文件目录权限错误
步骤1:定位网站的物理路径
首先你需要知道网站文件存储在哪里,可以通过IIS管理器查找:在左侧的连接树中找到并选择你的网站->在右侧操作面板中,点击“基本设置”,查看“物理路径”
步骤2:检查和修改文件夹权限
打开文件资源管理器,导航到你的网站的物理路径->右键点击文件夹,选择“属性”->转到“安全”标签页,这里列出了当前文件夹的所有安全权限
步骤3:添加或修改权限
在“安全”标签页中,点击“编辑”以修改权限->如果需要添加新的用户或组(例如,你的应用池程序的身份),点击“添加”->在“输入对象名称以选择”框中,输入应用程序池的名称。对于默认的ApplicationPoolIdentity,你需要输入IIS AppPool\AppPoolName->选择刚刚添加的用户或组,在下方的“权限”中,勾选需要赋予的权限(至少勾选“读取和执行”“列出文件夹内容”和“读取”),之后点击应用->确定
- 在添加页面中可能会无法解析ISS AppPool\{AppPoolName},可以直接点击确定,手动添加后生效
步骤4:确认应用程序池身份权限
确保IIS应用程序池使用的身份具有访问该物理路径的权限,可以在IIS管理器中检查和确认:点击左侧的应用程序池,右键选择“高级设置”->在“进程模型”部分找到“身份”,确认设置是否正确
步骤5:测试访问
在修改权限后,测试网站是否能正确访问,确认没有文件访问权限错误
- 确保只授予必要的权限,避免赋予过多的权限(如“完全控制”)
- 如果你的服务器加入了域,可能需要考虑策略和其他高级权限设置的影响
3)主机不能解析域名
步骤1:检查DNS设置
如果这个主机名应该被外部网络访问,确定你的DNS服务器上有响应的A记录指向正确的IP地址
使用nslookup或dig命令来验证DNS记录是否正确
nslookup yourhostname.com
dig yourhostname.com
步骤2:修改本地hosts文件(对于本地测试或开发环境)
对于本地测试或开发,你可以在本地计算机文件中添加一个条目来解析主机名到IP地址。这可以绕过DNS服务器进行测试
在Windows上,hosts文件通常位于C:\Windows\System32\drivers\etc\hosts,使用管理员权限打开文本编辑器,然后添加你的本机IP地址和你的主机名
172.16.xx.xx yourhostsname.com
步骤3:清除DNS缓存
如果你更改了DNS设置或hosts文件,可能需要清除本地DNS缓存才能看到更改,可以使用 ipconfig /flushdns
步骤4:重新测试
尝试重新访问,如果问题仍未解决。尝试检查网络配置:确保没有网络设备或软件(如防火墙或路由器设置)阻止主机名的解析或重定向。
实验二、Windows Web基于端口的访问
Web站点在IIS中发布基本操作,应用主机名在IIS中发布多个站点
步骤1:创建两个网站
和上面创建网站的步骤相同,只不过有几点需要注意:
- 两个网站创建完成后,在绑定部分,将两个网站的类型都设置为http,IP地址选择All Unassigned或指定IP地址
- 主机名要保持一致,如都为topsec.com
- 一个端口可以保持默认,另一个需要修改端口,如改为8800
步骤2:配置hosts文件(如果在本地测试)
如果你在本地测试并且没有使用真实的DNS服务,你需要修改hosts文件以解析域名到你的本地服务器,方法和上个实验一致。修改后需要刷新DNS缓存
步骤3:测试网站
打开浏览器,分别访问:
http://www.topsec.com/
http://www.topsec.com:8800/
应该分别加载网站1和网站2的内容