Ajax-请求头Header参数

参数列表

Header 解释 示例
Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html,application/json
Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5
Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 Accept-Encoding: compress, gzip
Accept-Language 浏览器可接受的语言 Accept-Language: en,zh
Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges: bytes
Authorization HTTP授权的授权证书 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) Connection: close
Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 Cookie: $Version=1; Skin=new;
Content-Length 请求的内容长度 Content-Length: 348
Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect 请求的特定的服务器行为 Expect: 100-continue
From 发出请求的用户的Email From: user@email.com
Host 指定请求的服务器的域名和端口号 Host: www.zcmhi.com
If-Match 只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards 限制信息通过代理和网关传送的时间 Max-Forwards: 10
Pragma 用来包含实现特定的指令 Pragma: no-cache
Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range 只请求实体的一部分,指定范围 Range: bytes=500-999
Referer 先前网页的地址,当前请求网页紧随其后,即来路 Referer: http://www.zcmhi.com/archives...
TE 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 TE: trailers,deflate;q=0.5
Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent User-Agent的内容包含发出请求的用户信息 User-Agent: Mozilla/5.0 (Linux; X11)
Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning

Content-Type

  • HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范
  • 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式
  • POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分

application/x-www-form-urlencoded

  • 最常见的 POST 提交数据的方式
  • 浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据
  • Content-Type 被指定为 application/x-www-form-urlencoded
  • 提交的数据按照 key1=val1&key2=val2 的方式进行编码,keyval 会进行了 URL 转码
  • 大部分服务端语言都对这种方式有很好的支持

multipart/form-data

  • 一个比较常用的 POST 提交数据的方式
  • 表单上传文件时,就是让 formenctype 等于这个值

application/json

  • 消息主体是序列化后的 JSON 字符串

text/xml

  • 相比于 JSONxml 不能更好的适用于数据交换。它包含了太多的包装,而且跟大多数编程语言的数据模型不匹配。
  • xml 一般用于存储数据、存储配置文件等需要结构化存储的地方
  • 数据传输、数据交互一般使用JSON

application/octet-stream

  • 提交二进制,而且只能提交一个二进制
  • 如果提交文件的话,只能提交一个文件,后台接收参数只能有一个
  • 而且只能是流(或者字节数组)

Referer

  • 正确英语拼法是referrer。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了

  • 表示一个来源

  • 可以通过给页面设置mata标签,来配置是否发送referer,及如何发送

  • never:删除 http head 中的 referer
  • default:如果当前页面使用的是 https 协议,而正要加载的资源使用的是普通的 http 协议,则将 http header 中的 referer 置为空;
  • origin:只发送 origin 部分;
  • always:不改变http header 中的 referer 的值,注意:这种情况下,如果当前页面使用了 https 协议,而要加载的资源使用的是 http 协议,加载资源的请求头中也会携带 referer
<!-- 所有从当前页面中发起的请求将不会携带 referer --> <meta name="referrer" content="never"> <!-- 从当前页面中发起的 http请求将只携带 origin(包含了 schema 和 hostname 的部分 url,不包含 path 等后面的其他 url 部分) 部分。而不是完整的 URL --> <meta name="referrer" content="origin">
  • rel=noreferer 会覆盖掉本文中的 meta 标签所设置的值。也就是功能覆盖
<a href="https://www.baidu.com" rel="noreferer">百度</a>

空Referer

  • Referer 头部的内容为空,或者,一个 HTTP 请求中根本不包含 Referer 头部
  • Referer 的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。
  • 比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的,因为这是一个“凭空产生”的 HTTP 请求,并不是从一个地方链接过去的
  • 允许 Referer 为空,意味着你允许比如浏览器直接访问,就是空

防盗链

比如图片防盗链。图片服务器每次取到Referer来判断一下是不是我们自己的域名,如果是就继续访问,不是就拦截

http请求发给服务器后,如果服务器要求必须是某个地址或者某几个地址才能访问,而你发送的referer不符合他的要求,就会拦截或者跳转到他要求的地址,然后再通过这个地址进行访问。

防止恶意请求

比如静态请求是*.html结尾的,动态请求是*.shtml,那么由此可以这么用,所有的*.shtml请求,必须 Referer 为我们自己的网站

X-Requested-With

  • 用于在服务器端判断request来自Ajax请求还是传统请求
  • 如果 requestedWithnull,则为同步请求。如果 requestedWithXMLHttpRequest 则为 Ajax 请求
if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) { out.print("该请求是 AJAX 异步HTTP请求。"); }else{ out.print("该请求是传统的 同步HTTP请求。"); }

Jquery中在发送请求是去掉X-Requested-With代码

$.ajax({ url: 'http://www.zhangruifeng.com', beforeSend: function( xhr ) { xhr.setRequestHeader('X-Requested-With', {toString: function(){ return ''; }}); }, success: function( data ) { if (console && console.log){ console.log( 'Got data without the X-Requested-With header' ); } } });

创作不易,若本文对你有帮助,欢迎打赏支持作者!

 分享给好友: