Mais

Calcular o campo de data usando variável de data e atributo de tempo em uma classe de recurso


Eu tenho uma variável de string (fileDateString) com a data neste formato: 20150404

Na minha aula de recursos, há um campo de texto com a hora no formato UTC de vinte e quatro horas. Existem também 2 espaços iniciais antes do tempo. Por exemplo. "1300"

Eu adicionei um campo de data à minha classe de recurso e gostaria de calcular uma data / hora. Também quero ser capaz de subtrair 6 horas da data / hora (converter UTC para CST) para o resultado final.

Pensei em primeiro criar um campo de texto com a data e hora e depois convertê-lo em data, mas gostaria de saber se existe uma maneira mais fácil?

expression = "" "+ str (fileDateString) +"  "" + "! DateUTC!"

Com base nos requisitos que você descreveu, a seguinte expressão Python deve fazer o que você está procurando:

"datetime.datetime.strptime ({} +! date1! .strip (), '% Y% m% d% H% M') - datetime.timedelta (horas = 6)". format (repr (fileDateString))

Nota: estou assumindo meses antes de dias em sua string. Caso contrário, troque% me% d.


Como extrair valores de HTML & ltinput type = & ldquodate & rdquo & gt usando jQuery

Usando um tipo de entrada HTML = "data" e um botão de envio. Gostaria de preencher as variáveis ​​dia, mês e ano com os valores apropriados da entrada de data.

o erro do console está me informando que .getDate () não é uma função.

Já vi perguntas semelhantes, mas as soluções não funcionaram para mim. Como posso extrair o dia, mês e ano da entrada type = "data"? Obrigado


Java.time

A estrutura java.time construída no Java 8 e posterior suplanta as antigas classes de data e hora empacotadas com as versões mais antigas do Java e a biblioteca Joda-Time. As classes java.time foram portadas para Java 6 e amp 7 e Android.

A classe Instant representa um momento na linha do tempo em UTC com uma resolução de nanossegundos.

Aplique um offset-from-UTC (um número de horas e minutos e segundos possíveis) para obter um OffsetDateTime.

Melhor ainda é aplicar um fuso horário completo, que é um deslocamento mais um conjunto de regras para lidar com anomalias, como horário de verão (DST).


Como DateTime é um tipo de valor, você não pode atribuir nulo a ele, mas exatamente para esses casos (ausência de um valor) Nullable & ltT & gt foi introduzido - use um DateTime anulável em vez disso:

Isso funciona quando você precisa fazer algo a cada X quantidade de tempo (já que você sempre estará acima do MinValue), mas pode realmente causar erros sutis (como usar alguns operadores sem verificar primeiro se você não é MinValue) se você não for cuidadoso .

O que é bom e evita a maioria dos problemas ao apresentar apenas 1 ou 2.

Realmente depende do que você está tentando alcançar.

Você pode definir uma variável DateTime como '1/1/0001 00:00:00', mas a própria variável não pode ser nula. Para obter este MinTime, use:

Você pode querer usar uma data e hora anulável. Data hora? someDate = null

Você pode encontrar casos de pessoas que usam DateTime.Max ou DateTime.Min em tais casos, mas duvido muito que você queira fazer isso. Isso leva a bugs com casos extremos, código que é mais difícil de ler, etc.

O método usado (AddWithValue) não converte valores nulos em nulos do banco de dados. Você deve usar DBNull.Value em vez disso:

Isso passará o valor someDate se não for nulo, ou DBNull.Value caso contrário. Neste caso, o valor correto será passado para o banco de dados.

Opção 1: usar um DateTime anulável?

Opção 2: use DateTime.MinValue

Pessoalmente, prefiro a opção 1.

Uma corda é um seqüência de personagens. Portanto, faz sentido ter uma string vazia, que é apenas uma sequência vazia de caracteres.

Mas DateTime é apenas um valor único, então não faz sentido falar sobre um DateTime “vazio”.

Se você quiser representar o conceito de “nenhum valor”, isso é representado como nulo em .Net. E se você quiser usar isso com tipos de valor, você precisa torná-los explicitamente anuláveis. Isso significa usar Nullable & ltDateTime & gt ou o DateTime equivalente? .

DateTime (assim como todos os tipos de valor) também tem um valor padrão, que é atribuído a campos não inicializados e você também pode obtê-lo por new DateTime () ou padrão (DateTime). Mas provavelmente você não quer usá-lo, pois representa uma data válida: 1.1.0001 0:00:00.


O opcional carimbo de data / hora parâmetro na função date () especifica um carimbo de data / hora. Se omitido, a data e hora atuais serão usadas (como nos exemplos acima).

A função PHP mktime () retorna o carimbo de data / hora Unix para uma data. O carimbo de data / hora Unix contém o número de segundos entre a época do Unix (1 de janeiro de 1970 00:00:00 GMT) e a hora especificada.

Sintaxe

O exemplo abaixo cria uma data e hora com a função date () a partir de vários parâmetros na função mktime ():

Exemplo


Calcular o campo de data usando variável de data e atributo de tempo em uma classe de recurso - Sistemas de Informação Geográfica

Esta seção define a sintaxe e a semântica de todos os campos de cabeçalho HTTP / 1.1 padrão. Para campos de cabeçalho de entidade, remetente e destinatário referem-se ao cliente ou ao servidor, dependendo de quem envia e de quem recebe a entidade.

14.1 Aceitar

O campo Aceitar cabeçalho da solicitação pode ser usado para especificar certos tipos de mídia que são aceitáveis ​​para a resposta. Os cabeçalhos de aceitação podem ser usados ​​para indicar que a solicitação é especificamente limitada a um pequeno conjunto de tipos desejados, como no caso de uma solicitação de imagem em linha.

DEVE ser interpretado como "Eu prefiro áudio / básico, mas envie-me qualquer tipo de áudio se for o melhor disponível após uma redução de 80% na qualidade."

Se nenhum campo de cabeçalho Aceitar estiver presente, presume-se que o cliente aceita todos os tipos de mídia. Se um campo de cabeçalho Aceitar estiver presente, e se o servidor não puder enviar uma resposta que seja aceitável de acordo com o valor do campo Aceitar combinado, o servidor DEVE enviar uma resposta 406 (não aceitável).

Um exemplo mais elaborado é

Verbalmente, isso seria interpretado como "text / html e text / xc são os tipos de mídia preferidos, mas se eles não existirem, envie a entidade text / x-dvi e, se não existir, envie o texto / simples entidade."

Os intervalos de mídia podem ser substituídos por intervalos de mídia mais específicos ou tipos de mídia específicos. Se mais de um intervalo de mídia se aplicar a um determinado tipo, a referência mais específica tem precedência. Por exemplo,

têm a seguinte precedência:

O fator de qualidade do tipo de mídia associado a um determinado tipo é determinado ao encontrar o intervalo de mídia com a precedência mais alta que corresponda a esse tipo. Por exemplo,

faria com que os seguintes valores fossem associados:

14.2 Aceitar-Charset

O campo de cabeçalho de solicitação Accept-Charset pode ser usado para indicar quais conjuntos de caracteres são aceitáveis ​​para a resposta. Este campo permite que os clientes sejam capazes de compreender conjuntos de caracteres mais abrangentes ou de propósito especial para sinalizar essa capacidade para um servidor que é capaz de representar documentos nesses conjuntos de caracteres.

Um servidor testa se uma codificação de conteúdo é aceitável, de acordo com um campo Accept-Encoding, usando estas regras:

Se um campo Accept-Encoding estiver presente em uma solicitação, e se o servidor não puder enviar uma resposta que seja aceitável de acordo com o cabeçalho Accept-Encoding, o servidor DEVE enviar uma resposta de erro com o código de status 406 (Não Aceitável).

Se nenhum campo Accept-Encoding estiver presente em uma solicitação, o servidor PODE assumir que o cliente aceitará qualquer codificação de conteúdo. Nesse caso, se "identidade" é uma das codificações de conteúdo disponíveis, o servidor DEVE usar a codificação de conteúdo "identidade", a menos que tenha informações adicionais de que uma codificação de conteúdo diferente é significativa para o cliente.

14.4 Aceitar-Idioma

O campo de cabeçalho de solicitação Accept-Language é semelhante a Accept, mas restringe o conjunto de linguagens naturais que são preferidas como uma resposta à solicitação. As tags de idioma são definidas na seção 3.10.

Cada faixa de idioma PODE receber um valor de qualidade associado que representa uma estimativa da preferência do usuário para os idiomas especificados por aquela faixa. O valor padrão da qualidade é "q = 1". Por exemplo,

significaria: "Prefiro o dinamarquês, mas aceitarei o inglês britânico e outros tipos de inglês." Um intervalo de idioma corresponde a uma tag de idioma se for exatamente igual à tag, ou se for exatamente igual a um prefixo da tag de forma que o primeiro caractere da tag após o prefixo seja "-". O intervalo especial "*", se presente no campo Accept-Language, corresponde a todas as tags não correspondidas por qualquer outro intervalo presente no campo Accept-Language.

O fator de qualidade de idioma atribuído a uma tag de idioma pelo campo Accept-Language é o valor de qualidade do maior intervalo de idioma no campo que corresponde à tag de idioma. Se nenhum intervalo de idioma no campo corresponder à tag, o fator de qualidade do idioma atribuído é 0. Se nenhum cabeçalho Accept-Language estiver presente na solicitação, o servidor

DEVE presumir que todos os idiomas são igualmente aceitáveis. Se um cabeçalho Accept-Language estiver presente, todos os idiomas aos quais foi atribuído um fator de qualidade maior que 0 são aceitáveis.

Pode ser contrário às expectativas de privacidade do usuário enviar um cabeçalho Accept-Language com as preferências linguísticas completas do usuário em cada solicitação. Para uma discussão deste assunto, consulte a seção 15.1.4.

Como a inteligibilidade é altamente dependente do usuário individual, é recomendado que os aplicativos clientes façam a escolha da preferência linguística disponível para o usuário. Se a escolha não for disponibilizada, o campo do cabeçalho Accept-Language NÃO DEVE ser fornecido no pedido.

14.5 Intervalos de aceitação

14,6 Idade

14,7 Permitir

14.8 Autorização

14.9 Controle de Cache

O campo de cabeçalho geral Cache-Control é usado para especificar as diretivas que DEVEM ser obedecidas por todos os mecanismos de cache ao longo da cadeia de solicitação / resposta. As diretivas especificam o comportamento destinado a evitar que os caches interfiram adversamente na solicitação ou resposta. Essas diretivas geralmente substituem os algoritmos de armazenamento em cache padrão. As diretivas de cache são unidirecionais, pois a presença de uma diretiva em uma solicitação não significa que a mesma diretiva deve ser fornecida na resposta.

As diretivas de cache DEVEM ser passadas por um aplicativo de proxy ou gateway, independentemente de seu significado para esse aplicativo, uma vez que as diretivas podem ser aplicáveis ​​a todos os destinatários ao longo da cadeia de solicitação / resposta. Não é possível especificar uma diretiva cache para um cache específico.

Um cache vendo este campo de cabeçalho agirá corretamente mesmo se o cache não entender a extensão de cache da comunidade, uma vez que ele também verá e entenderá a diretiva privada e, portanto, padrão para o comportamento seguro.

As diretivas de cache não reconhecidas DEVEM ser ignoradas; pressupõe-se que qualquer diretiva de cache que provavelmente não seja reconhecida por um cache HTTP / 1.1 será combinada com as diretivas padrão (ou a capacidade de cache padrão da resposta) de modo que o comportamento do cache permaneça minimamente correto, mesmo que o o cache não entende a (s) extensão (ões).

14.10 Conexão

O campo de cabeçalho geral de conexão permite que o remetente especifique as opções desejadas para essa conexão específica e NÃO DEVEM ser comunicadas por proxies em outras conexões.

O cabeçalho Connection tem a seguinte gramática:

Os proxies HTTP / 1.1 DEVEM analisar o campo de cabeçalho de conexão antes de uma mensagem ser encaminhada e, para cada token de conexão neste campo, remover qualquer campo de cabeçalho da mensagem com o mesmo nome do token de conexão. As opções de conexão são sinalizadas pela presença de um token de conexão no campo de cabeçalho de conexão, não por qualquer campo de cabeçalho adicional correspondente, uma vez que o campo de cabeçalho adicional não pode ser enviado se não houver parâmetros associados a essa opção de conexão.

Os cabeçalhos das mensagens listados no cabeçalho da conexão NÃO DEVEM incluir cabeçalhos ponta a ponta, como Cache-Control.

HTTP / 1.1 define a opção de conexão "fechar" para o remetente sinalizar que a conexão será fechada após a conclusão da resposta. Por exemplo,

tanto no campo de cabeçalho de solicitação quanto de resposta indica que a conexão NÃO DEVE ser considerada `persistente '(seção 8.1) depois que a solicitação / resposta atual for concluída.

Os aplicativos HTTP / 1.1 que não oferecem suporte a conexões persistentes DEVEM incluir a opção de conexão "fechar" em todas as mensagens.

Um sistema que recebe uma mensagem HTTP / 1.0 (ou versão inferior) que inclui um cabeçalho de conexão DEVE, para cada token de conexão neste campo, remover e ignorar qualquer campo de cabeçalho da mensagem com o mesmo nome da conexão- símbolo. Isso protege contra o encaminhamento incorreto de tais campos de cabeçalho por proxies pré-HTTP / 1.1. Consulte a seção 19.6.2.

14.11 Codificação de Conteúdo

O campo de cabeçalho de entidade Content-Encoding é usado como um modificador para o tipo de mídia. Quando presente, seu valor indica quais codificações de conteúdo adicionais foram aplicadas ao corpo da entidade e, portanto, quais mecanismos de decodificação devem ser aplicados para obter o tipo de mídia referenciado pelo campo de cabeçalho Content-Type. A codificação de conteúdo é usada principalmente para permitir que um documento seja compactado sem perder a identidade de seu tipo de mídia subjacente.

As codificações de conteúdo são definidas na seção 3.5. Um exemplo de seu uso é

A codificação de conteúdo é uma característica da entidade identificada pelo Request-URI. Normalmente, o corpo da entidade é armazenado com essa codificação e só é decodificado antes da renderização ou uso análogo. No entanto, um proxy não transparente PODE modificar a codificação do conteúdo se a nova codificação for considerada aceitável pelo destinatário, a menos que a diretiva de controle de cache "no-transform" esteja presente na mensagem.

Se o conteúdo-codificação de uma entidade não é "identidade", então a resposta DEVE incluir um Content-Encoding entidade-cabeçalho (seção 14.11) que enumera a não-identidade conteúdo-codificação (s) utilizado.

Se a codificação do conteúdo de uma entidade em uma mensagem de solicitação não for aceitável para o servidor de origem, o servidor DEVE responder com um código de status 415 (Tipo de mídia não suportado).

Se várias codificações tiverem sido aplicadas a uma entidade, as codificações de conteúdo DEVEM ser listadas na ordem em que foram aplicadas. Informações adicionais sobre os parâmetros de codificação PODEM ser fornecidas por outros campos de cabeçalho de entidade não definidos por esta especificação.

14.12 Conteúdo-Idioma

O campo de cabeçalho de entidade Content-Language descreve a (s) linguagem (s) natural (is) do público-alvo da entidade incluída. Observe que isso pode não ser equivalente a todos os idiomas usados ​​no corpo da entidade.

As tags de idioma são definidas na seção 3.10. O objetivo principal do Content-Language é permitir que um usuário identifique e diferencie entidades de acordo com o idioma de preferência do usuário. Assim, se o conteúdo do corpo se destina apenas a um público letrado em dinamarquês, o campo apropriado é

Se nenhum Content-Language for especificado, o padrão é que o conteúdo se destina a públicos de todos os idiomas. Isso pode significar que o remetente não o considera específico para nenhum idioma natural, ou que o remetente não sabe para qual idioma ele se destina.

Vários idiomas PODEM ser listados para conteúdo que se destina a vários públicos. Por exemplo, uma versão do "Tratado de Waitangi", apresentada simultaneamente nas versões originais em maori e em inglês, exigiria

No entanto, só porque vários idiomas estão presentes em uma entidade, não significa que ela se destina a vários públicos linguísticos. Um exemplo seria uma cartilha de idioma para iniciantes, como "A First Lesson in Latin", que é claramente destinada a ser usada por um público alfabetizado em inglês. Nesse caso, o Content-Language incluiria apropriadamente apenas "en".

A linguagem do conteúdo PODE ser aplicada a qualquer tipo de mídia - não se limita a documentos textuais.

14,13 Comprimento do conteúdo

O campo Content-Length entity-header indica o tamanho do corpo da entidade, em número decimal de OCTETs, enviado ao destinatário ou, no caso do método HEAD, o tamanho do corpo da entidade que teria sido enviado se o pedido foi um GET.

Os aplicativos DEVEM usar este campo para indicar o comprimento da transferência do corpo da mensagem, a menos que isso seja proibido pelas regras da seção 4.4.

Qualquer Content-Length maior ou igual a zero é um valor válido. A seção 4.4 descreve como determinar o comprimento de um corpo de mensagem se um Content-Length não for fornecido.

Observe que o significado deste campo é significativamente diferente da definição correspondente em MIME, onde é um campo opcional usado dentro do tipo de conteúdo "mensagem / corpo externo". Em HTTP, DEVE ser enviada sempre que o comprimento da mensagem puder ser determinado antes de ser transferida, a menos que isso seja proibido pelas regras da seção 4.4.

14.14 Localização do conteúdo

O campo de cabeçalho de entidade Content-Location PODE ser usado para fornecer a localização do recurso para a entidade incluída na mensagem quando essa entidade está acessível a partir de um local separado do URI do recurso solicitado. Um servidor DEVE fornecer uma localização de conteúdo para a variante correspondente à entidade de resposta, especialmente no caso em que um recurso tem várias entidades associadas a ele, e essas entidades realmente têm locais separados pelos quais possam ser acessados ​​individualmente, o servidor DEVE fornecer um Content-Location para a variante específica que é retornada.

O valor de Content-Location também define o URI de base para a entidade.

O valor Content-Location não é uma substituição do URI original solicitado, mas apenas uma declaração da localização do recurso correspondente a essa entidade específica no momento da solicitação. Solicitações futuras PODEM especificar o URI de localização de conteúdo como a URI de solicitação se o desejo é identificar a fonte dessa entidade em particular.

Um cache não pode assumir que uma entidade com um Content-Location diferente do URI usado para recuperá-lo pode ser usada para responder a solicitações posteriores nesse URI Content-Location. No entanto, o ContentLocalização pode ser usado para diferenciar entre várias entidades recuperadas de um único recurso solicitado, conforme descrito na seção 13.6.

Se o Content-Location for um URI relativo, o URI relativo será interpretado em relação ao URI de Solicitação.

O significado do cabeçalho Content-Location em solicitações PUT ou POST é indefinido, os servidores são livres para ignorá-lo nesses casos.

14,15 Content-MD5

O Content-MD5 entidade-cabeçalho campo, conforme definido no RFC 1864 [23], é um MD5 digest da entidade-corpo com o propósito de fornecer um fim-a-fim mensagem integridade verificação (MIC) da entidade-corpo. (Observação: um MIC é bom para detectar modificações acidentais do corpo da entidade em trânsito, mas não é à prova de ataques maliciosos.)

O campo de cabeçalho Content-MD5 PODE ser gerado por um servidor de origem ou cliente para funcionar como uma verificação de integridade do corpo da entidade. Apenas os servidores ou clientes de origem PODEM gerar o campo de cabeçalho Content-MD5, proxies e gateways NÃO DEVEM gerá-lo, pois isso invalidaria seu valor como uma verificação de integridade de ponta a ponta. Qualquer destinatário do corpo-entidade, incluindo gateways e proxies, PODE verificar se o valor do resumo neste campo de cabeçalho corresponde ao do corpo-entidade conforme recebido.

O resumo MD5 é calculado com base no conteúdo do corpo da entidade, incluindo qualquer codificação de conteúdo que tenha sido aplicada, mas não incluindo qualquer codificação de transferência aplicada ao corpo da mensagem. Se a mensagem for recebida com uma codificação de transferência, essa codificação DEVE ser removida antes de verificar o valor do Conteúdo-MD5 em relação à entidade recebida.

O resultado é que o resumo é calculado nos octetos do corpo da entidade exatamente como e na ordem em que seriam enviados se nenhuma codificação de transferência estivesse sendo aplicada.

O HTTP estende o RFC 1864 para permitir que o resumo seja calculado para tipos de mídia compostos MIME (por exemplo, multipart / * e mensagem / rfc822), mas isso não muda como o resumo é calculado conforme definido no parágrafo anterior.

Existem várias consequências disso. O corpo da entidade para tipos compostos PODE conter muitas partes do corpo, cada uma com seus próprios cabeçalhos MIME e HTTP (incluindo cabeçalhos Content-MD5, Content-Transfer-Encoding e Content-Encoding). Se uma parte do corpo tiver um cabeçalho Content-Transfer- Encoding ou Content-Encoding, presume-se que o conteúdo da parte do corpo teve a codificação aplicada e a parte do corpo está incluída no resumo Content-MD5 como está - ou seja, após a aplicação. O campo de cabeçalho Transfer-Encoding não é permitido nas partes do corpo.

A conversão de todas as quebras de linha para CRLF NÃO DEVE ser feita antes de calcular ou verificar o resumo: a convenção de quebra de linha usada no texto realmente transmitido DEVE ser deixada inalterada durante o cálculo do resumo.

14.16 Content-Range

O cabeçalho de entidade Content-Range é enviado com um corpo de entidade parcial para especificar onde, no corpo de entidade completo, o corpo parcial deve ser aplicado. As unidades de alcance são definidas na seção 3.12.

O cabeçalho DEVE indicar o comprimento total de todo o corpo da entidade, a menos que esse comprimento seja desconhecido ou difícil de determinar. O caractere asterisco "*" significa que o comprimento da instância é desconhecido no momento em que a resposta foi gerada.

Ao contrário dos valores especificadores de intervalos de bytes (consulte a seção 14.35.1), uma especificação de intervalo de bytes DEVE somente especificar um intervalo e DEVE conter posições de byte absolutas para o primeiro e o último byte do intervalo.

Um byte-content-range-spec com um byte-range-resp-spec cujo valor last-byte-pos é menor que o valor do primeiro byte-pos, ou cujo valor do tamanho da instância é menor ou igual ao seu último valor byte-pos, é inválido. O destinatário de uma especificação de intervalo de conteúdo de byte inválida DEVE ignorá-la e qualquer conteúdo transferido junto com ela.

Um servidor enviando uma resposta com o código de status 416 (Intervalo solicitado não satisfatório) DEVE incluir um campo Content-Range com um byte-range- resp-spec de "*". O comprimento da instância especifica o comprimento atual de

o recurso selecionado. Uma resposta com o código de status 206 (conteúdo parcial) NÃO DEVE incluir um campo Content-Range com um byte-range-resp-spec de "*".

Exemplos de valores de especificação de intervalo de conteúdo de byte, supondo que a entidade contenha um total de 1234 bytes:

Quando uma mensagem HTTP inclui o conteúdo de um único intervalo (por exemplo, uma resposta a uma solicitação de um único intervalo ou a uma solicitação de um conjunto de intervalos que se sobrepõem sem lacunas), esse conteúdo é transmitido com um Content-Range cabeçalho e um cabeçalho Content-Length mostrando o número de bytes realmente transferidos. Por exemplo,

Quando uma mensagem HTTP inclui o conteúdo de vários intervalos (por exemplo, uma resposta a uma solicitação de vários intervalos não sobrepostos), eles são transmitidos como uma mensagem com várias partes. O tipo de mídia multiparte usado para este propósito é "multipart / byteranges" conforme definido no apêndice 19.2. Veja o apêndice 19.6.3 para um problema de compatibilidade.

Uma resposta a uma solicitação de um único intervalo NÃO DEVE ser enviada usando o tipo de mídia multipart / byteranges. Uma resposta a uma solicitação de vários intervalos, cujo resultado é um único intervalo, PODE ser enviada como um tipo de mídia multipart / byteranges com uma parte. Um cliente que não consegue decodificar uma mensagem multipart / byteranges NÃO DEVE solicitar vários intervalos de bytes em uma única solicitação.

Quando um cliente solicita vários intervalos de bytes em uma solicitação, o servidor DEVE retorná-los na ordem em que aparecem na solicitação.

Se o servidor ignorar uma especificação de intervalo de bytes porque é sintaticamente inválida, o servidor DEVE tratar a solicitação como se o campo de cabeçalho Range inválido não existisse. (Normalmente, isso significa retornar uma resposta 200 contendo a entidade completa).

Se o servidor receber uma solicitação (diferente de uma incluindo um campo de cabeçalho de solicitação If-Range) com um campo de cabeçalho de solicitação Range insatisfatório (ou seja, todos cujos valores de especificação de intervalo de bytes têm um valor pos de primeiro byte maior do que o comprimento atual do recurso selecionado), ele DEVE retornar um código de resposta de 416 (Intervalo solicitado não satisfazível) (seção 10.4.17).

14.17 Tipo de Conteúdo

O campo do cabeçalho da entidade Content-Type indica o tipo de mídia do corpo da entidade enviado ao destinatário ou, no caso do método HEAD, o tipo de mídia que teria sido enviado se a solicitação fosse um GET.

Os tipos de mídia são definidos na seção 3.7. Um exemplo do campo é

Uma discussão mais aprofundada dos métodos para identificar o tipo de mídia de uma entidade é fornecida na seção 7.2.1.

14,18 Data

O campo Date general-header representa a data e hora em que a mensagem foi originada, tendo a mesma semântica que orig-date na RFC 822. O valor do campo é uma data HTTP, conforme descrito na seção 3.3.1, ela DEVE ser enviada no formato de data RFC 1123 [8].

Os servidores de origem DEVEM incluir um campo de cabeçalho de data em todas as respostas, exceto nestes casos:

Uma mensagem recebida que não tenha um campo de cabeçalho Date DEVE ser atribuída pelo destinatário se a mensagem for armazenada em cache por esse destinatário ou encaminhada por meio de um protocolo que exija uma Date. Uma implementação HTTP sem um relógio NÃO DEVE armazenar as respostas em cache sem revalidá-las a cada uso. Um cache HTTP, especialmente um cache compartilhado, DEVE usar um mecanismo, como o NTP [28], para sincronizar seu relógio com um padrão externo confiável.

Os clientes DEVEM enviar apenas um campo de cabeçalho Date em mensagens que incluam um corpo-entidade, como no caso dos pedidos PUT e POST, e mesmo assim é opcional. Um cliente sem relógio NÃO DEVE enviar um campo de cabeçalho de data em uma solicitação.

A data HTTP enviada em um cabeçalho Date NÃO DEVE representar uma data e hora subsequente à geração da mensagem. DEVE representar a melhor aproximação disponível da data e hora da geração da mensagem, a menos que a implementação não tenha meios de gerar uma data e hora razoavelmente precisas. Em teoria, a data deve representar o momento imediatamente anterior à geração da entidade. Na prática, a data pode ser gerada a qualquer momento durante a origem da mensagem sem afetar seu valor semântico.

14.18.1 Operação do servidor de origem sem relógio

Algumas implementações de servidor de origem podem não ter um relógio disponível. Um servidor de origem sem um relógio NÃO DEVE atribuir valores Expires ou Last-Modified a uma resposta, a menos que esses valores tenham sido associados ao recurso por um sistema ou usuário com um relógio confiável. Ele PODE atribuir um valor de Expires que é conhecido, no momento ou antes do tempo de configuração do servidor, estar no passado (isso permite a "pré-expiração" das respostas sem armazenar valores de Expires separados para cada recurso).

14,19 ETag

O campo de cabeçalho de resposta ETag fornece o valor atual da tag de entidade para a variante solicitada. Os cabeçalhos usados ​​com tags de entidade são descritos nas seções 14.24, 14.26 e 14.44. A tag de entidade PODE ser usada para comparação com outras entidades do mesmo recurso (ver seção 13.3.3).

14.20 Espere

O campo do cabeçalho da solicitação Expect é usado para indicar que comportamentos específicos do servidor são exigidos pelo cliente.

Os clientes e caches HTTP / 1.1 DEVEM tratar outros formatos de data inválidos, especialmente incluindo o valor "0", como no passado (ou seja, "já expirou").

Para marcar uma resposta como "já expirada", um servidor de origem envia uma data Expires que é igual ao valor do cabeçalho Date. (Consulte as regras para cálculos de vencimento na seção 13.2.4.)

Para marcar uma resposta como "nunca expira", um servidor de origem envia uma data de Expiração aproximadamente um ano a partir do momento em que a resposta é enviada. Os servidores HTTP / 1.1 NÃO DEVEM enviar datas de validade mais de um ano no futuro.

A presença de um campo de cabeçalho Expires com um valor de data de algum tempo no futuro em uma resposta que de outra forma não seria armazenável em cache indica que a resposta pode ser armazenada em cache, a menos que indicado de outra forma por um campo de cabeçalho Cache-Control (seção 14.9) .

14,22 de

O campo De cabeçalho de solicitação, se fornecido, DEVE conter um endereço de e-mail da Internet para o usuário humano que controla o agente de usuário solicitante. O endereço DEVE ser utilizável por máquina, conforme definido por "caixa de correio" no RFC 822 [9], atualizado pelo RFC 1123 [8]:

Este campo de cabeçalho PODE ser usado para fins de registro e como um meio para identificar a fonte de solicitações inválidas ou indesejadas. NÃO DEVE ser usado como uma forma insegura de proteção de acesso. A interpretação deste campo é que a solicitação está sendo realizada em nome da pessoa indicada, que assume a responsabilidade pelo método realizado. Em particular, os agentes do robô DEVEM incluir este cabeçalho para que a pessoa responsável pela operação do robô possa ser contatada se ocorrerem problemas na extremidade receptora.

O endereço de e-mail da Internet neste campo PODE ser diferente do host da Internet que emitiu o pedido. Por exemplo, quando um pedido é passado por um proxy, o endereço do emissor original DEVE ser usado.

O cliente NÃO DEVE enviar o campo do cabeçalho De sem a aprovação do usuário, pois isso pode entrar em conflito com os interesses de privacidade do usuário ou a política de segurança de seu site. É altamente recomendável que o usuário seja capaz de desabilitar, habilitar e modificar o valor deste campo a qualquer momento antes de uma solicitação.

14,23 Host

O campo de cabeçalho de solicitação do Host especifica o host da Internet e o número da porta do recurso que está sendo solicitado, conforme obtido do URI original fornecido pelo usuário ou recurso de referência (geralmente um URL HTTP,

conforme descrito na seção 3.2.2). O valor do campo Host DEVE representar a autoridade de nomenclatura do servidor de origem ou gateway fornecida pelo URL original. Isso permite que o servidor ou gateway de origem diferencie entre URLs ambíguos internamente, como a URL raiz "/" de um servidor para vários nomes de host em um único endereço IP.

Um "host" sem nenhuma informação de porta final indica a porta padrão para o serviço solicitado (por exemplo, "80" para um URL HTTP). Por exemplo, uma solicitação no servidor de origem para & lthttp: //www.w3.org/pub/WWW/> incluiria corretamente:

Um cliente DEVE incluir um campo de cabeçalho Host em todas as mensagens de solicitação HTTP / 1.1. Se o URI solicitado não incluir um nome de host da Internet para o serviço solicitado, o campo de cabeçalho Host DEVE ser fornecido com um valor vazio. Um proxy HTTP / 1.1 DEVE garantir que qualquer mensagem de solicitação que encaminhe contenha um campo de cabeçalho Host apropriado que identifique o serviço solicitado pelo proxy. Todos os servidores HTTP / 1.1 baseados na Internet DEVEM responder com um código de status 400 (Bad Request) a qualquer mensagem de solicitação HTTP / 1.1 que não tenha um campo de cabeçalho Host.

Consulte as seções 5.2 e 19.6.1.1 para outros requisitos relacionados ao Host.

14,24 If-Match

O campo de cabeçalho de solicitação If-Match é usado com um método para torná-lo condicional. Um cliente que possui uma ou mais entidades obtidas anteriormente do recurso pode verificar se uma dessas entidades é atual, incluindo uma lista de suas tags de entidade associadas no campo de cabeçalho If-Match. As tags de entidade são definidas na seção 3.11. O objetivo deste recurso é permitir atualizações eficientes das informações armazenadas em cache com um mínimo de sobrecarga de transação. Também é usado, em solicitações de atualização, para evitar modificação inadvertida da versão errada de um recurso. Como um caso especial, o valor "*" corresponde a qualquer entidade atual do recurso.

Se qualquer uma das tags de entidade corresponder à tag de entidade da entidade que teria sido retornada na resposta a uma solicitação GET semelhante (sem o cabeçalho If-Match) nesse recurso, ou se "*" for fornecido

and any current entity exists for that resource, then the server MAY perform the requested method as if the If-Match header field did not exist.

A server MUST use the strong comparison function (see section 13.3.3) to compare the entity tags in If-Match.

If none of the entity tags match, or if "*" is given and no current entity exists, the server MUST NOT perform the requested method, and MUST return a 412 (Precondition Failed) response. This behavior is most useful when the client wants to prevent an updating method, such as PUT, from modifying a resource that has changed since the client last retrieved it.

If the request would, without the If-Match header field, result in anything other than a 2xx or 412 status, then the If-Match header MUST be ignored.

The meaning of "If-Match: *" is that the method SHOULD be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see section 14.44) exists, and MUST NOT be performed if the representation does not exist.

A request intended to update a resource (e.g., a PUT) MAY include an If-Match header field to signal that the request method MUST NOT be applied if the entity corresponding to the If-Match value (a single entity tag) is no longer a representation of that resource. This allows the user to indicate that they do not wish the request to be successful if the resource has been changed without their knowledge. Examples:

The result of a request having both an If-Match header field and either an If-None-Match or an If-Modified-Since header fields is undefined by this specification.

14.25 If-Modified-Since

The If-Modified-Since request-header field is used with a method to make it conditional: if the requested variant has not been modified since the time specified in this field, an entity will not be returned from the server instead, a 304 (not modified) response will be returned without any message-body.

An example of the field is:

A GET method with an If-Modified-Since header and no Range header requests that the identified entity be transferred only if it has been modified since the date given by the If-Modified-Since header. The algorithm for determining this includes the following cases:

The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead.

The result of a request having both an If-Modified-Since header field and either an If-Match or an If-Unmodified-Since header fields is undefined by this specification.

14.26 If-None-Match

The If-None-Match request-header field is used with a method to make it conditional. A client that has one or more entities previously obtained from the resource can verify that none of those entities is current by including a list of their associated entity tags in the If-None-Match header field. The purpose of this feature is to allow efficient updates of cached information with a minimum amount of transaction overhead. It is also used to prevent a method (e.g. PUT) from inadvertently modifying an existing resource when the client believes that the resource does not exist.

As a special case, the value "*" matches any current entity of the resource.

If any of the entity tags match the entity tag of the entity that would have been returned in the response to a similar GET request (without the If-None-Match header) on that resource, or if "*" is given and any current entity exists for that resource, then the server MUST NOT perform the requested method, unless required to do so because the resource's modification date fails to match that supplied in an If-Modified-Since header field in the request. Instead, if the request method was GET or HEAD, the server SHOULD respond with a 304 (Not Modified) response, including the cache- related header fields (particularly ETag) of one of the entities that matched. For all other request methods, the server MUST respond with a status of 412 (Precondition Failed).

See section 13.3.3 for rules on how to determine if two entities tags match. The weak comparison function can only be used with GET or HEAD requests.

If none of the entity tags match, then the server MAY perform the requested method as if the If-None-Match header field did not exist, but MUST also ignore any If-Modified-Since header field(s) in the request. That is, if no entity tags match, then the server MUST NOT return a 304 (Not Modified) response.

If the request would, without the If-None-Match header field, result in anything other than a 2xx or 304 status, then the If-None-Match header MUST be ignored. (See section 13.3.4 for a discussion of server behavior when both If-Modified-Since and If-None-Match appear in the same request.)

The meaning of "If-None-Match: *" is that the method MUST NOT be performed if the representation selected by the origin server (or by a cache, possibly using the Vary mechanism, see section 14.44) exists, and SHOULD be performed if the representation does not exist. This feature is intended to be useful in preventing races between PUT operations.

The result of a request having both an If-None-Match header field and either an If-Match or an If-Unmodified-Since header fields is undefined by this specification.

14.27 If-Range

If a client has a partial copy of an entity in its cache, and wishes to have an up-to-date copy of the entire entity in its cache, it could use the Range request-header with a conditional GET (using either or both of If-Unmodified-Since and If-Match.) However, if the condition fails because the entity has been modified, the client would then have to make a second request to obtain the entire current entity-body.

The If-Range header allows a client to "short-circuit" the second request. Informally, its meaning is `if the entity is unchanged, send me the part(s) that I am missing otherwise, send me the entire new entity'.

