HTTP
1. 简介
HyperText Transfer Protocol,超文本传输协议:通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。请求和响应消息的头以ASCII码形式给出。
采用80或8080端口(https是443);无状态的协议,不需要保持持久的连接,节省传输时间、网络空间浪费。
2. 工作流程
- 1.输入url或点击连接
- 2.浏览器进行DNS解析(DNS见后续文章)
- 3.TCP三次握手(TCP见后续文章)
- 4.http请求request
- 5.http响应response
- 6.TCP四次挥手断开连接(TCP见后续文章)
3. http请求
请求报文:
就是四个部分(请求行、请求头、空行(隔离上下部分)、请求数据主体)
-
请求行:
请求方法Method–见下文;请求url(统一资源定位符);http协议及版本(一般是:HTTP/1.1)
请求方法method:
# OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
# HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
# GET:向特定的资源发出请求。
# POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
# PUT:向指定资源位置上传其最新内容。
# DELETE:请求服务器删除Request-URI所标识的资源。
# TRACE:回显服务器收到的请求,主要用于测试或诊断。
# CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
-
GET和POST的区别:
1.GET方法的数据参数是暴露在起始行的URL中的(会被浏览器记录保存),而POST方法的数据参数是在报文主体中的(不会被保存)。
2.GET方法相对来说没有POST安全,因为它的数据参数可以直接从URL中获取,但是GET的效率更高。
3.GET方法的数据参数大小有一定的限制(1024)(原因也是因为它的数据参数是放在URL中的),而POST对数据大小理论上是没有限制的,这个要看浏览器。
4.GET请求只能url编码,而post支持多种编码。 -
常见请求头:
# User-Agent----客户端的操作系统、浏览器的版本信息等 # Cookie----存储用户信息,会话信息 # Accept----告诉服务器,客户端接受什么类型响应 # Accept-Charset ----指定客户端接受的字符集 # Accept-Encoding----指定能接受的编码格式(一般是压缩形式,gzip和deflate) # Accept-Language:告诉服务器能够发送哪些语言 # Host----指定请求的资源的主机和端口号 # Expect:允许客户端列出某请求所要求的服务器行为 # Referer---告知下一次请求服务器的来源页面连接
-
请求体:
请求的具体数据(可能被加密)
4.http响应
响应报文:
四个个部分(响应行,响应头,空行、响应体)
-
响应行
http协议及版本,状态码(见下文)及状态描述
状态码:
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 -
常见响应头
# Set-Cookie 向客户端发送cookie,与cookie头相互对应 # Cache-Control 响应输出到客户端后,服务端通过该属性告诉客户端该怎么控制响应内容的缓存 # Location 在重定向中或者创建新资源时使用 # Server---服务器所使用的web服务器信息 # Content-Type----响应正文的内容类型 # Content-Encoding----响应正文的编码方式 # Content-Length----响应正文的内容长度
-
其次就是响应正文
请求和响应报文最主要区别就是行的区别,一个是method+url+版本
一个是版本+状态码