关于http协议的总结
- http协议知识结构图
- 简介
HTTP(HyperText Transfer Protocol),超文本传输协议,是Web应用的基本协议
HTTP规定了客户端(浏览器)和服务器之间的通信步骤以及通信时所传输的数据的含义。最基本的模型是客户端向服务器发送一个请求,服务器收到请求后解析并处理请求,最后向客户端返回一个响应
HTTP协议主要包括请求和响应两部分
- http请求
请求包含三部分内容:请求行、请求头和请求体
常用请求方式有两种:get和post
get请求的请求信息:
GET /test/register?name=dandan&birthday=2017-09-12 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)...
Accept: text/html,application/xhtml+xml...
Referer: http://localhost:8080/test/register.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
get请求时会把表单数据(请求参数)追加到请求路径后面,而不是放在请求体中。其中使用?连接请求路径和请求参数,使用=连接键和值,使用&连接键值对
post请求的请求信息:
POST /test/register HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 31
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)...
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml...
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8 name=dandan&birthday=2017-09-12
post请求时会把表单数据放在请求体中
请求行 GET /test/register?name=dandan&birthday=2017-09-12 HTTP/1.1
GET |
请求方式 |
/test/register |
请求路径 |
name=dandan&birthday=2017-09-12 |
查询字符串 |
HTTP/1.1 |
协议以及版本号 |
请求头 每个请求头都有特定含义
User-Agent |
浏览器版本等信息 |
Referer |
来源页面 |
Accept-Encoding |
浏览器支持的压缩方式 |
请求体 只在post请求时请求体才可能有数据(请求头和请求体之间需要空一行)
name=dandan&birthday=2017-09-12 |
注意使用HTTP协议传输文本数据时,全部请求信息不可包含非西文字符,比如中文字符,如果需要包含非西文字符,必须在传输数据前使用URL编码把非西文字符编码为西文字符,其实转换是由浏览器自动完成的
- http响应
服务器需要为每个请求都生成一个响应,响应也包含三部分内容:状态行、响应头和响应体
响应内容(响应并不分get或者post):
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"164-1505209589118"
Last-Modified: Tue, 12 Sep 2017 09:46:29 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 164
Date: Tue, 12 Sep 2017 09:47:12 GMT <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
注册成功!
</body>
</html>
状态行 HTTP/1.1 200 OK
HTTP/1.1 |
协议和版本 |
200 |
状态码 |
OK |
状态描述 |
常见状态码及其含义
200 |
请求处理成功 |
302 |
重定向,浏览器会重新访问Location响应头指定的路径 |
304 |
资源未修改,即告诉浏览器直接使用缓存数据 |
404 |
资源未找到 |
405 |
不支持GET或POST请求(没有重写HttpServlet的doGet()或doPost()) |
500 |
服务器错误(代码抛出异常) |
响应头 每个响应头都有特定含义
Content-Type |
响应体数据类型 |
Content-Length |
响应体数据长度 |
响应体 响应体数据可能是一个页面文本、一张图片等(响应头和响应体之间需要空一行)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
注册成功!
</body>
</html>
最新文章
- 动手实验iptables的NAT功能实现流量穿透
- VoLTE 注册流程
- Random number
- android基础学习之布局
- SQLSERVER一个比较不错的分页存储过程p_splitpage
- [Tool]利用Advanced Installer建立x86/x64在一起的安装程式
- Composite C1是一个.Net平台上开源专业的CMS开源项目
- 1、Web应用程序中的安全向量 -- XSS跨站脚本攻击
- java类中为什么设置set和get方法操作属性
- 说说JAVA之网络编程 - 爬虫
- es6 module + webpack
- 关于限制DHCP服务器广播的另类方法
- 阿里云linux下web服务器配置
- python转lua最容易掉进去的坑--作用域
- python 对excel操作用法详解
- 关于MySQL卸载重新安装的问题
- Matlab:非线性热传导(抛物方程)问题
- spring中的IOC/DI的知识点
- python常用代码片段
- #阿里云#云服务器部署可道云(KodExplorer)
热门文章
- ORACLE时间相关问题
- C#窗体与SQL数据库的连接
- UVA - 10285 Longest Run on a Snowboard(最长的滑雪路径)(dp---记忆化搜索)
- Sequence Models Week 3 Trigger word detection
- POJ 1094:Sorting It All Out拓扑排序之我在这里挖了一个大大的坑
- PHP 的变量类型,变量检测
- java正则 读取html 获取标题/超链接/链接文本/内容
- Java 创建对象的几种方式
- POJ 1141 经典DP 轨迹打印
- Mac OS 终端利器 iTerm2配置大全