网站开发文档教学,朗朗上口的公司名称,中国最新新闻头条,厦门外贸商城网站建设文章目录 1. HTTP协议1.1 认识URL1.2 urlencode和urldecode1.3 HTTP协议格式1.3.1 HTTP请求1.3.2 HTTP响应1.3.3 外网测试1.3.4 添加html文件1.3.5 HTTP常见Header1.3.6 GET和POST 1.4 HTTP的状态码1.4.1 301和3021.4.2 代码实现 1.5 Cookie1.5.1 代码验证1.5.2 Cookiesession … 文章目录 1. HTTP协议1.1 认识URL1.2 urlencode和urldecode1.3 HTTP协议格式1.3.1 HTTP请求1.3.2 HTTP响应1.3.3 外网测试1.3.4 添加html文件1.3.5 HTTP常见Header1.3.6 GET和POST 1.4 HTTP的状态码1.4.1 301和3021.4.2 代码实现 1.5 Cookie1.5.1 代码验证1.5.2 Cookiesession 1.6 Connection 1. HTTP协议
虽然我们说应用层协议是我们自己定的但实际上已经有一些现成的又非常好用的应用层协议供我们直接参考使用。HTTP(超文本传输协议)就是其中之一。
1.1 认识URL
平时我们俗称的 “网址” 其实就是说的 URL 这里的登录信息现在已经隐藏起来改成例如手机登录、微信登录等方式。 这里服务器地址也叫做域名会被转换成IP并且访问网络服务服务端必须具有端口号。因为网络通信的本质IPprot。但是使用确定协议的时候一般会缺省端口号。所以浏览器访问指定的URL的时候浏览器必须给我们自动添加prot。
那么浏览器是如何得知URL匹配的prot是哪个呢 特定的众所周知服务端口号是确定的。http对应的是80https对应的是443sshd对应的是22。
那么http是做什么的呢 像我们查看图片观看视频其实都是以网页的形式呈现的也就是.html文件既然是文件那么客户端想要观看视频时就是发送请求到服务器然后服务器就会打开文件再给客户端发送过来。
那么http就是向特定的服务器申请特定的资源获取到本地进行展示或使用。
那么资源文件在LInux服务器上我们要打开读取发送给客户端前提是要找到这个文件找一个文件靠的就是路径所以在URL中包含了路径。/就是Linux下的路径分隔符。
1.2 urlencode和urldecode
像 / ? : 等这样的字符已经被url当做特殊意义理解了因此这些字符不能随意出现。比如某个参数中需要带有这些特殊字符就必须先对特殊字符进行转义。
转义的规则如下将需要转码的字符转为16进制然后从右到左取4位(不足4位直接处理)每2位做一位前面加上%编码成%XY格式。
比如 这里 被转义成了 “%2B”。
1.3 HTTP协议格式
1.3.1 HTTP请求 请求行里对应的是请求方法 资源路径 http的版本
请求报头对应的是key:空格value
读到空行就代表前面的请求行和请求报头都读取完了。
1.3.2 HTTP响应 响应和请求一样是4个结构。
1.3.3 外网测试
如果我们想让浏览器去访问我们的云服务器我们要先开放我们的端口这里每个服务器开放我们的端口不一样大家需要自己去上网搜索一下。 首先这里只有服务器的编译没有客户端。 这里服务器也是简单的多进程版本我们让孙子进程去执行这个服务。 执行的服务是先把对方的请求信息打印出来然后再做出响应。 当我们在浏览器链接这个IP时可以看到浏览器上打印出我们的有效载荷。然后服务器也收到了对应的请求信息。 下面我们继续测试 先让服务器起来。 这里我们安装了telnet命令它是远程按照某种协议去登录。只要显示’^]就代表我们登录成功了然后Ctrl] 然后再回车一下就可以发送我们的请求。
1.3.4 添加html文件
我们创建一个wwwroot文件夹来保存我们网页的信息。 这里就保存我们网页的首页信息。那么我们如何把这个文件读取出来并添加相应的报头信息呢
那么第一个问题就是文件在哪里 在前面的演示中我们知道在请求的请求行中第二个字段就是你要访问的文件路径。 但是这里的第一个/不是根目录它是web根目录但是可以设置成根目录。 那么如果我们不想把/a设置成根目录我们可以在前面加上前缀 path /a/b/index.html;recource ./wwwroot; // 我们的web根目录recource path; // ./wwwroot/a/b/index.html下面我们就写一个获取请求行文件路径的方法 如果请求的只有一个/说明访问的就是web根目录难道需要把web根目录下的所有文件都返回这是不可能的所以我们把首页信息返回。 获取到文件路径后我们需要把web根目录添加上 添加完成之后我们就可以打开文件并去读取。 读取之后返回。 顺便我们记录一下文件的类型。 在这里我们可以添加报头内容的类型和内容的长度。
Content-Type内容类型一般是指网页中存在的 Content-Type用于定义网络文件的类型和网页的编码决定浏览器将以什么形式、什么编码读取这个文件。 如果文件里的后缀不是.jpg类型我们就把Content-Type设置成text/html HTML格式(HTML是一种纯文本格式的文件内部只能书写文字内容不能添加图片、音频、视频)。
如果文件里的后缀是.jpg类型我们就把Content-Type设置成image/jpeg jpg图片格式(“JPG是JPEG格式文件JPEG格式是最常用的图像文件格式后缀名为“.jpg”或“.jpeg”)。
测试结果
1.3.5 HTTP常见Header
Content-Type: 数据类型(text/html等)。 Content-Length: Body的长度。 Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上。 User-Agent: 声明用户的操作系统和浏览器版本信息。 referer: 当前页面是从哪个页面跳转过来的。
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问。 Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能。
1.3.6 GET和POST
网络行为无非两种 1.把远端的资源拿到本地采用的是GET方法。 2.把我们的属性字段提交到远端采用的是GET方法或者POST方法。
下面我们就试着把我们的属性字段提交到远端 我们在这里创建了一个表单action属性规定当提交表单时向何处发送表单数据。 method属性是规定如何发送表单数据(表单数据发送到action属性所规定的页面)。 然后我们点击按钮就会出现404因为我们找不到/a/b/c.html所以就报错404 下面我们看一下它的抓包情况 从上图可以看出在HTTP中GET方法会以明文方式将我们对应的参数信息拼接到URL中。
下面我们再看一下POST方法 测试输入 可以看到URL中没有我们的参数信息。
看一下它的抓包情况 从上图可以看出POST方法提交参数会将参数以明文的方式拼接到HTTP正文中来进行提交。
所以两者方法的比较GET方法传参不私密POST方法传参通过正文传参相对来说私密点。并且如果我们传的资源比如视频音乐这些比较大的不采用GET方法否则URL会非常长。
1.4 HTTP的状态码 最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)。
1.4.1 301和302
301叫做永久重定向302叫做临时重定向。 这里的重定向是什么意思呢 我们客户端向服务器进行请求它给客户端响应响应中的状态码如果为301或者302那么它的响应报头里有location一个新的网站(new url)。 那么我们的浏览器就会自动的跳转到new url这个服务端。这个过程就是重定向。
1.4.2 代码实现 我们这里读取到请求之后服务器不做响应让它重定向。 大家可以这样去测试一下你会发现它会跳转到qq的网页。这里我们写Location时需要加上域名不然只能站内跳转。
1.5 Cookie
http协议的特点之一无状态意思是http不会记录你上一秒的请求。
那么肯定会有许多人有疑问假如我们是某个网站的VIP我们想看一部电影我们肯定要先登录我们的VIP如果我们不记录那么每访问一部电影我们就登录一次VIP吗
答案肯定不是的虽然http没有记录但是我们却有保持记录的手段所以就需要用到Cookie(会话保持)。
比如我们登录时需要输入我们的用户名和密码给服务端请求响应后服务器会把我们输入的内容写到客户端的Cookie中。等下次再次请求时会自动携带浏览器访问该网站对应的Cookie文件中的内容。
1.5.1 代码验证
我们要设置Cookie需要使用一个响应报头Set-Cookie。 测试如下 我们可以看到在浏览器中就会把内容保存到Cookie中。
那么Cookie是什么呢 是浏览器维护的文件存在磁盘上或者内存中。
但是单单一个Cookie是不安全的所以我们采用了Cookiesession。
1.5.2 Cookiesession
当我们输入用户名和密码后服务器会先认证但是不着急先返回它先会自动创建一个session文件。然后把用户的临时私密信息保存在这个文件中。最后会把session_id(具有唯一性)写入到本地的Cookie中。下次再请求的时候就会通过session_id来获取信息。
1.6 Connection
用户看到的完整的网页内容背后可能是无数次的http请求。1.0的HTTP版本是一种无状态无连接的应用层协议。 HTTP1.0规定浏览器和服务器保持短暂的链接。并且http底层主流采用的是tcp协议所以浏览器每次请求都需要与服务器建立一个TCP连接服务器处理完成以后立即断开TCP连接无连接服务器不跟踪也每个客户单也不记录过去的请求无状态。 所以造成的问题每次发送请求都需要进行一次TCP连接而TCP的连接释放过程又是比较费事的。这种特性会使得网络的利用率变低。
所以在http1.1版本增加Connection字段通过设置Keep-Alive保持HTTP连接不断卡。避免每次客户端与服务器请求都要重复建立释放建立TCP连接。提高了网络的利用率。
那么我们使用http1.1版本时在客户端和服务端之间需要进行版本协商工作。如果客户端和服务端的Connection都是Keep-Alive说明双方同意采用长链接的方案。如果某个当中的Connection是closed说明只能采用短链接。