HTTP请求报文
HTTP请求报文由3部分组成(请求行+请求头+请求体):
请求行:
例如:POST /chapter17/user.html HTTP/1.1
格式:请求方式 资源路径 协议/版本
请求行必须在http请求格式的第一行。
请求头:
例如:Host: 39.108.107.149:8080
请求头从第二行开始,到第一个空格结束。
请求头和请求体之间存在一个空行。
请求头通常以键值对{key:value}
方式传递数据。
key为规范的固定值。
value为key对应的取值,通常是一个值,可能是一组。
请求体:
当请求方式是POST的时,请求体会有请求的参数,格式如下:username=zhangsan&password=123
POST http://39.108.107.149:8080/test HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 20
username=zhangsan&password=123
HTTP请求报文头属性(HTTP Request Header)
Accept
指定客户端能够接收的内容类型,专业术语称为MIME
类型(文件类型的一种描述方式)。
Accept: text/plain, text/html
Accept-Encoding
浏览器通知服务器,浏览器支持的数据压缩格式。如GZIP压缩。
Accept-Encoding: gzip, deflate, br
Accept-Language
浏览器通知服务器,浏览器支持的语言。
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie
HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Cookie: JSESSIONID=F387583148A9E4E0A81020E6D988B816; _ga=GA1.2.1423890601
Content-Type
请求的与实体对应的MIME信息。
如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded
,表示请求体内容使用url编码。
Content-Type: application/x-www-form-urlencoded
Connection
表示客户端与服务连接类型;Keep-Alive
表示持久连接,close
已关闭。(HTTP 1.1默认进行持久连接)
Connection: keep-alive
Cache-Control
指定请求和响应遵循的缓存机制,对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。
Cache-Control: no-cache
User-Agent
浏览器通知服务器,客户端浏览器与操作系统相关信息。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
Host
指定请求的服务器主机名。
Host: www.baidu.com
HTTP响应报文
HTTP的响应报文也由三部分组成(响应行+响应头+响应体):
响应状态码
由3位数字组成,第一个数字定义了响应的类别。
1xx: 指示信息,表示请求已接收,继续处理
2xx: 成功,表示请求已被成功接受,处理。
- 200 OK:客户端请求成功
- 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
- 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容
3xx: 重定向
- 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
- 302 Found:临时重定向,表示请求的资源临时搬到了其他位置
- 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
- 307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
- 304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有
4xx: 客户端错误
- 400 Bad Request:客户端请求有语法错误,服务器无法理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在。比如,输入了错误的url
- 415 Unsupported media type:不支持的媒体类型
**5xx:**服务器端错误,服务器未能实现合法的请求。
- 500 Internal Server Error:服务器发生不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
响应头
Location
指定响应的路径,需要与状态码302配合使用,完成跳转。
Location: http://www.zcmhi.com/archives/94.html
Content-Type
响应正文的类型(MIME类型)。
Content-Type: text/html; charset=utf-8
Content-Disposition
通过浏览器以下载方式解析正文
Content-Disposition: attachment;filename=xx.zip
Set-Cookie
服务器向浏览器写入Cookie。
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Content-Encoding
服务器使用的压缩格式。
Content-Encoding: gzip
响应体
响应报文体,服务器发送给浏览器的正文 响应体,响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染 ,显示页面内容。
Content-Type详解
常见的Content-Type:(Content-Type: text/html;charset=utf-8)
Content-Type | 解释 |
---|---|
text/html | html格式 |
text/plain | 纯文本格式 |
text/css | CSS格式 |
text/javascript | js格式 |
image/gif | gif图片格式 |
image/jpeg | jpg图片格式 |
image/png | png图片格式 |
application/x-www-form-urlencoded | POST专用:普通的表单提交默认是通过这种方式。form表单数据被编码为key/value格式发送到服务器。 |
application/json | POST专用:用来告诉服务端消息主体是序列化后的 JSON 字符串 |
text/xml | POST专用:发送xml数据 |
multipart/form-data | POST专用,需要在表单中进行文件上传时,就需要使用该格式 |
application/x-www-form-urlencoded
最常见的POST提交数据的方式。浏览器原生的form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded 方式提交数据。请求体格式:key=value&key2=value2
multipart/form-data
使用表单上传文件时,必须让 form 的 enctyped 等于这个值。
application/json
告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify
,服务端语言也都有处理 JSON 的函数。