一. HTTP简介
HTTP(Hypertext transfer protocol)超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相同行,通过互联网传文档的数据传送协议.
HTTP可以使浏览器更加高效,使网络传输减少,他不仅保证了计算机正确快速的传输文档,还确定传输文档中的那一部分,以及那部分内容首先显示等.
HTTP协议是一个应用层协议,有请求和响应构成,是一个标准的客户端服务器模型,HTTP协议是一个无状态的协议.
HTTP默认的端口号是80,HTTPS的端口号是443.
二. URL和URI
(一)URI:统一资源标识符
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的,URI一般由三部组成:
访问资源的命名机制
存放资源的主机名
资源自身的名称,由路径表示,着重强调于资源。
(二)URL:统一资源定位符
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:
协议(或称为服务方式)
存有该资源的主机IP地址(有时也包括端口号)
主机资源的具体地址。如目录和文件名等
三. HTTP请求
HTTP的请求报文由3部分组成,分别是:请求行,请求头,请求正文
1. GET方法
//请求行 格式:请求方式 请求地址 协议名称/版本
GET /http/userLogin.php?username=wanlum&password=123456 HTTP/1.1
//请求头
Host: localhost
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://localhost/day02-http&ajax/4-code/02-http/userLogin.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
//请求正文
username=json&password=123456
2. POST方法
//请求行 格式:请求方式 请求地址 协议名称/版本
POST /http/userLogin.php HTTP/1.1
//请求头
代表主机名称
Host: localhost
代表是否开启长链接
Connection: keep-alive
代表请求内容的长度(中文一个占三个字节)
Content-Length: 31
是否开启缓存 开启缓存 但是立即删除
Cache-Control: max-age=0
域名的源
Origin: http://localhost
安全请求
Upgrade-Insecure-Requests: 1
用户代理
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
告诉服务器请求内容是表单的url的编码
Content-Type: application/x-www-form-urlencoded
浏览器告诉服务器我能接受的内容的类型
image/png image/jpg audio/mp3 我们把这样的格式 大类型/具体类型 叫做MIME类型
作用是告诉对方用什么样的方式去解析内容
Accept: text/html,application/xhtml+xml,application/xml;q=0.9, image/webp,image/apng,*/*;q=0.8
当前的页面是从那个页面跳转过来的()
Referer: http://localhost/http/userLogin.html
浏览器告诉服务器能接受的内容的压缩格式
Accept-Encoding: gzip, deflate,
浏览器告诉服务器我所能接受的语言
Accept-Language: zh-CN,zh;q=0.8
//请求正文
username=json&password=123456
四. HTTP响应
HTTP的请求报文由3部分组成,分别是:请求行,请求头,请求正文
//响应行 格式:协议/版本号 状态码 状态码描述
HTTP/1.1 200 OK
//响应头
Date: Fri, 07 Jul 2017 06:44:11 GMT
Server: Apache/2.2.21 (Win32) PHP/5.3.10
网站用什么技术开发的
X-Powered-By: PHP/5.3.10
响应内容的长度
Content-Length: 60
长连接的时间 5s以后算超时 超时之后 开始尝试链接 尝试一次max-1 直到100被减完了 就不再尝试了
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
服务器告诉浏览器我给你的内容的格式
Content-Type: text/html
//响应正文
Array ( [username] => json[password] => 123456 )
五. HTTP状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
六. HTTP请求方法
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
七. 关于HTTP协议的面试题
1. 请简要描述在客户端浏览器中输入域名之后,到用户看到页面的整个过程.
(1) 将域名发送到DNS服务器,DNS服务器解析域名,DNS服务器将域名解析成IP地址
(2) DNS服务器将IP地址传入到浏览器中.
(3) 浏览器通过收到的IP地址,给Web服务器发送请求.
(4) Web服务器解析收到的请求信息,将响应信息传递回浏览器
2. HTTP的三次握手.
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.
3. GET方法和POST方法的区别.
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,而POST方法会把数据放在请求正文中.
GET提交的数据大小有限制,最多只有1024个字节,而POST方法体检的数据没有限制.
GET方法提交数据,因为通过URL传递关系,所以不能传递例如用户密码和用户名等涉及用户隐私的信息. 相对的,POST方法比GET方法安全.