7. http协议
所有的网站都是部署在web服务器上的¶
在浏览器输入http地址能访问的服务器
常用web服务器
IIS Apache tomcat nginx
2、Nginx服务器¶
1.简介¶
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2.下载安装¶
下载地址: http://nginx.org/
3. 目录结构¶
4. 启动服务¶
打开命令窗口,进入nginx安装目录,执行命令:nginx
打开浏览器,输入localhost 或者你的IP地址,127.0.0.1
出现如下页面表示服务启动成功
5.部署网站¶
拷贝你写好的网页到nginx安装目录下html子目录
访问网页: 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请求响应模式¶
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¶
一次请求就是向目标服务器发送一串文本。什么样的文本?有下面结构的文本。
- HTTP请求包结构
http请求由三部分组成,分别是:请求行、请求头部、请求包体(正文)
- 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,
格式如下:Method Request-URL HTTP-Version CRLF
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
- Http请求方式
方法 | 描述 |
---|---|
GET | 请求指定url的数据,请求体为空(例如打开网页)。 |
POST | 请求指定url的数据,同时传递参数(在请求体中)。 |
HEAD | 类似于get请求,只不过返回的响应体为空,用于获取响应头。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
- 常用只有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响应包结构
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、请求响应示例¶
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。 |