前言:
对于前端而言除了那个前端“三剑客”以外,其实HTTP协议也是非常重要的。所以自己也就小小的总结一下,在此写下自己对前端部分HTTP的浅识。
http协议是什么??
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
简单来说,HTTP协议(HTTP-Hypertext transfer protocol)是一种详细规定了万维网不同设备之间互相通信的规则。
URL详解
schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]
scheme: //有我们很熟悉的http、https、ftp以及著名的ed2k,迅雷的thunder等。
host: //HTTP服务器的IP地址或者域名
port#: //HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如tomcat的默认端口是8080 http://localhost:8080/
path: //访问资源的路径
url-params: //所带参数
query-string: //发送给http服务器的数据
anchor: //锚点定位
http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff
Schema: http
host: www.mywebsite.com
path: /sj/test
URL params: id=8079
Query String: name=sviergn&x=true
Anchor: stuff
HTTP的工作流程
第一步:建立TCP/IP连接,客户端与服务器通过Socket三次握手进行连接
三次握手涉及TCP协议,有兴趣请看
关于三次握手
第二步:客户端向服务端发起HTTP请求(例如:POST/login.html http/1.1)
第三步:客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕
第四步:服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK
第五步:服务器向客户端发送应答头信息
第六步:服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端
第七步:服务端关闭TCP连接,如果服务器或者客户端增Connection:keep-alive就表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接
HTTP消息的结构
Request 消息的结构
- 第一部分:请求行
- Method表示请求方法,比如"POST","GET"
- Path-to-resoure表示请求的资源
- Http/version-number 表示HTTP协议的版本号
- 第二部分:http header
- 第三部分:body(请求方法为get时为空)
header和body之间有个空行
Response消息的结构
-
第一部分:request line 状态行
HTTP/version-number表示HTTP协议的版本号, status-code 和message 可另行了解
第二部分:request header
第三部分:body(请求方法为get时为空)
header和body之间有个空行
HTTP请求详解
General
Request URL:客户端请求服务器的URL地址
Request Method:请求的方式,最基本的有四种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.
Status Code:服务器响应请求后返回的code,code标示请求的状态,一般反应了通信的信息。
Remote Address:直译过来叫做远程地址,其实怎么理解呢?也就是说的是你请求发出的那个地址...
Request Header 请求头
-
Accept:浏览器端可以接受的媒体类型
例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,
Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);
-
Accept-Language: 浏览器申明自己接收的语言。
语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;
-
Cache-Control: 指定Response-Request遵循的缓存机制
- Cache-Control:Public 可以被任何缓存所缓存
- Cache-Control:Private 内容只缓存到私有缓存中
- Cache-Control:no-cache 所有内容都不会被缓存
-
Connection: 客户端和服务器之间用于传输HTTP数据的TCP是否持续连接
- Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
- Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Cookie: 将cookie的所有值发送给HTTP 服务器
Host: 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的
Pragma: 防止页面被缓存,只有一个用法
Pragma: no-cache-
Upgrade-Insecure-Requests: https页面不在显示http警告
该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http网页直接升级到https而不会报错.简洁的来讲,就相当于在http和https之间起的一个过渡作用.
- User-Agent: 告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.
Response Headers
- Date:表明了响应的时间 -GMT(标准时间)
- Content-Type: 发送给客户端的实体正文的媒体类型
- Connection: 允许客户端或服务器中任何一方关闭底层的连接双方都会要求在处理请求后关闭或者保持它们的TCP连接。
- Server:服务器软件的信息
- Transfer-Encoding:定义请求的传输编码
基础的状态码
Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response.
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
文笔有限,才疏学浅,文中若有不正之处,还望告知。
参考文章