跳转至

7. http协议

所有的网站都是部署在web服务器上的

在浏览器输入http地址能访问的服务器

常用web服务器

IIS Apache tomcat nginx

2、Nginx服务器

1.简介

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

2.下载安装

下载地址: http://nginx.org/

img

3. 目录结构

img

4. 启动服务

打开命令窗口,进入nginx安装目录,执行命令:nginx

img

打开浏览器,输入localhost 或者你的IP地址,127.0.0.1

出现如下页面表示服务启动成功

img

5.部署网站

拷贝你写好的网页到nginx安装目录下html子目录

img

img

访问网页: http://192.168.41.16/listweb/list.html

6. nginx常用命令

nginx常用命令:

验证配置是否正确: nginx -t

查看Nginx的版本号:nginx -V

启动Nginx:start nginx

快速停止或关闭Nginx:nginx -s stop

正常停止或关闭Nginx:nginx -s quit

配置文件修改重装载命令:nginx -s reload

错误

nginx: [error] CreateFile() "E:\nginx-1.13.5/logs/nginx.pid" failed

nginx: [error] Open() "E:\nginx-1.13.5/logs/nginx.pid" failed

解决方法:

使用命令创建/logs/nginx.pid文件:

nginx -c conf/nginx.conf

3、http协议

引入

在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:

HTML是一种用来定义网页的文本,会HTML,就可以编写网页;

HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。

1、HTTP(超文本传输协议)

HTTP是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

2、HTTP请求响应模式

graphic

3、HTTP协议的主要特点

1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

4、HTTP协议之URL

HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:

http://host[:port][abs_path]

http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

eg:

1、输入:www.guet.edu.cn

浏览器自动转换成:http://www.guet.edu.cn/

2、http://192.168.0.116:8080/index.html

5、HTTP请求包request

一次请求就是向目标服务器发送一串文本。什么样的文本?有下面结构的文本。

  1. HTTP请求包结构

graphic

​ http请求由三部分组成,分别是:请求行、请求头部、请求包体(正文)

  1. 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,
格式如下:Method  Request-URL   HTTP-Version  CRLF  

其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

  1. Http请求方式
方法 描述
GET 请求指定url的数据,请求体为空(例如打开网页)。
POST 请求指定url的数据,同时传递参数(在请求体中)。
HEAD 类似于get请求,只不过返回的响应体为空,用于获取响应头。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
  1. 常用只有Post与Get。

例子:

//请求行      
POST  /home/user/login.html  HTTP/1.1    
//请求头
Host: 114.215.86.90      
Cache-Control: no-cache      
Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed      
Content-Type: application/x-www-form-urlencoded     

//请求内容正文
username=admin&password=123456                            {username:admin,password:123456}  
GET /home/user/login.html?username=admin&password=123456 HTTP/1.1    // 请求行 
// 请求头
Host: 114.215.86.90      
Cache-Control: no-cache      
Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed      
Content-Type: application/x-www-form-urlencoded 

6、HTTP响应包response

HTTP响应包结构

graphic

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

1、状态行格式如下:

HTTP-Version  Status-Code  Reason-Phrase  CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx 指示信息--表示请求已接收,继续处理
2xx 成功--表示请求已被成功接收、理解、接受
3xx 重定向--要完成请求必须进行更进一步的操作
4xx 客户端错误--请求有语法错误或请求无法实现
5xx 服务器端错误--服务器未能实现合法的请求
常见状态代码 状态描述 说明
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在,eg:输入了错误的URL
405 方法不被允许
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

例子:

  HTTP/1.1 200 OK

  Date: Sat, 02 Jan 2016 13:20:55 GMT
  Server: Apache/2.4.6 (CentOS) PHP/5.6.14
  X-Powered-By: PHP/5.6.14
  Content-Length: 78
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
  Content-Type: text/html; charset=utf-8

  {"status":202752,"info":"\u6b64\u 8\u6237\u4e0d\u5b58\u5728\uff01","data":null}

7、请求响应示例

322.png

http_chrom

http协议1

4. http content-type详解

介绍

http协议是建立在tcp/ip协议之上的应用层协议,主要包括三个部分,状态行,头部信息,消息主体。对应一个http请求就是:请求行,请求头,请求体。

协议规定post提交的数据,必须包含在消息主体中entity-body中,但是协议并没有规定数据使用什么编码方式。开发者可以自己决定消息主体的格式。

数据发送出去后,需要接收的服务端解析成功,一般服务端会根据content-type字段来获取参数是怎么编码的,然后对应去解码。

在最早的http post请求中,只支持application/x-www-form-urlencoded,参数都是通过浏览器的url传递。其实是不支持文件上传的,这样有很多不便。在1995年的时候,出台了rfc1867,也就是《RFC 1867 From-based file upload in HTML》,用以支持文件上传。所以content-type扩充了multipart/form-data用以支持向服务器发送二进制数据。后来随着web应用的增多,增加了诸如application/json的类型。

application/x-www-form-urlencoded 在最开始的请求方式中,请求参数都是放在url中,表单提交的时候,都是以key=&value=的方式写在url后面。这也是浏览器表单提交的默认方式。
multipart/form-data 此种方式多用于文件上传,表单数据都保存在http的正文部分,各个表单项之间用boundary分开。
application/json 现在越来越多的应用使用application/json,用来告诉服务端消息主体是序列化的json字符串。由于json规范的流行,各大浏览器都开始原生支持JSON.stringfy。