在学习计算机网络的过程中,我们会接触到互联网上应用最广泛的一种协议---HTTP协议(超文本传输协议)。我根据很多介绍比较精炼而全面的博文,最后自己也进行了小小的总结,并且也附上了我看过参考过的博文地址,小菜鸟还有很长的学习路orz.....
1、HTTP的请求和响应概述以及请求方法
(1)HTTP协议是由客户端(client)发起请求,服务端(server)回复响应
这样就限制了HTTP协议在客户端没有发送请求的时候,服务端无法将信息发送出去
(2)HTTP请求方法
2、HTTP协议的特点
(1)http协议支持客户/服务器模式
(2)简单快捷 ,客户端向服务器请求只需要传送请求方法和路径
(3)灵活,http协议传输允许任意类型的数据对象,正在传输的数据类型由Conten-Type来标记
(4)无连接,http协议限制每次连接只处理一个请求,服务器处理后,收到客户端应答即断开连接
(5)无状态,协议对于事务处理没有记忆能力,服务器不会记住客户端的状态,当客户端向服务器发出请求时,服务器会根据请求来发送数据,但是发送完不会记录信息。
关于tcp/ip的连接,在另一篇tcp/ip连接
3、HTTP协议格式 (参考文章:https://www.jianshu.com/p/8fe93a14754c)
3.1URI结构
HTTP
使用统一资源标识符(URI
)来传输数据和建立连接。URL
(统一资源定位符)是一种特殊种类的URI
,包含了用于查找的资源的足够的信息,我们一般常用的就是URL
,而一个完整的URL
包含下面几部分:
例如这个URL :http://www.fishbay.cn:80/mix/76.html?name=kelvin&password=123456#first
1.协议部分
该URL
的协议部分为http:
,表示网页用的是HTTP
协议,后面的//
为分隔符
2.域名部分
域名是www.fishbay.cn
,发送请求时,需要向DNS
服务器解析IP
。如果为了优化请求,可以直接用IP
作为域名部分使用
3.端口部分
域名后面的80
表示端口,和域名之间用:
分隔,端口不是一个URL
的必须的部分。如果端口是80
,也可以省略不写
4.虚拟目录部分
从域名的第一个/
开始到最后一个/
为止,是虚拟目录的部分。其中,虚拟目录也不是URL
必须的部分,本例中的虚拟目录是/mix/
5.文件名部分
从域名最后一个/
开始到?
为止,是文件名部分;如果没有?
,则是从域名最后一个/
开始到#
为止,是文件名部分;如果没有?
和#
,那么就从域名的最后一个/
从开始到结束,都是文件名部分。本例中的文件名是76.html
,文件名也不是一个URL
的必须部分,如果没有文件名,则使用默认文件名
6.锚部分
从#
开始到最后,都是锚部分。本部分的锚部分是first
,锚也不是一个URL
必须的部分
7.参数部分
从?
开始到#
为止之间的部分是参数部分,又称为搜索部分、查询部分。本例中的参数是name=kelvin&password=123456
,如果有多个参数,各个参数之间用&
作为分隔符。
3.2Request
HTTP的请求包括:请求行(request line)、请求头部(header)、空行 和 请求数据 四个部分组成。
抓包request:
GET /mix/76.html?name=kelvin&password=123456 HTTP/1.1
Host: www.fishbay.cn
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
1.请求行:GET为为请求类型,/mix/76.html?name=kelvin&password=123456
为要访问的资源,HTTP/1.1
是协议版本
2.请求头部:Host指出请求目的地即主机域名 User-Agent为客户端信息
3.空行:请求头后面必须有一个空行
4.请求体(也叫请求数据)可以添加任意其他数据
3.3Response
一般情况下,服务器收到客户端的请求后,就会有一个HTTP
的响应消息,HTTP响应也由4
部分组成,分别是:状态行、响应头、空行 和 响应体。
抓包response:
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 20 Feb 2017 09:13:59 GMT
Content-Type: text/plain;charset=UTF-8
Vary: Accept-Encoding
Cache-Control: no-store
Pragrma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Content-Encoding: gzip
Transfer-Encoding: chunked
Proxy-Connection: Keep-alive
{"code":200,"notice":0,"follow":0,"forward":0,"msg":0,"comment":0,"pushMsg":null,"friend":{"snsCount":0,"count":0,"celebrityCount":0},"lastPrivateMsg":null,"event":0,"newProgramCount":0,"createDJRadioCount":0,"newTheme":true}
1.状态行:包括协议版本号、状态码、状态消息三部分
2.响应头:响应头是客户端可以使用的一些信息,如Date、Content-Agent、Connection(默认是长连接)
3.空行:响应头和响应体之间要有空行
4.响应体:即响应正文
3.4状态码:HTTP协议的状态码由3位数字组成,第1位定义响应的类型
1、 1xx:提示信息----表示请求已接收,继续处理
2、 2xx:成功----请求已被成功接收、理解、接收
3、 3xx:重定向----要完成请求必须进行进一步的操作
4、 4xx:客户端错误----请求有语法错误或者请求无法被实现
5、 5xx:服务器端错误----服务器未能实现合法请求
常用的状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
4、HTTPS简介
https是安全的HTTP通道,在通信中加入了SSL层,通信数据被加密防止被窃取
通信流程如下:
5、HTTP和HTTPS之间的区别
1、https需要到ca申请证书,一般证书大都需要交费
2、http的信息为明文传输,https是具有安全性的加密传输
3、http和https的端口号不一样,http为80;https为443
4、http的连接简单是无状态的;https的协议由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议更安全
参考博文:https://blog.youkuaiyun.com/u014044812/article/details/91423184
简书: https://www.jianshu.com/p/8fe93a14754c
本文图片有些来自网络