If the client has no entity tag for an entity, but does have a Last- Modified date, it MAY use that date in an If-Range header. (The server can distinguish between a valid HTTP-date and any form of entity-tag by examining no more than two characters.) The If-Range header SHOULD only be used together with a Range header, and MUST be ignored if the request does not include a Range header, or if the server does not support the sub-range operation.

If the entity tag given in the If-Range header matches the current entity tag for the entity, then the server SHOULD provide the specified sub-range of the entity using a 206 (Partial content) response. If the entity tag does not match, then the server SHOULD return the entire entity using a 200 (OK) response.

14.28 If-Unmodified-Since

The If-Unmodified-Since request-header field is used with a method to make it conditional. If the requested resource has not been modified since the time specified in this field, the server SHOULD perform the requested operation as if the If-Unmodified-Since header were not present.

If the requested variant has been modified since the specified time, the server MUST NOT perform the requested operation, and MUST return a 412 (Precondition Failed).

An example of the field is:

If the request normally (i.e., without the If-Unmodified-Since header) would result in anything other than a 2xx or 412 status, the If-Unmodified-Since header SHOULD be ignored.

If the specified date is invalid, the header is ignored.

The result of a request having both an If-Unmodified-Since header field and either an If-None-Match or an If-Modified-Since header fields is undefined by this specification.

