http请求协议格式:
注意:换行都是\r\n
这些文本会按以下顺序排列:
- 请求行(request-line):请求方法“空格”URL“空格”协议版本\r\n
- 零个或任意个请求首部(header):换行\r\n
- 一个空行:\r\n
- 可选的报文主体(body)
GET index HTTP1.1 //请求方法 URI HTTP版本
host: localhost:8080 //首部字段
user agent: Mozilla/5.0 //首部字段 Firefox/61.0
(empty line)
请求首部
请求的首部由任意多个用冒号分割的纯文本键值对组成,最后以回车(CR)和换行(LF)结尾。
大多数HTTP请求首部都是可选的,宿主(Host)首部字段是HTTP1.1唯一强制要求的首部。根据使用的方法不同,如果请求的报文中包含的有可选的主体,那么请求的首部还需要带有内容长度(Content-Length)或传输编码(Transfer-Encoding)字段
常见的HTTP请求首部字段
Accept:客户端在HTTP响应中能够接收的内容类型。例如:Accept:text/html
Accept-Charset:客户端要求服务器使用的编码类型。例如:Accept-Charset:utf-8
Authorization:向服务器发送基本的身份验证证书。
Cookie:把服务器之前设置的所有cookie回传给服务器。例如:Cookie:my_first_cookie=hello;my_second_cookie=world
Content-Length:请求主体的字节长度。
Content-Type:当请求包含主体的时候,用于记录主体内容的类型。
Host:服务器的名义以及端口号。若没有端口号,则默认80。
Referrer:发起请求的页面所在的地址。
User-Agent:对发起请求的客户端进行描述。
HTTP请求方法
请求方法
GET:命令服务器返回指定的资源
HEAD
POST:命令服务器将报文主题的数据传送给URI指定的资源
PUT
DELETE
TRACE
OPTIONS
CONNECT
PATCH
安全的请求方法
安全请求方法:GET HEAD OPTIONS TRACE
非安全请求方法(对服务器状态进行修改): POST PUT DELETE
幂等的请求方法
如果一个HTTP方法使用相同的数据进行第二次调用,不会对服务器的状态造成任何改变,那么这个方法是幂等的。除了post的其他方法都是幂等的。因为重复的post请求是否会改变服务器状态取决于服务器自身。
PUT和DELETE虽不安全,但是幂等的。它们在进行第二次调用时都不会改变服务器状态。