初识HTTP协议
1. 简介
HTTP,超文本传输协议(Hypertext Transfer Protocol),是网络五层模型中的应用层的协议。作用是处理资源的请求响应过程。如图,HTTP就是定义了请求端和应答端之间通信的格式:
如果说把TCP IP协议比作是快递,通过IP和Port将物品送至到正确的买家,那么HTTP这样的应用层协议就好比是说明书,指导用户如何使用这个物品。
2. HTTP报文格式
请求和相应的报文格式类似,都是请求行 + 请求头 + 空行 + 请求体
HTTP请求
GET http://vams.cqvip.com/manage/plugin/jquery-easyui/jquery.min.js HTTP/1.1
Host: vams.cqvip.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Accept: */*
Referer: http://vams.cqvip.com/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7,en-US;q=0.6,zh-HK;q=0.5
Cookie: username=1931053955; schoolCode=11560; password=cheng255;
-
首行: [方法] + [URL] + [版本]
-
Header: 请求的属性, 键值对存在,键和值之间用:分割,每组属性之间使用\n分隔;遇到空行表示Header部分结束
-
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
如上述的请求就没有请求体。
HTTP响应
```html
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"83059-1545037041351"
Last-Modified: Mon, 17 Dec 2018 08:57:21 GMT
Content-Type: application/javascript;charset=UTF-8
Content-Length: 83059
Date: Sat, 20 Mar 2021 04:04:31 GMT
/*! jQuery v2.0.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
*/
和请求不同的是 首行: [版本号] + [状态码] + [状态码解释]
返回的Body内容解析格式由请求头中的Content-Type字段决定。
1. HTTP 的请求方法
常用的就是GET和POST,GET和POST的区别:
- GET的请求没有请求体,数据只能放在URL后面,POST的数据可以放在URL和请求体。
- URL长度有一定的限制,所以GET方法请求数据长度有限制,并且URL只能传输ascii字符,所以如果有其他字符需要传输,需要序列化等操作。
- POST的安全性更好,因为数据放在URL中会暴露在外面,没有放在请求体里安全。
- GET可请求以收藏为书签,POST请求不能。
- GET参数保留在浏览器历史种,POST不会。
2. HTTP的状态码
常用的状态码:
- 200 OK 请求成功
- 301 Moved Permanently 永久移动。请求的资源已经被永久的移动到新的URL,返回信息会包括新的URL,浏览器会自动定向到新的URL。以后任何新的请求都应使用新的URL代替。
- 302 Found 临时移动。资源知识临时被移动,URL不变。
- 307 Temporary Redirect 临时重定向。
- 400 Bad Request 客户端请求服务端无法理解。一般是HTTP协议格式或者数据的格式有问题。
- 404 Not Found 服务器无法找到资源。URL和资源路径没有映射正确。
- 405 客户端请求中的方法被禁止。服务端没有提供客户端请求的方法。
- 500 Internal Server Error 服务器内部错误,无法完成请求,一般是服务端抛异常的时候。
3. HTTP常见的Header
-
Content-Type: 数据类型(text/html, json/application等)
-
Content-Length: Body的长度
-
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
-
User-Agent: 声明用户的操作系统和浏览器版本信息;
-
referer: 当前页面是从哪个页面跳转过来的;
-
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
-
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
3. 与HTTP相关的协议
-
DNS协议:我们在访问页面时,经常使用www.baidu.com这样的域名。但在TCP传输时,却是 IP 到 IP 的传输,DNS协议就是可以将域名和IP地址相互映射的系统。
-
TCP:HTTP协议就是基于TCP进行数据传输的。 TCP详解
-
HTTPS:HTTPS在通信过程中对数据进行加密操作和认证机制。HTTPS并不是什么新协议,知识HTTP通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security) 协议替代而已。