14.29 Last-Modified

The Last-Modified entity-header field indicates the date and time at which the origin server believes the variant was last modified.

The exact meaning of this header field depends on the implementation of the origin server and the nature of the original resource. For files, it may be just the file system last-modified time. For entities with dynamically included parts, it may be the most recent of the set of last-modify times for its component parts. For database gateways, it may be the last-update time stamp of the record. For virtual objects, it may be the last time the internal state changed.

An origin server MUST NOT send a Last-Modified date which is later than the server's time of message origination. In such cases, where the resource's last modification would indicate some time in the future, the server MUST replace that date with the message origination date.

An origin server SHOULD obtain the Last-Modified value of the entity as close as possible to the time that it generates the Date value of its response. This allows a recipient to make an accurate assessment of the entity's modification time, especially if the entity changes near the time that the response is generated.

HTTP/1.1 servers SHOULD send Last-Modified whenever feasible.

14.30 Location

The Location response-header field is used to redirect the recipient to a location other than the Request-URI for completion of the request or identification of a new resource. For 201 (Created) responses, the Location is that of the new resource which was created by the request. For 3xx responses, the location SHOULD indicate the server's preferred URI for automatic redirection to the resource. The field value consists of a single absolute URI.

14.31 Max-Forwards

The Max-Forwards request-header field provides a mechanism with the TRACE (section 9.8) and OPTIONS (section 9.2) methods to limit the number of proxies or gateways that can forward the request to the next inbound server. This can be useful when the client is attempting to trace a request chain which appears to be failing or looping in mid-chain.

The Max-Forwards value is a decimal integer indicating the remaining number of times this request message may be forwarded.

Each proxy or gateway recipient of a TRACE or OPTIONS request containing a Max-Forwards header field MUST check and update its value prior to forwarding the request. If the received value is zero (0), the recipient MUST NOT forward the request instead, it MUST respond as the final recipient. If the received Max-Forwards value is greater than zero, then the forwarded message MUST contain an updated Max-Forwards field with a value decremented by one (1).

The Max-Forwards header field MAY be ignored for all other methods defined by this specification and for any extension methods for which it is not explicitly referred to as part of that method definition.

