Web基本概念和常识
Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web 服务是动态的、可交互的、跨平台的和图形化的。
Web 服务为⽤户提供各种互联⽹服务,这些服务包括信息浏览服务,以及各种交互式服务,包括聊天、购物、学习等等内容。
Web 应⽤开发也经过了⼏代技术的不断发展,⽬前 Web 开发依然是最重要的开发内容之⼀。Web 基础的技术包括超⽂本标记语⾔(HTML)和 HTTP 协议,HTML 是⼀种呈现数据的⽅式(给⼈看的),⽽ HTTP 则是⼀组通信的标准(语法、语义、时许),可以简单的理解为 HTTP 携带 HTML。
1. web 应⽤:⽹站(⼴义上的PC,⼿机app)
2. 浏览器(Browser):也称⽤户代理,web客户端,主要有IE、Edge、Chrome、Firefox、腾讯浏览器,360浏览器等。
3. web服务器(web server):也称HTTP服务器(HTTPserver),主要有 Nginx、Apache、Tomcat 等。
⼆、⽹站基础
1、域名
域名是⼀个IP地址的“⾯具” ,⽬的是便于记忆和访问⼀个或⼀组服务器的地址(⽹站,电⼦邮件,FTP 等)。
2、域名解析
本地HOSTS解析
DNS服务器解析
3、⽹站的基本概念
⽹站、⽹⻚、主⻚;
HTTP、URL、HTML、超链接
4、web ⽹站
web1.0(以编辑为特征)
web2.0(侧重⽤户交互)
(1)URL不同
(2)后缀不同 (开发语⾔不同)
静态⻚⾯⼀般以 .html .htm .xml 为后缀
动态⻚⾯⼀般以 .php .jsp .py等为后缀
(3)内容不同
静态⻚⾯的内容是固定的
动态⻚⾯的内容会因⽤户、浏览器、时间、地点等⽽发⽣变化。
三、HTTP 协议
HTTP协议是超⽂本传输协议的缩写,英⽂是Hyper TextTransfer Protocol。它是从WEB服务器传输超⽂本标记语言(HTML) 到本地浏览器的传送协议。
1、HTTP 原理
HTTP是⼀个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML ⽂件,图⽚⽂件,查询结果等。
HTTP协议⼀般⽤于B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即web服务器发送所有请求,web服务器收到客户端请求后进⾏响应。
2、HTTP 特点
1. http协议⽀持客户端/服务端模式,也是⼀种请求/响应模式的协议。
2. 简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、POST。
3. 灵活:HTTP 允许传输任意类型的数据对象。传输的类型由Content-Type 加以标记。除开可以响应字符串之外,还可以上传和下载⼆进制⽂件
4. ⽆连接:限制每次连接只处理⼀个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不⾜,产⽣了两项记录 http 状态的技术,⼀个叫做 Cookie,⼀个叫做 Session。
5. ⽆状态:⽆状态是指协议对于事务处理没有记忆,后续处理需要
前⾯的信息,则必须重传。
3、URI 和 URL 的区别
(1)HTTP使⽤统⼀资源标识符(Uniform Resource Identifiers,URI)来传输数据和建⽴连接。
URI:Uniform Resource Identifier 统⼀资源标识符
URL:Uniform Resource Location 统⼀资源定位符
(2)URI 是⽤来标识⼀个具体的资源的,我们可以通过 URI 知道⼀
个资源是什么,使⽤它就能够唯⼀地标记互联⽹上资源。
(3)URL 则是⽤来定位具体的资源的,标识了⼀个具体的资源位置。互联⽹上的每个⽂件都有⼀个唯⼀的。
(4)URL,也就是我们俗称的⽹址,它实际上是 URI 的⼀个⼦集。
(4)服务器反馈的响应报⽂的具体含义:
HTTP/1.5:部分表示服务器回馈的对应http版本 (刚才客户端的请求⾥⾯带有版本号,对⽅使⽤的1.5,服务器回馈的也是1.5)
200 ok:这⾥表示的是处理结果的状态码和状态的简单描述(ok)
Date:Mon,5 sep 2022 08:49:45 GMT:响应的具体时间
Content-Length:254:响应内容的⻓度
Content-Type:text/html:响应内容的类型
响应报⽂中打了⼀个空⾏(换⾏),当看到响应报⽂中有换⾏时,它的下⾯开始就是客户机要访问的具体资源了。
5、HTTP 状态码
2xx:成功,200成功、201已经创建
3xx:重定向,304未修改
4xx:请求错误,404未找到⽂件、408请求超时
5xx:服务器错,500服务器内部错误、502⽹关错误
6、HTTP 报⽂格式
⼀个完整的http访问包含请求(request)和响应(response)
(1)请求报⽂
客户端发出的报⽂:包含了请求⾏,请求头部字段,通⽤头部字段,实体头部字段及报⽂主体。
请求⾏:客户端使⽤的请求⽅法,⽐如 GET,POST等等。同时也包含了URL信息和HTTP的版本号。
请求头部字段:它包含了请求的符加信息,⽐如客户端的信息,响应的优先级等等。
通⽤头部字段:是请求报⽂和响应报⽂都会使⽤的报⽂内容。
实体头部字段:跟实体有关的资源信息,⽐如请求的实体更新时间等。
报⽂主体:⼀般来所,请求报⽂在使⽤GET ⽅法时,没有报⽂主体,使⽤ POTS ⽅法时,就会有。
(2)常⻅请求⽅法
Ⅰ. 客户端向服务器提出请求的⽅法
1. GET: 去向服务器获取资源。即请求指定的⻚⾯信息,并返回实体主体。
1. POST:⽤来传输请求的实体主体。向指定资源提交数据进⾏处理请求。数据被包含在请求体中。POST请求可能会导致新的资源建⽴或已有资源修改。
1. HEAD:从服务器端获取报⽂⾸部信息,确定客户端输⼊的 URL有效性和资源的更新⽇期。类似于get请求,只不过返回的响应没有具体内容,只⽤于获取头部
1. OPTIONS:⽤来询问服务器⽀持哪些⽅法。即获取服务器⽀持的请求⽅法
1. DELETE:⽤来删除⽂件的。请求服务器删除指定的⻚⾯
7、HTTP协议缺点
HTTP协议不会保存状态信息。
Apache 概念
1、概述
最早的 web 服务程序,基于 http 协议提供⽹⻚浏览服务。
2、特点
模块化设置、开放源代码、跨平台应⽤、⽀持多种 web 编程语⾔、运⾏稳定。
3、⼯作模式
(1)Prefork:使⽤进程处理请求,在该模式中⽐较消耗内存,但稳定性⾼,如某个进程出现问题,不会影响其他请求。
(2)Worker:属于多进程模式,每个进程⽣成多个进程;在该模式下消耗的资源⽐较⼩,适合⾼并发请求,但稳定性没有 Prefork 模式稳定。
(3)Event:该模式与 Worker 模式较为相似,不同之处在于在该模式下可以解决keepalive ⻓连接时占⽤线程资源导致浪费的问题。
(4)keep-alive ⻓连接:TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建⽴新连接所需的时间,还节约了带宽。实现⻓连接要客户端和服务端都⽀持⻓连接。
Nginx实战
⼀、Nginx 的内置变量
变量名 描述
$remote_addr 客户端 IP 地址
$remote_user 客户端⽤户名,auth_basic 认证的⽤户
$time_local 访问时间和时区
$request 请求的 HTTP ⽅法、url 和协议版本
$status 响应的 HTTP 状态码
$body_bytes 响应客户端⽂件内容⼤⼩
$http_referer 从哪个⻚⾯链接过来的
$http_user_agent 客户端浏览器信息
$http_x_forwarded_for 客户端 IP 地址,只有在配置代理或负载均衡请求下才添加该项
$host 请求中 host 字段的值
$request_filename 请求路径及⽂件名
$request_url 完整的 uri,包含请求参数
$url 不包含请求参数
$http_cookie 客户端 cookie
args 请求中的参数
$server_name nginx 的服务器名称
$request_time 从接受⽤户请求的第⼀个字段到发送
响应数据时间
$upstream_addr 后端节点 IP
$upstream_response_time 后端响应时间
$upstream_cache_status 缓存后端节点响应数据状态,有miss、hit、expried、updating 和stale
二、为 server 主机配置访问和错误⽇志
1、控制⽇志参数
(1)nginx 访问⽇志主要控制参数
log_format:⽤来定义记录⽇志的格式(可以定义多种⽇志格式,取不同名字即可)
access_log:⽤来指定⽇志⽂件的路径及使⽤何种⽇志格式记录⽇志
(2)log_format ⽇志格式变量
$remote_addr:记录访问⽹站的客户端地址。
$remote_user:远程客户端⽤户名。
$time_local:记录访问时间与时区。
$request:⽤户的http请求起始⾏信息。
$status:http状态码,记录请求返回的状态码,例如:200、301、404等。
$body_bytes_sent:服务器发送给客户端的响应body字节数。
$http_referer:记录此次请求是从哪个连接访问过来的,可以根据该参数进⾏防盗链设置。
$http_user_agent:记录客户端访问信息,例如:浏览器、⼿机客户端等。
$http_x_forwarded_for:当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数⽣效的前提是代理服务器也要进⾏相关的x_forwarded_for设置。
错误⽇志:error_log 不能改变.
⽇志⽂件:指定⽇志的存放⽬录
错误⽇志级别:debug、info、notice、warn、error、crit、alert、emerg,级别越⾼记录的信息越少
⽣产环境⼀般为 warn、error、crit 这三个级别之⼀。
不要配置 info 等级较低的级别,会造成磁盘消耗。
三、location 块的匹配规则和优先级
1、location⼤致可以分为三类
精准匹配:location = / {...}
正则匹配:location ~ / {...}
⼀般匹配:location / {...}
2、location常⽤的匹配规则
= :进⾏普通字符精确匹配,也就是完全匹配。
^~ :表示普通字符匹配。使⽤前缀匹配。如果匹配成功,则不再匹配其它 location。
~ :区分⼤⼩写的匹配。
~* :不区分⼤⼩写的匹配。
!~ :区分⼤⼩写的匹配取⾮。
!~* :不区分⼤⼩写的匹配取⾮。
3、location优先级
⾸先精确匹配 =
其次前缀匹配 ^~
其次是按⽂件中顺序的正则匹配 或*
然后匹配不带任何修饰的前缀匹配
最后是交给 / 通⽤匹配
精确>前缀>正则>⼀般>通⽤
(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) > (location ~ 完整路径) >(location 部分起始路径) >(location /)