• web server 基础知识


    Web服务基础

    用户访问网站的基本流程

    我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等。
    当我们输入www.baidu.com/时候,很快就能看到baidu的官网了,这一切看起来很平淡无奇,背后又是什么道理呢?
    普通人可以不知道,但是咱们作为it开发人员,必须得掌握清楚背后的技术。

    下面为你揭晓用户访问网站的基本流程

    某python总监,工作一天感觉很累,下了班躺床上打开他的macbook pro,双击浏览器,输入www.pornhub.com网址后,系统首先会查找本地的DNS缓存以及hosts文件信息,确定是否存在www.pornhub.com域名对应的ip解析记录,如果有就直接获取ip进行访问服务器,第一次请求时,dns缓存是没有解析记录的,hosts文件多数是开发临时测试用

    1. 如果本地dns缓存和hosts文件都没有域名解析记录,系统就会把某python总监访问的网址解析请求发送给客户端设置的DNS服务器去解析,也叫做Local DNS,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回给客户端IP地址,如果没有LDNS就会继续请求其他的DNS服务器
    2. LDNS继续从DNS系统的"."(根)开始请求www.pornhub.com域名的解析,并且根据每个层级的DNS服务器系统进行系列的查找,最终在DNS网络上找到www.pornhub.com域名对应的授权DNS服务器。这个授权DNS服务器就是企业(个人)购买域名时用于管理域名解析的服务器,服务器上有对应的域名(IP)解析。
    3. 此时授权的DNS服务器就会把www.pornhub.com对应的IP解析记录,例如(1.1.1.1)发送给LDNS
    4. 此时LDNS会把解析记录发给浏览器,并且缓存域名和IP的解析记录,便于下一次更快的返回请求
    5. 浏览器获得ip,请求对应的服务器,网站服务器接收到客户端的请求开始响应处理,将内容返回给浏览器           
    6. 图解dns解析

    7. HTTP协议

      Http协议,全称是HyperText Tansfer Protocol,中文叫超文本传输协议,是互联网最常见的协议。Http最重要的是www(World Wide Web)服务,也叫web服务器,中文叫“万维网”。
      web服务端口默认是80,另外一个加密的www服务应用https默认端口是443,主要用于支付,网银相关业务

      版本

      复制代码
      http协议诞生以来有若干个版本,主要是http/1.0 http/1.1
      
      http/1.0规定浏览器和服务器只能保持短暂的连接,浏览器的每次请求都需要和服务器建立一个TCP连接,服务器完成请求后即断开TCP连接,服务器不跟踪每个链接,也不记录请求
      
      http/1.1是对HTTP的缺陷进行重点修复,从可扩展性,缓存,带宽优化,持久连接,host头,错误通知等访问改进。
      http/1.1支持长连接,增加了更多的请求头和响应头信息,例如配置请求头的Connection的值为keep-alive,表示请求结果返回后保持连接
      复制代码

      Http请求方法

      在HTTP通信中,每个请求报文都包含一个方法,以告诉web服务器端需要执行哪些操作,这些动作被称为HTTP的请求方法
      复制代码
      1    GET    请求指定的页面信息,并返回实体主体。
      2    HEAD    类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
      3    POST    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
      4    PUT    从客户端向服务器传送的数据取代指定的文档的内容。
      5    DELETE    请求服务器删除指定的页面。
      6    CONNECT    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
      7    OPTIONS    允许客户端查看服务器的性能。
      8    TRACE    回显服务器收到的请求,主要用于测试或诊断。
      复制代码

      HTTP状态码

      复制代码
      HTTp状态码表示web服务器响应http请求状态的数字代码
      常见状态码以及作用是
      1**    信息,服务器收到请求,需要请求者继续执行操作
      2**    成功,操作被成功接收并处理
      3**    重定向,需要进一步的操作以完成请求
      4**    客户端错误,请求包含语法错误或无法完成请求
      5**    服务器错误,服务器在处理请求的过程中发生了错误
      复制代码

      HTTP状态码的命令查看

      复制代码
      curl -I www.oldboyedu.com
      Server: OES Date: Sun, 12 Aug 2018 04:18:24 GMT Content-Type: text/html Content-Length: 152 Connection: keep-alive Location: https://www.oldboyedu.com/
      复制代码

      Http报文

      什么是HTTP请求报文

      HTTP请求由请求行,请求头部,空行,请求报文主体几个部分组成

      HTTP报文:它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。

      复制代码
      请求报文的格式:
      起始行: <method> <request-URL> <version>
      
      头部:   <headers>
      
      主体:   <entity-body>
      复制代码

      GET请求报文示例:

      复制代码
      GET /books/?sex=man&name=Professional HTTP/1.1

      Host: www.example.com  主机名 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1  客户端类型
      Accept-Encoding:gzip,deflate    支持压缩
      Accept-Language:zh-cn  支持语言类型
      Connection: Keep-Alive  长链接
      复制代码

      请求行

      请求报文第一行,表示客户端想要什么
      由请求方法 url    协议版本   组成

      请求头部

      请求头由    
      关键字    :    值    组成
      通过客户端把请求相关信息告诉服务器

      空行

      请求头信息之后是一个空行,发送回车和换行符,通知web服务器以下没有请求头信息了

      请求报文主体

      复制代码
       POST / HTTP/1.1
       Host: www.example.com
       User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
       Gecko/20050225 Firefox/1.0.1
       Content-Type: application/x-www-form-urlencoded
       Content-Length: 40
       Connection: Keep-Alive
      
       sex=man&name=Professional  
      复制代码
      请求体中包含了要发送给web服务器的数据信息,请问报文主体不用于get方法,而是用于post方法。
      post方法适用于客户端填写表单的场合。

      HTTP响应报文

      HTTP 响应与 HTTP 请求相似,HTTP响应也由3个部分构成,分别是:

      • 状态行
      • 响应头(Response Header)
      • 响应正文

      状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。

      状态行,用来说明服务器响应客户端的状况,一般分为协议版本号,数字状态码,状态情况
      复制代码
      响应头部
      常见响应头信息
      Connection: Keep-Alive
      Content-Encoding: gzip
      Content-Type: text/html;charset=utf-8
      Date: Mon, 13 Aug 2018 06:06:54 GMT
      Expires: Mon, 13 Aug 2018 06:06:54 GMT
      复制代码
      空白行
      通知客户端空行以下没有头部信息了
      响应报文主体
      主要包含了返回给客户端的数据,可以是文本,二进制(图片,视频)

      HTTP响应例子

      复制代码
      HTTP/1.1 200 OK
      
      Server:Apache Tomcat/5.0.12
      Date:Mon,6Oct2003 13:23:42 GMT
      Content-Length:112
      
      <html>...
      复制代码

      URl介绍

      url中文叫“统一资源标识符”,是一个用于标识某一互联网资源名称的字符串,在世界范围内标识定位某一个唯一信息资源。

      例如

      #访问一张照片
      http://www.baidu.cn/man.jpg

      url主要用在各种www客户端和服务器程序上,url可以用一种统一的格式来描述各种信息资源,包括文件,服务器地址和目录等

      url组成

      1. 协议  
      2. 主机ip或域名
      3. 主机资源具体地址

      第一部分用"://"隔开,第二部分用"/"符号隔开

  • 相关阅读:
    Sam小结和模板
    K-string HDU
    str2int HDU
    Common Substrings POJ
    Reincarnation HDU
    实体框架自动迁移出现异常。
    C#代码配置IIS 操纵IIS
    MVC项目页面获取控制器的信息
    通过js判断手机访问跳转到手机站
    "Could not load file or assembly 'DTcms.Web.UI' or one of its dependencies. 拒绝访问。" 的解决办法
  • 原文地址:https://www.cnblogs.com/shangping/p/10885596.html
Copyright © 2020-2023  润新知