前言
HTTP (HyperText Transfer Protocol,超文本传输协议),是互联网上应用最为广泛的一种网络传输协议,运行在TCP之上,浏览器作为HTTP客户端通过URL向HTTP服务端发送请求,Web服务器根据接收到的请求后,向客户端发送响应信息。
特点
简单快速
客户端向服务器请求服务时,只需传送请求方法和路径,就可以快速得到服务器的响应。
无连接
每次连接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后,即断开连接。
无状态
HTTP协议是无状态,服务器不会去记忆HTTP的状态,每次认为它都是一个新的请求(解决方案参考cookie、session...)
URL
URL(Uniform Resource Locator)统一资源定位符,是专为标识Internet网上资源位置而设置的一种编址方式,资源定位符是对可以从互联网上得到的资源的位置的一种简洁的表示,是互联网上标准资源的地址,组成:<协议>://<主机>:<端口>/<路径>
HTTP请求
HTTP的请求包括:请求行(request line)、请求头部(header)、空行 和 请求数据 四个部分组成。
在浏览器请求打开一个网页,抓包下数据
GET /test/index.html HTTP/1.1
Host: www.test.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
请求行
GET为请求类型,/test/index.html为要访问的资源,HTTP/1.1是协议版本
请求头部
从第二行起为请求头部,Host指出请求的目的地(主机域名);User-Agent是客户端的信息,它是检测浏览器类型的重要信息,由浏览器定义,并且在每个请求中自动发送。 Accept告诉服务器浏览器支持的可识别的文件格式 Accept-Encoding告诉服务器浏览器支持的编码类型,通常是某种压缩算法
空行
请求头后面必须有一个空行
请求数据
请求的数据也叫请求体,可以添加任意的其它数据。这个例子的请求体为空。
HTTP响应
Response消息由四个部分组成:
状态行
HTTP版本号、状态码和状态消息
消息报头
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8,Content-Length:响应实体的内容长度
空行
空行是必须的,和request消息里一样
响应正文
服务器返回给客户端HTML代码
HTTP请求方法
HTTP请求方法用于对指定的资源不同的操作方式(常用的是http和post,RESTful接口的话一般会用到GET、POST、DELETE、PUT),主要可以分成以下几种:
1.GET//请求指定的页面信息,并返回实体主体。
2.HEAD//类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3.POST//向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4.PUT//从客户端向服务器传送的数据取代指定的文档的内容。
5.DELETE//请求服务器删除指定的页面。
6.CONNECT//HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7.OPTIONS//允许客户端查看服务器的性能。
8.TRACE// 回显服务器收到的请求,主要用于测试或诊断。
9.PATCH//是对 PUT 方法的补充,用来对已知资源进行局部更新 。
HTTP状态码
表示服务器给客户端响应结果的状态码,http状态码是由三个十进制数字组成,第一个十进制数字定义状态码的类型,后两个数字没有分类的作用,http状态码共分为5种。总结
http作为互联网运用最广泛的协议,其重要性不言而喻,通过本篇我们主要认识了http,也为接下来我们将要讲的tcp打好个基础吧。
作者简介: 一个不像程序员的程序员,专注于前端开发,偶尔也谈谈梦想。 公众号:前端程序之路