14.32 Pragma

The Pragma general-header field is used to include implementation- specific directives that might apply to any recipient along the request/response chain. All pragma directives specify optional behavior from the viewpoint of the protocol however, some systems MAY require that behavior be consistent with the directives.

14.33 Proxy-Authenticate

The Proxy-Authenticate response-header field MUST be included as part of a 407 (Proxy Authentication Required) response. The field value consists of a challenge that indicates the authentication scheme and parameters applicable to the proxy for this Request-URI.

The HTTP access authentication process is described in "HTTP Authentication: Basic and Digest Access Authentication" [43]. Unlike WWW-Authenticate, the Proxy-Authenticate header field applies only to the current connection and SHOULD NOT be passed on to downstream clients. However, an intermediate proxy might need to obtain its own credentials by requesting them from the downstream client, which in some circumstances will appear as if the proxy is forwarding the Proxy-Authenticate header field.

14.34 Proxy-Authorization

The Proxy-Authorization request-header field allows the client to identify itself (or its user) to a proxy which requires authentication. The Proxy-Authorization field value consists of credentials containing the authentication information of the user agent for the proxy and/or realm of the resource being requested.

The HTTP access authentication process is described in "HTTP Authentication: Basic and Digest Access Authentication" [43] . Unlike Authorization, the Proxy-Authorization header field applies only to the next outbound proxy that demanded authentication using the Proxy- Authenticate field. When multiple proxies are used in a chain, the

Proxy-Authorization header field is consumed by the first outbound proxy that was expecting to receive credentials. A proxy MAY relay the credentials from the client request to the next proxy if that is the mechanism by which the proxies cooperatively authenticate a given request.

14.35 Range

14.35.1 Byte Ranges

Since all HTTP entities are represented in HTTP messages as sequences of bytes, the concept of a byte range is meaningful for any HTTP entity. (However, not all clients and servers need to support byte- range operations.)

Byte range specifications in HTTP apply to the sequence of bytes in the entity-body (not necessarily the same as the message-body).

A byte range operation MAY specify a single range of bytes, or a set of ranges within a single entity.

The first-byte-pos value in a byte-range-spec gives the byte-offset of the first byte in a range. The last-byte-pos value gives the byte-offset of the last byte in the range that is, the byte positions specified are inclusive. Byte offsets start at zero.

If the last-byte-pos value is present, it MUST be greater than or equal to the first-byte-pos in that byte-range-spec, or the byte- range-spec is syntactically invalid. The recipient of a byte-range- set that includes one or more syntactically invalid byte-range-spec values MUST ignore the header field that includes that byte-range- set.

If the last-byte-pos value is absent, or if the value is greater than or equal to the current length of the entity-body, last-byte-pos is taken to be equal to one less than the current length of the entity- body in bytes.

By its choice of last-byte-pos, a client can limit the number of bytes retrieved without knowing the size of the entity.

A suffix-byte-range-spec is used to specify the suffix of the entity-body, of a length given by the suffix-length value. (That is, this form specifies the last N bytes of an entity-body.) If the entity is shorter than the specified suffix-length, the entire entity-body is used.

If a syntactically valid byte-range-set includes at least one byte- range-spec whose first-byte-pos is less than the current length of the entity-body, or at least one suffix-byte-range-spec with a non- zero suffix-length, then the byte-range-set is satisfiable. Otherwise, the byte-range-set is unsatisfiable. If the byte-range-set is unsatisfiable, the server SHOULD return a response with a status of 416 (Requested range not satisfiable). Otherwise, the server SHOULD return a response with a status of 206 (Partial Content) containing the satisfiable ranges of the entity-body.

Examples of byte-ranges-specifier values (assuming an entity-body of length 10000):

14.35.2 Range Retrieval Requests

HTTP retrieval requests using conditional or unconditional GET methods MAY request one or more sub-ranges of the entity, instead of the entire entity, using the Range request header, which applies to the entity returned as the result of the request:

A server MAY ignore the Range header. However, HTTP/1.1 origin servers and intermediate caches ought to support byte ranges when possible, since Range supports efficient recovery from partially failed transfers, and supports efficient partial retrieval of large entities.

If the server supports the Range header and the specified range or ranges are appropriate for the entity:

In some cases, it might be more appropriate to use the If-Range header (see section 14.27) in addition to the Range header.

If a proxy that supports ranges receives a Range request, forwards the request to an inbound server, and receives an entire entity in reply, it SHOULD only return the requested range to its client. It SHOULD store the entire received response in its cache if that is consistent with its cache allocation policies.

14.36 Referer

The Referer[sic] request-header field allows the client to specify, for the server's benefit, the address (URI) of the resource from which the Request-URI was obtained (the "referrer", although the header field is misspelled.) The Referer request-header allows a server to generate lists of back-links to resources for interest, logging, optimized caching, etc. It also allows obsolete or mistyped links to be traced for maintenance. The Referer field MUST NOT be sent if the Request-URI was obtained from a source that does not have its own URI, such as input from the user keyboard.

If the field value is a relative URI, it SHOULD be interpreted relative to the Request-URI. The URI MUST NOT include a fragment. See section 15.1.3 for security considerations.

14.37 Retry-After

The Retry-After response-header field can be used with a 503 (Service Unavailable) response to indicate how long the service is expected to be unavailable to the requesting client. This field MAY also be used with any 3xx (Redirection) response to indicate the minimum time the user-agent is asked wait before issuing the redirected request. The value of this field can be either an HTTP-date or an integer number of seconds (in decimal) after the time of the response.

Two examples of its use are

In the latter example, the delay is 2 minutes.

14.38 Server

The Server response-header field contains information about the software used by the origin server to handle the request. The field can contain multiple product tokens (section 3.8) and comments identifying the server and any significant subproducts. The product tokens are listed in order of their significance for identifying the application.

If the response is being forwarded through a proxy, the proxy application MUST NOT modify the Server response-header. Instead, it SHOULD include a Via field (as described in section 14.45).

14.39 TE

The TE request-header field indicates what extension transfer-codings it is willing to accept in the response and whether or not it is willing to accept trailer fields in a chunked transfer-coding. Its value may consist of the keyword "trailers" and/or a comma-separated list of extension transfer-coding names with optional accept parameters (as described in section 3.6).

The presence of the keyword "trailers" indicates that the client is willing to accept trailer fields in a chunked transfer-coding, as defined in section 3.6.1. This keyword is reserved for use with transfer-coding values even though it does not itself represent a transfer-coding.

The TE header field only applies to the immediate connection. Therefore, the keyword MUST be supplied within a Connection header field (section 14.10) whenever TE is present in an HTTP/1.1 message.

A server tests whether a transfer-coding is acceptable, according to a TE field, using these rules:

If the TE field-value is empty or if no TE field is present, the only transfer-coding is "chunked". A message with no transfer-coding is always acceptable.

14.40 Trailer

The Trailer general field value indicates that the given set of header fields is present in the trailer of a message encoded with chunked transfer-coding.

An HTTP/1.1 message SHOULD include a Trailer header field in a message using chunked transfer-coding with a non-empty trailer. Doing so allows the recipient to know which header fields to expect in the trailer.

If no Trailer header field is present, the trailer SHOULD NOT include any header fields. See section 3.6.1 for restrictions on the use of trailer fields in a "chunked" transfer-coding.

Message header fields listed in the Trailer header field MUST NOT include the following header fields:

14.41 Transfer-Encoding

The Transfer-Encoding general-header field indicates what (if any) type of transformation has been applied to the message body in order to safely transfer it between the sender and the recipient. This differs from the content-coding in that the transfer-coding is a property of the message, not of the entity.

Transfer-codings are defined in section 3.6. An example is:

If multiple encodings have been applied to an entity, the transfer- codings MUST be listed in the order in which they were applied. Additional information about the encoding parameters MAY be provided by other entity-header fields not defined by this specification.

Many older HTTP/1.0 applications do not understand the Transfer- Encoding header.

14.42 Upgrade

The Upgrade general-header allows the client to specify what additional communication protocols it supports and would like to use if the server finds it appropriate to switch protocols. The server MUST use the Upgrade header field within a 101 (Switching Protocols) response to indicate which protocol(s) are being switched.

