HTTP协议

在学习计算机网络的过程中,我们会接触到互联网上应用最广泛的一种协议---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.csdn.net/u014044812/article/details/91423184  

简书:  https://www.jianshu.com/p/8fe93a14754c

本文图片有些来自网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值