The Upgrade header field is intended to provide a simple mechanism for transition from HTTP/1.1 to some other, incompatible protocol. It does so by allowing the client to advertise its desire to use another protocol, such as a later version of HTTP with a higher major version number, even though the current request has been made using HTTP/1.1. This eases the difficult transition between incompatible protocols by allowing the client to initiate a request in the more commonly supported protocol while indicating to the server that it would like to use a "better" protocol if available (where "better" is determined by the server, possibly according to the nature of the method and/or resource being requested).

The Upgrade header field only applies to switching application-layer protocols upon the existing transport-layer connection. Upgrade cannot be used to insist on a protocol change its acceptance and use by the server is optional. The capabilities and nature of the application-layer communication after the protocol change is entirely dependent upon the new protocol chosen, although the first action after changing the protocol MUST be a response to the initial HTTP request containing the Upgrade header field.

The Upgrade header field only applies to the immediate connection. Therefore, the upgrade keyword MUST be supplied within a Connection header field (section 14.10) whenever Upgrade is present in an HTTP/1.1 message.

The Upgrade header field cannot be used to indicate a switch to a protocol on a different connection. For that purpose, it is more appropriate to use a 301, 302, 303, or 305 redirection response.

This specification only defines the protocol name "HTTP" for use by the family of Hypertext Transfer Protocols, as defined by the HTTP version rules of section 3.1 and future updates to this specification. Any token can be used as a protocol name however, it will only be useful if both the client and server associate the name with the same protocol.

14.43 User-Agent

The User-Agent request-header field contains information about the user agent originating the request. This is for statistical purposes, the tracing of protocol violations, and automated recognition of user agents for the sake of tailoring responses to avoid particular user agent limitations. User agents SHOULD include this field with requests. The field can contain multiple product tokens (section 3.8) and comments identifying the agent and any subproducts which form a significant part of the user agent. By convention, the product tokens are listed in order of their significance for identifying the application.

14.44 Vary

The Vary field value indicates the set of request-header fields that fully determines, while the response is fresh, whether a cache is permitted to use the response to reply to a subsequent request without revalidation. For uncacheable or stale responses, the Vary field value advises the user agent about the criteria that were used to select the representation. A Vary field value of "*" implies that a cache cannot determine from the request headers of a subsequent request whether this response is the appropriate representation. See section 13.6 for use of the Vary header field by caches.

An HTTP/1.1 server SHOULD include a Vary header field with any cacheable response that is subject to server-driven negotiation. Doing so allows a cache to properly interpret future requests on that resource and informs the user agent about the presence of negotiation

on that resource. A server MAY include a Vary header field with a non-cacheable response that is subject to server-driven negotiation, since this might provide the user agent with useful information about the dimensions over which the response varies at the time of the response.

A Vary field value consisting of a list of field-names signals that the representation selected for the response is based on a selection algorithm which considers ONLY the listed request-header field values in selecting the most appropriate representation. A cache MAY assume that the same selection will be made for future requests with the same values for the listed field names, for the duration of time for which the response is fresh.

The field-names given are not limited to the set of standard request-header fields defined by this specification. Field names are case-insensitive.

A Vary field value of "*" signals that unspecified parameters not limited to the request-headers (e.g., the network address of the client), play a role in the selection of the response representation. The "*" value MUST NOT be generated by a proxy server it may only be generated by an origin server.

14.45 Via

The Via general-header field MUST be used by gateways and proxies to indicate the intermediate protocols and recipients between the user agent and the server on requests, and between the origin server and the client on responses. It is analogous to the "Received" field of RFC 822 [9] and is intended to be used for tracking message forwards, avoiding request loops, and identifying the protocol capabilities of all senders along the request/response chain.

The received-protocol indicates the protocol version of the message received by the server or client along each segment of the request/response chain. The received-protocol version is appended to the Via field value when the message is forwarded so that information about the protocol capabilities of upstream applications remains visible to all recipients.

The protocol-name is optional if and only if it would be "HTTP". The received-by field is normally the host and optional port number of a recipient server or client that subsequently forwarded the message. However, if the real host is considered to be sensitive information, it MAY be replaced by a pseudonym. If the port is not given, it MAY be assumed to be the default port of the received-protocol.

Multiple Via field values represents each proxy or gateway that has forwarded the message. Each recipient MUST append its information such that the end result is ordered according to the sequence of forwarding applications.

Comments MAY be used in the Via header field to identify the software of the recipient proxy or gateway, analogous to the User-Agent and Server header fields. However, all comments in the Via field are optional and MAY be removed by any recipient prior to forwarding the message.

For example, a request message could be sent from an HTTP/1.0 user agent to an internal proxy code-named "fred", which uses HTTP/1.1 to forward the request to a public proxy at nowhere.com, which completes the request by forwarding it to the origin server at www.ics.uci.edu. The request received by www.ics.uci.edu would then have the following Via header field:

Proxies and gateways used as a portal through a network firewall SHOULD NOT, by default, forward the names and ports of hosts within the firewall region. This information SHOULD only be propagated if explicitly enabled. If not enabled, the received-by host of any host behind the firewall SHOULD be replaced by an appropriate pseudonym for that host.

For organizations that have strong privacy requirements for hiding internal structures, a proxy MAY combine an ordered subsequence of Via header field entries with identical received-protocol values into a single such entry. For example,

Applications SHOULD NOT combine multiple entries unless they are all under the same organizational control and the hosts have already been replaced by pseudonyms. Applications MUST NOT combine entries which have different received-protocol values.

14.46 Warning

The Warning general-header field is used to carry additional information about the status or transformation of a message which might not be reflected in the message. This information is typically used to warn about a possible lack of semantic transparency from caching operations or transformations applied to the entity body of the message.

Warning headers are sent with responses using:

A response MAY carry more than one Warning header.

The warn-text SHOULD be in a natural language and character set that is most likely to be intelligible to the human user receiving the response. This decision MAY be based on any available knowledge, such as the location of the cache or user, the Accept-Language field in a request, the Content-Language field in a response, etc. The default language is English and the default character set is ISO-8859-1.

If a character set other than ISO-8859-1 is used, it MUST be encoded in the warn-text using the method described in RFC 2047 [14].

Warning headers can in general be applied to any message, however some specific warn-codes are specific to caches and can only be applied to response messages. New Warning headers SHOULD be added after any existing Warning headers. A cache MUST NOT delete any Warning header that it received with a message. However, if a cache successfully validates a cache entry, it SHOULD remove any Warning headers previously attached to that entry except as specified for

specific Warning codes. It MUST then add any Warning headers received in the validating response. In other words, Warning headers are those that would be attached to the most recent relevant response.

When multiple Warning headers are attached to a response, the user agent ought to inform the user of as many of them as possible, in the order that they appear in the response. If it is not possible to inform the user of all of the warnings, the user agent SHOULD follow these heuristics:

Systems that generate multiple Warning headers SHOULD order them with this user agent behavior in mind.

Requirements for the behavior of caches with respect to Warnings are stated in section 13.1.2.

This is a list of the currently-defined warn-codes, each with a recommended warn-text in English, and a description of its meaning.

110 Response is stale MUST be included whenever the returned response is stale.

111 Revalidation failed MUST be included if a cache returns a stale response because an attempt to revalidate the response failed, due to an inability to reach the server.

112 Disconnected operation SHOULD be included if the cache is intentionally disconnected from the rest of the network for a period of time.

113 Heuristic expiration MUST be included if the cache heuristically chose a freshness lifetime greater than 24 hours and the response's age is greater than 24 hours.

199 Miscellaneous warning The warning text MAY include arbitrary information to be presented to a human user, or logged. A system receiving this warning MUST NOT take any automated action, besides presenting the warning to the user.

214 Transformation applied MUST be added by an intermediate cache or proxy if it applies any transformation changing the content-coding (as specified in the Content-Encoding header) or media-type (as specified in the Content-Type header) of the response, or the entity-body of the response, unless this Warning code already appears in the response.

299 Miscellaneous persistent warning The warning text MAY include arbitrary information to be presented to a human user, or logged. A system receiving this warning MUST NOT take any automated action.

If an implementation sends a message with one or more Warning headers whose version is HTTP/1.0 or lower, then the sender MUST include in each warning-value a warn-date that matches the date in the response.

If an implementation receives a message with a warning-value that includes a warn-date, and that warn-date is different from the Date value in the response, then that warning-value MUST be deleted from the message before storing, forwarding, or using it. (This prevents bad consequences of naive caching of Warning header fields.) If all of the warning-values are deleted for this reason, the Warning header MUST be deleted as well.

14.47 WWW-Authenticate

The WWW-Authenticate response-header field MUST be included in 401 (Unauthorized) response messages. The field value consists of at least one challenge that indicates the authentication scheme(s) and parameters applicable to the Request-URI.

The HTTP access authentication process is described in "HTTP Authentication: Basic and Digest Access Authentication" [43]. User agents are advised to take special care in parsing the WWW- Authenticate field value as it might contain more than one challenge, or if more than one WWW-Authenticate header field is provided, the contents of a challenge itself can contain a comma-separated list of authentication parameters.


Making Sense of Attribute Gage R&R Calculations

Measurement error is unavoidable. There will always be some measurement variation that is due to the measurement system itself.

Most problematic measurement system issues come from measuring attribute data in terms that rely on human judgment such as good/bad, pass/fail, etc. This is because it is very difficult for all testers to apply the same operational definition of what is “good” and what is “bad.”

However, such measurement systems are seen throughout industries. One example is quality control inspectors using a high-powered microscope to determine whether a pair of contact lens is defect free. Hence, it is important to quantify how well such measurement systems are working.

The tool used for this kind of analysis is called attribute gage R&R. The R&R stands for repeatability and reproducibility. Repeatability means that the same operator, measuring the same thing, using the same gage, should get the same reading every time. Reproducibility means that different operators, measuring the same thing, using the same gage, should get the same reading every time.

Attribute gage R&R reveals two important findings – percentage of repeatability and percentage of reproducibility. Ideally, both percentages should be 100 percent, but generally, the rule of thumb is anything above 90 percent is quite adequate.

Obtaining these percentages can be done using simple mathematics, and there is really no need for sophisticated software. Nevertheless, Minitab has a module called Attribute Agreement Analysis (in Minitab 13, it was called Attribute Gage R&R) that does the same and much more, and this makes analysts’ lives easier.

Having said that, it is important for analysts to understand what the statistical software is doing to make good sense of the report. In this article, the steps are reproduced using spreadsheet software with a case study as an example.

Steps to Calculate Gage R&R

Step 1: Select between 20 to 30 test samples that represent the full range of variation encountered in actual production runs. Practically speaking, if “clearly good” parts and “clearly bad” parts are chosen, the ability of the measurement system to accurately categorize the ones in between will not be tested. For maximum confidence, a 50-50 mix of good/bad parts is recommended. A 30:70 ratio is acceptable.

Step 2: Have a master appraiser categorize each test sample into its true attribute category.

Figure 1: Master Appraiser Categorizations

Step 3: Select two to three inspectors and have them categorize each test sample without knowing what the master appraiser has rated them.

Step 4: Place the test samples in a new random order and have the inspectors repeat their assessments.

Step 5: For each inspector, count the number of times his or her two readings agree. Divide this number with the total inspected to obtain the percentage of agreement. This is the individual repeatability of that inspector (Minitab calls this “Within Appraiser”).

To obtain the overall repeatability, obtain the average of all individual repeatability percentages for all inspectors. In this case study, the overall repeatability is 95.56 percent, which means if the measurements are repeated on the same set of items, there is a 95.56 percent chance of getting the same results, which is not bad but not perfect.

Figure 3: Individual Repeatability

In this case, the individual repeatability of Operator 1 is only 90 percent. This means that Operator 1 is only consistent with himself 90 percent of the time. He needs retraining.

Step 6: Compute the number of times each inspector’s two assessments agree with each other and also the standard produced by the master appraiser in Step 2.

Figure 4: Individual Effectiveness

This percentage is called the individual effectiveness (Minitab calls this “Each Appraiser vs. Standard”). In this case, Operator 1 is in agreement with the standard only 80 percent of the time. He needs retraining.

Step 7: Compute the percentage of times all the inspectors’ assessments agree for the first and second measurement for each sample item.

Figure 5: Reproducibility of the Measurement System

This percentage is the reproducibility of the measurement system (Minitab calls this “Between Appraiser”). All three inspectors agree with each other only 83.3 percent of the time. They may not be all using exactly the same operational definition for pass/fail all the time or may have a very slight difference in interpretation of what constitutes a pass and a failure.

Step 8: Compute the percentage of the time all the inspectors’ assessments agree with each other and with the standard.

Figure 6: Overall Effectiveness of the Measurement System

This percentage gives the overall effectiveness of the measurement system (Minitab calls this “All Appraiser vs. Standard”). It is the percent of time all inspectors agree and their agreement matches with the standard.

Minitab produces a lot more statistics in the output of the attribute agreement analysis, but for most cases and use, the analysis outlined in this article should suffice.

So What If the Gage R&R Is Not Good?

The key in all measurement systems is having a clear test method and clear criteria for what to accept and what to reject. The steps are as follows:


Retrieving the date

It is simple to make PowerShell display the current date. To do so, just enter the Get-Date cmdlet. If you need to display the date in a certain way, then PowerShell offers a number of different options for doing so. The simplest method is to use a display hint. The DisplayHint parameter can be set to Date, Time, or DateTime. The image below shows how the basic Get-Date cmdlet works, and a few examples of using the DisplayHint parameter.

If you need a bit more control over the output, you can use the Format parameter or the UFormat parameter. The Format parameter is mostly used when you need to put the date into a certain format for the purpose of making a comparison. We won’t be using the Format parameter in this article, but it is still a good idea to be aware of its existence.

The UFormat parameter is used more for display purposes. It allows you to arrange the various elements that make up the date and time in a way of your choosing. All you have to do is to append various formatting characters to the UFormat parameter. The parameters that you can use include:

%M — Month (as a number)
%D — Date
%Y — Year
%A — The day of the week
%Z — The time zone, expressed as an offset from UTC or Zulu time. For example, -5 is Eastern Time in the United States.

You can see an example below of how the UFormat parameter works.


There are two things that are worth paying attention to in the image above. First, you will notice that everything following the UFormat parameter is enclosed in quotation marks. This is because I am not just specifying formatting characters, I can also use text. In the figure, I used a mixture of text and formatting characters.

The other thing to notice is that even though I live on the East Coast of the United States, which normally has a time zone offset of -5, the output in the figure above shows the offset as -4. This is because it is daylight saving time. But wouldn’t it be nice to be able to verify that? We can actually. Here is how it’s done:

As you can see in the image below, PowerShell shows a value of True, indicating that it is indeed daylight savings time.


DateTime Data Type

The dateTime data type is used to specify a date and a time.

The dateTime is specified in the following form "YYYY-MM-DDThh:mm:ss" where:

  • YYYY indicates the year
  • MM indicates the month
  • DD indicates the day
  • T indicates the start of the required time section
  • hh indicates the hour
  • mm indicates the minute
  • ss indicates the second

Note: All components are required!

The following is an example of a dateTime declaration in a schema:

An element in your document might look like this:

Or it might look like this:

Time Zones

To specify a time zone, you can either enter a dateTime in UTC time by adding a "Z" behind the time - like this:

or you can specify an offset from the UTC time by adding a positive or negative time behind the time - like this:


Operators

Adds a specified time interval to a DateTimeOffset object that has a specified date and time, and yields a DateTimeOffset object that has new a date and time.

Determines whether two specified DateTimeOffset objects represent the same point in time.

Determines whether one specified DateTimeOffset object is greater than (or later than) a second specified DateTimeOffset object.

Determines whether one specified DateTimeOffset object is greater than or equal to a second specified DateTimeOffset object.

Defines an implicit conversion of a DateTime object to a DateTimeOffset object.

Determines whether two specified DateTimeOffset objects refer to different points in time.

Determines whether one specified DateTimeOffset object is less than a second specified DateTimeOffset object.

Determines whether one specified DateTimeOffset object is less than a second specified DateTimeOffset object.

Subtracts one DateTimeOffset object from another and yields a time interval.

Subtracts a specified time interval from a specified date and time, and yields a new date and time.